首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我只想停止执行并报告错误,在Delphi TDataSetProvider.OnUpdateError中该怎么做?

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

Stack Overflow用户
提问于 2018-12-12 22:53:05
回答 1查看 138关注 0票数 0

我有一个带有TIBQUery-TDataSetProvider-TClientDataSet Delphi应用程序,它或多或少地模拟了CachedUpdates模式(也就是在以前的BDE组件中)。目前没有错误处理代码,所以根本没有错误消息。我只想启用以下场景:当查询遇到来自数据库的任何错误时,所有的链接都应该停止工作,保持当前值,回滚已经发布的更改并显示消息。我想--所有这些都可以通过实现TDataSetProvider.OnUpdateError来实现。我有两个代码提案。第一个:

代码语言:javascript
复制
procedure TBillDM.BillProvUpdateError(Sender: TObject;
  DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
  var Response: TResolverResponse);
begin
  inherited;
  raise E;
end;

另一种变体是:

代码语言:javascript
复制
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的指导原则是什么?我想在应用程序中零智能-我只能提供更有意义的错误消息,但所有的更正应该由用户完成。

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 14:53:32

如果你想让你的应用程序是多层的,你不会想要在提供程序的事件处理程序中使用ShowMessage。只需使用最大错误计数为0的cds.ApplyUpdates,并利用OnReconcileError事件处理程序。以下是“应用更新”帮助主题的摘录:"ApplyUpdates接受单个参数MaxErrors,该参数指示提供程序在中止更新过程之前应容忍的最大错误数。如果MaxErrors为0,则只要发生更新错误,整个更新过程就会终止。不会将任何更改写入数据库,而客户端数据集的更改日志将保持不变。“这不就是你要找的吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53745681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档