我使用的是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来拒绝发布时,在编辑中重新输入所有更改的数据。