可能出现的问题:
1 并发编辑
一个原因可能是相关记录已在您正在编辑的表单中打开。如果您在编辑会话期间以编程方式更改记录,然后尝试关闭表单(并因此尝试保存记录),则 access 表示该记录已被其他人更改(当然是您,但 Access 不知道)。
在以编程方式更改记录之前保存表单。
在表格中:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 缺少主键或时间戳
确保 SQL-Server 表具有主键和时间戳列。
时间戳列帮助 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) 的支持。