vba - 间歇性运行时错误 3021 - 没有当前记录 - MS Access
问题描述
TL;DR - 在其他 MS 应用程序中对访问数据输入表单中的数据进行处理的 Subs有时会为某些用户抛出 3021 错误,但再次执行完全相同的步骤不会导致错误。
这个错误让我发疯。我一直在这里和我能找到的所有其他论坛中搜索问题,要么它们不适用于我的情况,要么它们没有给我足够的信息来弄清楚发生了什么,所以我知道下一步该采取什么步骤。
我有一个拆分数据库,BE 存储在 Sharepoint 列表中。FE 只是每个用户本地机器上的应用程序。有相当多的表格、报告和查询,但总体思路是,这用于记录两个不同部门之间的问题,其中包含大量不同格式的其他信息。使用了 3 种主要表格:问题输入表格,然后是每个部门的 2 个表格,用于更新其所在方的信息。
在主要问题输入表单上有几个命令按钮,关闭按钮被禁用。其中几个按钮是“保存并新建”、“保存并退出”、“删除并退出”。这些按预期工作,没有问题。其他按钮要么打开 Outlook 任务,要么打开 Excel 文件并用表单中的数据填充这些项目。命令按钮的所有 subs 如下所示:
If Me.Dirty Then Me.Dirty = False
Set OApp = CreateObject("Outlook.Application")
Set OTask = "OApp.CreateItem(3)
'Start taking pieces of the form and assigning it to the task
上面的评论是所有这些潜艇行为不端的地方。但问题和我发疯的原因是因为它不会一直发生。每次发生这种情况(到目前为止,大约 400 个条目中的 10 次)我的一个用户来找我,我看了一下,整个表单都被清除了,就像他们没有输入任何东西一样,所以我理解 3021 错误,但是记录已保存,因此它至少必须到达我的代码的 Me.Dirty 部分。我只是不明白为什么当我开始尝试在 Access 之外执行某些操作时它会清除表单并引发错误。
由于这种情况是断断续续的,我什至不知道下一步是如何尝试找到这个随机错误,该错误会根据风向的方式选择发生或不发生。
编辑1:所以我已经深入研究并弄清楚了这种情况何时发生以及它发生在代码中的什么位置。因此,这只发生在用户下载最新版本后第一次打开数据输入表单时。如果他们将其全部关闭并重新打开,则不再有问题。它看起来如此断断续续的原因是因为一些用户会在星期一下载它。有些人会在星期四下载它。有些人会在下周下载它。他们只需在下次必须使用数据库时下载它。3021“无当前记录”实际上发生在 Me.Dirty = False 行上。If Me.Dirty 行是实际清除表单的内容。由于记录正在保存,我认为它已经过了那个点,但事实并非如此。奇怪的是,如果我使用断点单步执行代码,我会得到 3167 "
概括:
If Me.Dirty Then '<--This clears the form
Me.Dirty = False '<--This results in error 3021 because the form is now empty
解决方案
推荐阅读
- node.js - 为什么没有将数据写入我的 Amazon DynamoDB 表?
- sql - SQL 中 ')' 附近的语法不正确
- r - 如何将变量传递给ggplot aes / ..y ..函数的一部分
- javascript - 如何使用javascript将回调添加到函数中?
- javascript - 使用 Babel 创建单个 JavaScript 包的最佳方式
- c++ - 以十六进制生成随机 16 字节数组
- svn - svn:如何将分支的工作副本与主干的特定修订版进行比较
- sharepoint - 事件接收器(范围到网络),部署时,它附加到列表,但它也附加到站点
- java - 为什么我的计算不正确?
- python - Django - 在 form.py Meta 类中添加小部件选项?