所以我最近要把一个Access数据库的后端转移到Postgres上。将表链接到表单并更新 VBA 编码后,我尝试使用主键字段创建一条新记录。我通过后端验证该字段已成功创建,但是当我尝试将新数据插入字段并保存数据时,Access 总是给我这个错误。
“写入冲突:此记录自您开始编辑以来已被其他用户更改。如果您保存记录,您将覆盖其他用户所做的更改。” 我只有两个选项:复制到剪贴板和删除更改。
最奇怪的是,如果我尝试打开现有记录并修改字段,我可以成功保存。写入冲突错误仅在我添加的新记录上弹出。
我试着在网上做一些研究,我已经在表中添加了时间戳,所有表都有 PKeys。谁能解释这背后的原因?非常感谢!
最佳答案
我知道这个问题很老,但问题仍然存在(在 MS Access 2013 上测试过),有些人可能正在寻找解决方案。
根据 PostgreSQL FAQ这是由 Access 和 Postgre 在 2 个特定情况下的细微差异引起的。在更新记录时, Access 会添加一些条件以确保记录未被任何人更改。如果它们中的任何一个失败,数据库返回没有记录被更新,这被解释为它们同时被修改。
空字符串
Access 不知道空字符串 (''
) 和 NULL 之间的区别,而 postgre 知道。如果您在字段中留下空字符串,Access add ... 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)
(秒精度).
希望对您有所帮助。
关于vba - MS Access ODBC 与 PostgreSQL 表写入冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088970/