gpt4 book ai didi

ms-access - 使用“查找”对话框的 MS Access “Update or CancelUpdate” 错误

转载 作者:行者123 更新时间:2023-12-04 20:57:16 25 4
gpt4 key购买 nike

我们有一个 MS Access 2007 数据库,其中包含一个显示表格数据的简单表单。我们使用“查找”对话框(单击“主页”功能区上的双筒望远镜)来定位我们想要的记录。在特定情况下,这可能会导致错误。

重现问题的步骤:

  • 打开表格。
  • 打开查找对话框。
  • 编辑记录中的某个字段。
    记录现在处于更新模式
    (你会在一行中看到铅笔
    “排水沟”区域)。
  • 不保存记录,点击
    已经打开的查找对话框。
  • 搜索无法找到的记录
    成立。
  • 再次点击表格。记录
    仍处于编辑模式(即
    铅笔仍然显示)。尝试保存
    或编辑其他字段。
  • 将显示此消息框
    “更新或取消更新而不
    添加新或编辑。”您可以单击确定或
    帮助按钮。

  • 单击帮助按钮显示:

    You tried to call Update or CancelUpdate or attempted to update a Field in a recordset without first calling AddNew or Edit. (Error 3020)

    On a Microsoft Access database engine database, you called the Update or CancelUpdate method but did not use the AddNew or Edit method before writing data to a record.

    On an ODBCDirect database, this error occurs when you attempt to write data to a record without first calling AddNew or Edit.



    我们在一个没有 VBA 代码的新数据库中复制了这一点。所以问题仅在 MS Access 中,您应该能够轻松重现它。

    如果在查找之前保存记录,则不会发生问题。不幸的是,我们有用户在记录仍处于编辑模式时进行查找。

    我们已经尝试设置表单级、数据字段级和 Access 应用程序级事件和错误处理。没有什么可以检测或捕捉到这种情况。 VBA 中无法检测“查找”对话框是否处于事件状态。

    有没有人有任何想法可以防止错误或在查找发生之前保存记录的方法?我们现在最好的想法是创建一个 AutoHotkey 或 AutoIt 脚本,等待 Find 对话框获得焦点。然后我们将发送一个 Ctrl+S 来保存当前记录以强制保存。

    最佳答案

    @CodeSlave 的回答向我暗示了一种可能性:

    不是简单地从工具栏/功能区中移除双筒望远镜,而是更改双筒望远镜的功能。也就是说,让它调用代码来保存当前记录,如果它是脏的,然后启动 FIND 对话框。

    现在,需要一些代码来检查表单是否打开,并且它有一个记录源(如果没有记录源,则测试 .Dirty 属性错误),以及一个字段是否具有焦点,但是所有这些是可行的。可能其中许多(除了最后一个)将通过仅在加载表单时显示工具栏/功能区或在表单打开时编辑默认工具栏/功能区来处理。

    但这比使用进程外解决方案要简单得多,而且您的用户不会知道任何区别。

    关于ms-access - 使用“查找”对话框的 MS Access “Update or CancelUpdate” 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228705/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com