MS Access ODBC 与 PostgreSQL 表写入冲突

SuS*_*anD 2 postgresql ms-access vba

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

“写入冲突:自您开始编辑该记录以来,该记录已被其他用户更改。如果保存该记录,您将覆盖其他用户所做的更改。” 我只得到两个选项:复制到剪贴板和删除更改。

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

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

小智 7

我知道这个问题很旧,但问题仍然存在(在MS Access 2013上测试),有些人可能正在寻找解决方案。

根据PostgreSQL FAQ,这是由 Access 和 Postgre 在 2 个特定情况下的细微差异引起的。在更新记录时,访问会添加一些条件以确保该记录不被任何人更改。如果其中任何一个失败,数据库将返回没有记录被更新的信息,这被解释为它们同时被修改。

空字符串

Access 不知道空字符串 ( '') 和NULL之间的区别,而 postgre 知道。如果在字段中保留空字符串,则 Access 添加... AND column_name IS NULL"会在数据库中失败。目前只有解决方法 -确保所有空字符串都存储为NULL

时间戳

PostgreSQL 时间戳具有微秒精度,而 Access 仅支持毫秒。在这种情况下,Access 对超出的部分进行四舍五入,因此例如2016-02-22 12:34:56.788952转换为2016-02-22 12:34:56.789稍后比较失败的内容。这可以通过降低数据库中时间戳的精度来解决。将类型更改为(对于毫秒精度) 或(对于秒精度)timestamptimestamp(3)timestamp(0)

我希望它有帮助。

  • 降低时间戳精度解决了我的问题。时间戳是通过触​​发器在后台更新的,而不是由 MS Access 发送的,因此它具有更高的精度。 (2认同)