如何判断ClientDataSet在ApplyUpdate时出错?(100分)

  • 主题发起人 主题发起人 enter_von
  • 开始时间 开始时间
E

enter_von

Unregistered / Unconfirmed
GUEST, unregistred user!
ClientDateSet1.ApplyUpdate;
ClientDateSet2.ApplyUpdate;
任何一个更新出错,中止此操作;
我是用了ADOConnection的事务处理,但如何知道ClientDateSet更新出错?
或有什么更好的方法可以实现此目的,请指教!
 
TDataSetProvider 有很多事件啊,总有一个有用的
 
.ApplyUpdate(0)
 
to:yanlei 不行啊
我想这样处理,有没有更好的方法啊
//-- begin
trans
ADOConnection1.begin
Trans;
try
ClientDateSet1.ApplyUpdates(0);
ClientDateSet2.ApplyUpdates(0);
//-- commint
ADOConnection1.CommitTrans;
except
ClientDateSet1.CancelUpdates;
ClientDateSet2.CancelUpdates;
//-- Rollback Trans
ADOConnection1.RollbackTrans;
end;
 
但楼上这么写的好像不行呀。在ApplyUpdates(0)出错后,它跳出对话框。
但当你点确定后,它会继续执行下一句话。
也就是讲,Try EXCEPT 无法捕捉这个错误。
我也此疑问,不知道如何解决
 
是啊,该疑问也捆饶了我好久,
不知道有什么比较好的解决方案
 
呵呵,在datasnap中也碰到这个问题,有人用个奇特的办法解决,太笨了。
用if applyupdate(0)>0 来表示出错,这样与数据调和就冲突了
不用try except结构。
始终着办法很笨,再去想想。

 
ClientDateSet1.ApplyUpdate返回的就是错误数,如果没有错误就返回0
icount:integer;
icount:=ClientDateSet1.ApplyUpdates(0);
 
提交數據時產生錯誤
有的會觸發異常﹔但有的就不會(只是返回錯誤數).
因此除了上面的做法外﹐還要在ClientDataSet的OnReconcileError中寫相應的代碼﹐
如ADOConnection1.RollbackTrans等;
 
try
if clientDataset.ApplyUpdates(0 )>0 then
raise EDataBaseError.Create('Error')
except
showmessage('Error')
end;
 
ADOConnection1.begin
Trans;
if ClientDateSet1.ApplyUpdates(-1)+ClientDateSet2.ApplyUpdates(-1)=0 then
ADOConnection1.CommitTrans
else
ADOConnection1.RollbackTrans;
 
多人接受答案了。
 
后退
顶部