MS Access ODBC与PostgreSQL表写冲突

时间:2014-08-01 21:30:40

标签: vba postgresql ms-access

所以我最近必须将Access数据库的后端转移到Postgres。在将表链接到表单并更新VBA编码之后,我尝试使用主键字段创建新记录。我验证了这个字段是通过后端成功创建的,但是当我尝试在字段中插入新数据并保存数据Access时总是给我这个错误。

"写入冲突:自您开始编辑以来,其他用户已更改此记录。如果保存记录,则会覆盖其他用户所做的更改。" 我只有两个选择:复制到剪贴板和删除更改。

最奇怪的是,如果我尝试打开现有记录并修改字段,我可以成功保存。写入冲突错误仅会弹出我添加的新记录。

我尝试在网上做一些研究,并且我在表中添加了时间戳,所有表都有PKeys。任何人都可以解释这背后的原因吗?非常感谢!

1 个答案:

答案 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)(第二精度)

我希望它有所帮助。