我们有一个MS Access 2007数据库,其中包含一个显示表格数据的简单表单。我们使用查找对话框(单击主页功能区上的双筒望远镜)来查找我们想要的记录。这可能会在特定情况下导致错误。使用查找对话框MS Access“更新或取消更新”错误
步骤来重现问题:
- 打开窗体。
- 打开查找对话框。
- 在记录中编辑一些字段。 该记录现在处于更新模式 (您将在行的 “排水沟”区域看到铅笔)。
- 不保存记录,点击 ALREADY打开查找对话框。
- 搜索不能找到的记录 。
- 再次单击窗体。记录 仍处于编辑模式(即铅笔仍显示 )。尝试保存 或编辑其他字段。
- 此消息框将显示 “更新或取消更新没有 添加新建或编辑”。您可以单击确定或 帮助按钮。
点击帮助按钮显示:
尝试调用Update或CancelUpdate或试图以更新记录现场 而无需先调用的AddNew或编辑。 (Error 3020)
在将Microsoft Access数据库引擎数据库中的 数据写入记录之前,您调用了更新或 CancelUpdate方法,但未使用AddNew或Edit方法。
在ODBCDirect数据库上,当您尝试在没有首先调用AddNew或Edit的情况下将数据 写入记录时,就会发生此错误。
我们已经在没有VBA代码的新数据库中重现了这一点。所以这个问题完全在MS Access中,你应该能够很容易地重现它。
如果您在查找之前保存记录,则问题不会发生。不幸的是,当记录仍处于编辑模式时,我们有用户正在查找。
我们尝试设置表单级别,数据字段级别和Access应用程序级别事件和错误处理。没有什么可以检测或捕捉到这种情况VBA无法检测“查找”对话框是否处于活动状态。
有没有人有任何想法来防止错误或在发现之前保存记录的方法?我们现在最好的想法是创建AutoHotkey或AutoIt脚本,等待查找对话框获得焦点。然后,我们将发送Ctrl + S来保存当前记录以强制保存。
是自定义功能区更改为查找功能适合您的选项(http://office.microsoft.com/en-us/access-help/customize-the-ribbon-HA010211415.aspx)? – Fionnuala 2010-11-19 20:09:10
Ctrl-S不保存记录。它保存了当前UI对象的设计(在这种情况下,您正在编辑的表单)。 – 2010-11-21 22:19:56
正如@Remou所建议的那样,我会用打开前保存的缺省FIND快捷方式替换,或者编写我自己的查找代码。一般来说,我会说依靠UI的find函数表示一个欠发达的应用程序用户界面。 – 2010-11-21 22:20:55