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

15

在我们的主数据输入屏幕上,我们在OnBeforePost事件中有一个确定/取消的对话框。

  • 确定让事情顺其自然
  • 取消 立即执行 Dataset.Cancel;

这样做可以实现它的目的,即撤消任何更改并将数据集置于浏览模式。

对于大多数客户来说,这是可以接受的,但我们被要求将其更改为

  • 取消,中止发布并保留当前更改的编辑模式。

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

查看procedure TDataSet.Post;的源代码,似乎不可能以这种方式使用该事件。

是否有人有关于如何做到这一点的想法?

后续:这是我现在选择处理它的方式

case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
  mrYes: ;
  mrNo: Dataset.Cancel;
  mrAbort: Abort;
  mrNone: Abort;
end;
1个回答

23
调用Abort方法(如果我没记错的话,来自单元System)会引发一个静默的EAbort异常,它只会取消当前操作。那应该可以解决问题。
(顺便说一句:通过这种方式取消数据库操作在帮助系统中也被描述为“正常”的方法 --- 这就是我最初学到这个技巧的地方)。

谢谢,这很有效。 看起来有点像 hack。但取消一个 Post 可能本来就有点像 hack。 - Christopher Chase
2
我同意这感觉像是一个hack,但它绝对不是(或者至少应该是这样)。请参阅文档:tinyurl.com/pxjuqs。实际上,我认为取消发布也是非常明智的 :) - onnodb
这个黑客技巧并不总是有效。如果您无法像在RESTClient中那样控制插入,也无法控制所有循环。而且您无法处理中止。这会导致中止所有RestRequest.Execute;调试起来很有趣。 - none

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接