vba - MS Access ODBC 与 PostgreSQL 表写入冲突

标签 vba postgresql ms-access

所以我最近要把一个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/

相关文章:

vba - Excel 查找数字组合的函数

excel - 在 excel 或 vba 中查找值

vba - 在 Excel 表中自动更新数据时返回确切更新内容的消息

postgresql - SQL 状态 : 22P02 invalid input syntax for integer: "f"

ms-access - 如何从查询中输出 bool 值

vba - 使用 VBA 进行网页抓取

python - 无法使用 Airflow 连接到 Postgres 数据库

sql - 从 Postgres 中的复合类型数组中进行选择

ms-access - 如何持续开发和部署 Access 2010 数据库应用程序

ms-access - 有没有更高效的方式在一个Form的不同文本框中显示多个查询结果