200分紧急求教DELPHI6+MS SQL2000 的ApplyUpdate 问题?(200分)

  • 主题发起人 主题发起人 fszdw
  • 开始时间 开始时间
F

fszdw

Unregistered / Unconfirmed
GUEST, unregistred user!
保存的Button代码如下:
if not Assigned(dsMaster.DataSet) then exit ;
try
// dmcomm.bgsjzDatabase.StartTransaction ;
if Tquery(dsMaster.DataSet).cachedupdates then
begin
dsMaster.DataSet.Post ;
Tquery(dsMaster.DataSet).ApplyUpdates ;
// Tquery(dsMaster.DataSet).CommitUpdates ;
end
else
begin
if (dsMaster.DataSet.State = dsedit) or
(dsMaster.DataSet.State=dsInsert) then
dsMaster.DataSet.Post ;
end ;
// dmcomm.bgsjzDatabase.commit ;
except
Application.MessageBox('保存数据出错!','错误',MB_OK+MB_ICONWARNING);
出现如下问题:
1 当按保存Button时,编辑字段内容全部不为空情况下出现如下错误:"无法将空值插
入列'AA','A1表',该列不允许空值;INSERT失败".以后再保存也出同样错误.
2 退出程序重新启动后又能成功保存,直到不定期出现上述错误为止.
请赐教?解决后立即送上200分.
 
你一定是在数据库中对A1表中对的AA列设定了默认值,并不允许其为空

但在程序中却没有对此列进行任何录入(或你不允许用户前台进行任何修改)!

你只要在程序中任意在AA列以外,设定一值,post后,再一次打开数据集即可!

 
教你一办法,如果你不嫌麻烦写SQL的话:
StrSQL:保存SQL语句
StrSQL :='Begin
StrSQL :=StrSQL +你的语句;
^…………
StrSQL :=StrSQL+'Commit;';
StrSQL := StrSQL+'End;';
再将StrSQL交给ClientDataset的CommandText
然后Execute
并用try
except
end;
检测是否成功!
SQL语句, 可以Showmessage出来一个个检查!
同样可以完成你的事务功能!
 
A1表中对的AA列并未设定了默认值,但不允许其为空,
但问题是当SQL系统发出任何错误信息后,BDE都不能把该错误清掉,即使AA1列已输入值.
 
问题的根源就是HON所说的,请问该如何解决?
 
多人接受答案了。
 
后退
顶部