如何捕获ClientDataSet.ApplyUpdates的错误,不用ReconcileError
cdsEmp:TClientDataSet;
//保存
procedure TfrmEmp.btnSave(Sender: TObject);
begin
cdsEmp.RemoteServer.AppServer.BegTrans;
try
cdsEmp.ApplyUpdates(0); //更新错误在这一句发生,但是我却永远也捕获不到,
//我想自已在异常处理里显示这里发生的错误信息该怎么办?
cdsQrObj.RemoteServer.AppServer.ComTrans;
except
on E:Exception do
begin
cdsEmp.RemoteServer.AppServer.RobTrans;
Application.MessageBox(pchar(存盘失败!+#13#10+错误信息:+E.Message)
, 提示,mb_ok+MB_ICONEXCLAMATION);
abort;
end;
end;
end;
//如果用这个错误处理,我的事务回滚却不知放在何处才妙,并且我不是想用这个错误处理
procedure TfrmEmp.cdsEmpReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
HandleReconcileError(DataSet, UpdateKind, E);
action:=raAbort;
end;
据我所知,只能用ReconcileError
可以用下面的方法判断是否错误
BeginTransaction;
if cdsMaster.ApplyUpdates(0)+cdsDetail.ApplyUpdates(0)=0 then
CommitTransaction
else
RollbackTransaction;
ApplyUpdates方法返回更新时遇到的错误数量.
在datasetProvider的onUpdateError
raise E;
然后就可以在客户端的
try
clientdataset1.applyUpdates(0);
except
on e:exception do
...
end;
这个问题搞了我一个星期
楼主,肯定好用啊