gpt4 book ai didi

delphi - 如果我只想停止执行并报告错误,该如何在Delphi TDataSetProvider.OnUpdateError中做什么?

转载 作者:行者123 更新时间:2023-12-03 08:22:07 25 4
gpt4 key购买 nike

我有带有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的准则是什么?我希望应用程序中的智能为零-我只能提供更有意义的错误消息,但所有更正应由用户完成。

最佳答案

如果您想使您的应用程序多层化,就不想在提供程序事件处理程序中使用ShowMessage。只需使用cds.ApplyUpdates(最大错误计数为0)并使用OnReconcileError事件处理程序即可。这是“应用更新”帮助主题的摘录:
“ApplyUpdates使用单个参数MaxErrors,该参数指示提供者在中止更新过程之前应允许的最大错误数。如果MaxErrors为0,则一旦发生更新错误,整个更新过程就会终止。没有任何更改。写入数据库,并且客户端数据集的更改日志保持不变”。这不是你的追求吗?

关于delphi - 如果我只想停止执行并报告错误,该如何在Delphi TDataSetProvider.OnUpdateError中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53745681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com