1

我正在使用 Dephi 10.1 Berlin 和 Access 2013。

我的问题与TADODataSet.Cancel().

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

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

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

如果用户点击btnNo,就会发生意想不到的事情。

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

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

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

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

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

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

有什么建议吗?

4

1 回答 1

1

TADODataSet.BeforePost 的帮助部分说明:

调用 Abort 取消 Post 操作 (Delphi) 或抛出异常 (C++)。

所以:

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

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

于 2020-11-03T20:45:59.943 回答