所以我最近必须将Access数据库的后端转移到Postgres。在将表链接到表单并更新VBA编码之后,我尝试使用主键字段创建新记录。我验证了这个字段是通过后端成功创建的,但是当我尝试在字段中插入新数据并保存数据Access时总是给我这个错误。
"写入冲突:自您开始编辑以来,其他用户已更改此记录。如果保存记录,则会覆盖其他用户所做的更改。" 我只有两个选择:复制到剪贴板和删除更改。
最奇怪的是,如果我尝试打开现有记录并修改字段,我可以成功保存。写入冲突错误仅会弹出我添加的新记录。
我尝试在网上做一些研究,并且我在表中添加了时间戳,所有表都有PKeys。任何人都可以解释这背后的原因吗?非常感谢!
答案 0 :(得分:3)
我知道这个问题很老,但问题仍然存在(在 MS Access 2013 上测试过),有些人可能正在寻找解决方案。
根据PostgreSQL FAQ,这是由于两个特定情况下Access和Postgre之间的细微差别造成的。在更新记录时,访问会添加一些条件以确保记录不会被任何人更改。如果其中任何一个数据库返回失败,则没有更新记录,这被解释为在此期间修改了它们。
当postgre执行时,Access不知道空字符串(''
)和 NULL 之间的区别。如果在字段中保留空字符串,则在数据库中失败的Access添加... AND column_name IS NULL"
。目前只有解决方法 - 确保所有空字符串都存储为 NULL 。
PostgreSQL时间戳具有微秒精度,而Access仅支持毫秒。在这种情况下,Access会对多余的内容进行舍入,因此例如2016-02-22 12:34:56.788952
将转换为2016-02-22 12:34:56.789
,后来在比较时失败。这可以通过降低数据库中时间戳的精度来解决。 将timestamp
类型更改为timestamp(3)
(毫秒精度)或timestamp(0)
(第二精度)。
我希望它有所帮助。