我有 Delphi 应用程序,它带有TIBQUery-TDataSetProvider-TClientDataSet,或多或少地模拟了CachedUpdates模式(在以前的BDE组件中)。目前没有错误处理代码,因此,根本没有错误消息。我只想启用以下场景:当查询遇到任何来自数据库的错误时,所有的链接都应该停止工作,保持当前值,回滚已经发布的更改并显示消息。我想-所有这些都可以通过实现TDataSetProvider. OnUpdateError来完成。我有2个代码建议。第一个:
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
的指导方针是什么?我希望应用程序中没有智能-我只能提供更有意义的错误消息,但所有的更正都应该由用户完成。
1条答案
按热度按时间rfbsl7qr1#
如果要使应用程序具有多层性,则不希望在提供程序事件处理程序中显示消息。只需使用cds.ApplyUpdates(将0作为最大错误计数)并利用OnReconcileError事件处理程序。以下是“应用更新”帮助主题摘录:“ApplyUpdates采用单个参数MaxErrors,该参数指示提供程序在中止更新过程之前应允许的最大错误数。如果MaxErrors为0,则一旦发生更新错误,整个更新过程就会终止。不会向数据库写入任何更改,并且客户端数据集的更改日志保持不变”。这不正是您所追求的吗?