Access / SQL 中的编辑记录问题(写入冲突)

新手上路,请多包涵

将我使用的 SQL DB 迁移到新服务器后出现问题。现在,当尝试在 Access(表单或表格)中编辑记录时,它会显示: WRITE CONFLICT: This record has been changed by another user since you started editing it...

是否有任何不明显的原因。没有其他人使用服务器,我已禁用表上的任何触发器。我刚刚发现这与 NULL 有关,因为没有任何记录是可以的,但是某些具有 NULL 的行则不是。会不会跟索引有关?如果相关,我最近开始每天批量上传,而不是使用 Access 中的 INSERT INTO 一次上传一个。

原文由 aSystemOverload 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 959
2 个回答

可能出现的问题:

1 并发编辑

一个原因可能是相关记录已在您正在编辑的表单中打开。如果您在编辑会话期间以编程方式更改记录,然后尝试关闭表单(并因此尝试保存记录),则 access 表示该记录已被其他人更改(当然是您,但 Access 不知道)。

在以编程方式更改记录之前保存表单。

在表格中:

 'This saves the form's current record
Me.Dirty = False

'Now, make changes to the record programmatically


2 缺少主键或时间戳

确保 SQL-Server 表具有主键以及时间戳 (= rowversion ) 列。

时间戳列帮助 Access 确定自上次选择后是否已编辑记录。如果没有可用的时间戳,Access 通过检查所有字段来执行此操作。如果没有时间戳列,这可能不适用于空条目(请参阅 3 Null bits issue )。

时间戳实际上存储的是行版本号而不是时间。

添加时间戳列后不要忘记刷新access中的表链接,否则Access是看不到的。 (注意:将 Access 表转换为 SQL-Server 表时,Microsoft 的升迁向导会创建时间戳列。)


3 空位问题

根据@AlbertD.Kallal 的说法,这可能是此处描述的空位问题: KB280730 (WayBackMachine 上的最后一个快照,原始文章已被删除)。如果您使用的是位字段,请将其默认值设置为 0 并将之前输入的任何 NULL 替换为 0 。我通常使用 BIT DEFAULT 0 NOT NULL 作为布尔字段,因为它最接近布尔值的概念。

知识库文章说使用 *.adp 而不是 *.mdb;但是, Microsoft 在 Access 2013 中停止了对 Access Data Projects (ADP) 的支持

原文由 Olivier Jacot-Descombes 发布,翻译遵循 CC BY-SA 4.0 许可协议

刚刚在 MS Access 365 连接到 PostgreSQL 服务器上遇到了这个问题。该错误仅在尝试编辑第一行时发生。我手动删除了 pgAdmin 4中的第一行,然后再次手动添加。这解决了这个问题。

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进