将我使用的 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 许可协议
可能出现的问题:
1 并发编辑
一个原因可能是相关记录已在您正在编辑的表单中打开。如果您在编辑会话期间以编程方式更改记录,然后尝试关闭表单(并因此尝试保存记录),则 access 表示该记录已被其他人更改(当然是您,但 Access 不知道)。
在以编程方式更改记录之前保存表单。
在表格中:
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) 的支持。