我有一个带有TIBQUery-TDataSetProvider-TClientDataSet Delphi应用程序,它或多或少地模拟了CachedUpdates模式(也就是在以前的BDE组件中)。目前没有错误处理代码,所以根本没有错误消息。我只想启用以下场景:当查询遇到来自数据库的任何错误时,所有的链接都应该停止工作,保持当前值,回滚已经发布的更改并显示消息。我想--所有这些都可以通过实现TDataSetProvider.OnUpdateError来实现。我有两个代码提案。第一个:
procedure TBillDM.BillProvUpdateError(Sender: TObject;
DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
begin
inherited;
raise E;
end;另一种变体是:
procedure TBillDM.BillProvUpdateError(Sender: TObject;
DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
begin
inherited;
Response:=rrAbort;
BillQry.Transaction.RollbackRetaining;
ShowMessage(E.Message);
end;这些代码模式很合理吗?如果只是想停止执行并报告错误,OnUpdateError的指导原则是什么?我想在应用程序中零智能-我只能提供更有意义的错误消息,但所有的更正应该由用户完成。
发布于 2018-12-13 14:53:32
如果你想让你的应用程序是多层的,你不会想要在提供程序的事件处理程序中使用ShowMessage。只需使用最大错误计数为0的cds.ApplyUpdates,并利用OnReconcileError事件处理程序。以下是“应用更新”帮助主题的摘录:"ApplyUpdates接受单个参数MaxErrors,该参数指示提供程序在中止更新过程之前应容忍的最大错误数。如果MaxErrors为0,则只要发生更新错误,整个更新过程就会终止。不会将任何更改写入数据库,而客户端数据集的更改日志将保持不变。“这不就是你要找的吗?
https://stackoverflow.com/questions/53745681
复制相似问题