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

标签 sql sql-server sql-server-2008 ms-access

我使用的 SQL 数据库迁移到新服务器后出现问题。现在,当尝试在 Access(表单或表格)中编辑记录时,它会显示:写入冲突:此记录自您开始编辑以来已被其他用户更改...

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

最佳答案

可能出现的问题:

1 个并发编辑

原因可能是相关记录已以您正在编辑的表单打开。如果您在编辑 session 期间以编程方式更改记录,然后尝试关闭表单(从而尝试保存记录),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 位问题)。

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

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

<小时/>

3 个空位问题

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

知识库文章说使用 *.adp 而不是 *.mdb;然而,Microsoft discontinued the support for Access Data Projects (ADP) in Access 2013 .

关于sql - 在 Access/SQL 中编辑记录问题(写入冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993301/

相关文章:

按平均值排序的 MySQL 表 JOIN

SQLite 存在关键字 : How to query the highest average?

sql-server - SQL Server 如何压缩 NULL 位数据类型?

sql-server - 如何使用 N 在 SQL Server 中插入多语言数据?

sql - 索引扫描、索引查找和表扫描

sql-server-2008 - 如何检查计算列是否持久?

MySQL 查询以返回指示的两个单词之间的所有文本(子字符串?)

sql - 在字母索引中查找候选人的上一个和下一个条目

sql - 按键值表中的多行过滤结果

Python/PyODBC 通过 IP 与可信连接连接到 SQL Server 2008 DB