小编DHW*_*DHW的帖子

“事务中不支持操作”而在 Access 中复制/粘贴记录

将单元格从 Excel 复制/粘贴到 Access 子窗体中时,如果没有创建父记录,将导致错误 - 正如预期的那样。

问题是,发生此错误后,访问被锁定在一种状态,即输入的所有后续数据都会导致事务中不支持操作错误。当您打开该表时,您可以看到新添加的数据尚未出现在该表中 - 因此看起来 Access 实际上正在从事某种事务。

我试过点击“保存”..“刷新”..甚至添加一个 AfterInsert 事件来强制执行 commitTrans() 但没有运气 - Access 声称没有正在进行的交易

如果手动输入记录,则没有错误。该问题似乎仅在粘贴记录时发生。我猜测 Access 正在创建一个事务来处理多个记录操作,并且没有从错误中正确恢复。

我可以删除“必需”标志,它会起作用 - 但是你有孤儿记录。我在想,也许可以使用 After Insert Data Macro 来添加具有默认批次名称的新批次,并将新的 BatchID 自动填充到 Items 表中。然而,我不确定如何做到这一点。

我确实尝试使用更改前数据宏删除“必需”标志并捕获错误 - 但是虽然它减少了错误 - 它仍然产生了事务错误中不支持的相同操作

我在 Microsoft 知识库上查找了错误,但没有找到任何特定于我的情况的信息。我在 stackoverflow 中搜索了错误消息,但一无所获。

我创建了一个新数据库并能够复制该问题。

复制步骤

设置数据库

  1. 在 Access 2010 中创建新的 ACCDB 数据库
  2. 创建一个名为“批次”的表,其中包含以下字段:
    • BatchID(自动编号)(主键)
    • 批次名称(文本)
  3. 创建一个名为“Items”的表,其中包含以下字段:
    • RecordID(自动编号)(主键)
    • BatchID(长整数)
      • 必需属性设置为 True
    • 数据 - 文本
  4. 创建关系,将 Batches.BatchID 链接到 …

ms-access ms-access-2010

5
推荐指数
1
解决办法
5048
查看次数

如何检查 VBA 模块何时被修改?

我写了一个版本控制模块。每当我或其他维护者之一登录时,AutoExec 宏都会启动它。它会查找自上次更新以来已创建或修改的数据库对象,然后向版本表添加一个条目,然后打开该表(过滤为最后一条记录),这样我就可以输入我所执行的更改的摘要。

它对于表、查询、表单、宏等非常有效,但我无法让它在模块中正常工作。

我发现两个不同的属性表明了上次修改日期......

CurrentDB.Containers("Modules").Documents("MyModule").Properties("LastUpdated").Value
CurrentProject.AllModules("MyModule").DateModified
Run Code Online (Sandbox Code Playgroud)

第一个 (CurrentDB) 始终将“LastUpdated”显示为创建日期,除非您修改模块的描述或界面中的某些内容。这告诉我这个属性纯粹是针对容器对象的 - 而不是其中的内容。

第二个效果要好得多。它准确地显示了我修改和编译/保存模块的日期。唯一的问题是,当您保存或编译模块时,它会再次保存/编译所有模块,因此将 DateModified 字段全面设置为相同的日期。这有点违背了在各个模块上拥有 DateModified 属性的目的,不是吗?

所以我的下一步行动将会更加激烈。我想我需要维护所有模块的列表,并使用 VBA 扩展计算每个模块中的代码行数。然后,如果代码行与列表记录的不同 - 那么我知道该模块已被修改 - 我只是不知道什么时候,除了“自从我上次检查以来”

有人有更好的方法吗?我宁愿不执行下一步操作,因为我可以看到它明显影响数据库性能(以不好的方式)

ms-access vba

5
推荐指数
1
解决办法
2384
查看次数

标签 统计

ms-access ×2

ms-access-2010 ×1

vba ×1