Delphi and ADODataset.Cancel



我使用的是Dephi 10.1 Berlin和Access 2013。

我的问题与TADODataSet.Cancel()有关。

我想在发布前向用户显示一个要求确认的消息框,以防数据被修改。

TADODataSet.BeforePost事件中,我添加了以下代码:

if Application.MessageBox('Save changes?', '', 52) = idNo then
ADODataSet1.Cancel;

如果用户单击btnNo,则会发生意外情况。

将取消对当前记录的更改,但会创建一个所有字段都为空的新记录。

唯一包含某些数据的字段是用户以前修改过的字段。

如果我通过TDBNavigator的取消按钮取消修改,一切都很好。

如果我在BeforePost事件中模拟点击TDBNnavigator的取消按钮:

if Application.MessageBox('Save changes?', '', 52) = idNo then
DBNavigator1.BtnClick(nbCancel);

我也有同样的行为,所以创建了一个新的空记录。

有什么建议吗?

TADDataSet.BeforePost的帮助部分说明:

调用Abort以取消Post操作(Delphi(或引发异常(C++(。

所以:

if Application.MessageBox('Save changes?', '', 52) = idNo then
abort;

请注意,这是为了防止未通过验证的更改(BeforePost的常见用法(被发布。它不会像cancel那样重置编辑缓冲区。通常,这是UI中的一个单独功能,因此用户不必在每次通过在BeforePost中调用abort来拒绝发布时,在编辑中重新输入所有更改的数据。

最新更新