我有带有 TIBQUery-TDataSetProvider-TClientDataSet 的 Delphi 应用程序,它或多或少地模拟了 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
如果只想停止执行并报告错误,有哪些指导方针?我希望应用程序中的零智能 - 我只能提供更有意义的错误消息,但所有更正都应由用户完成。