Delphi:在OnBeforePost事件中取消TDataSet.Post

Chr*_*ase 15 delphi delphi-7 tdataset

在我们的主数据输入屏幕上,我们在OnBeforePost事件中有一个OK/Cancel对话框.

  • 好的,让事情顺其自然
  • 现在取消会有一个Dataset.Cancel;

这意味着什么,回滚任何更改并将数据集置于浏览模式.

这对大多数客户来说都很好,但我们被问到是否可以更改为

  • 取消,中止发布并保持编辑模式,保持当前更改.

如果他们想要取消,他们可以使用取消按钮.

查看源代码procedure TDataSet.Post;看起来不可能以这种方式使用事件.

任何人都有任何想法可以这样做吗?

跟进:这就是我现在选择处理它的方式

case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
  mrYes: ;
  mrNo: Dataset.Cancel;
  mrAbort: Abort;
  mrNone: Abort;
end;
Run Code Online (Sandbox Code Playgroud)

onn*_*odb 22

调用方法Abort(从单元中System,如果我没记错)会引发一个静默EAbort异常,它会取消当前操作.这应该工作.

(顺便说一句:这种取消数据集操作的方法也被描述在帮助系统的深处,作为实现这一目标的'正常'方式 - 这就是我从最初获得这种技术的地方).

  • 我同意这感觉像是黑客攻击,但它绝对不是(或者至少应该是这样的)。请参阅文档:tinyurl.com/pxjuqs 实际上,我认为取消帖子也是完全明智的:) (2认同)