我有通过ODBC连接到MySQL服务器(不是Microsoft SQL Server)的MS Access 2007表的问题。
如果MySQL表中的唯一标识符是BIGINT - 所有单元格内容都显示如下:“#Deleted”。
我找到了这篇文章:
"#Deleted" errors with linked ODBC tables (at support.microsoft.com)
它说:
以下是一些可用于避免此问题的策略 行为:
避免输入除唯一索引之外完全相同的记录。
避免更新触发唯一索引和其他字段的更新。
由于此数据类型存在固有的舍入问题,因此不要将Float字段用作唯一索引或作为唯一索引的一部分。
使用SQL传递查询执行所有更新和插入操作,以便准确了解发送到ODBC数据源的内容。
使用SQL传递查询检索记录。 SQL传递查询不可更新,因此不会导致 “#Delete”错误。
避免在构成链接ODBC表的唯一索引的任何字段中存储Null值。
但我没有“避免”这些事情。我的问题出在BIGINT。为了确定是否这样,我创建了2个表,一个具有INT id,一个具有BIGINT。就是这样。
我无法在生产数据库中将BIGINT更改为INT。
有什么方法可以解决这个问题吗?
我正在使用:Access 2007,mysql-connector-odbc-3.51.30-winx64,MySQL服务器5.1.73。
答案 0 :(得分:1)
您可以尝试在Access查询上创建表单,并使用查询中的CInt()将BIGINT转换为INT。这在表单处理之前发生。根据您的情况,您可能需要在查询中转换为字符串(CStr()),然后手动处理验证用户是否使用IsNumeric输入了数字。我的想法是欺骗表单而不是试图解释数据类型,这似乎是你的问题。
答案 1 :(得分:1)
Access 2016现在支持BigInt:https://blogs.office.com/2017/03/06/new-in-access-2016-large-number-bigint-support/
答案 2 :(得分:1)
这是2019年,并且使用Oracle(v 8.0.17)和Access 365(v 16.0.11904)的最新ODBC驱动程序,仍然会出现问题。
勾选ODBC“将BIGINT列作为INT列”,并在选项中启用对Bigint的访问支持后,带有Bigint #id列的链接表(主键)显示为已删除。 Ruby默认情况下会创建它们,因此我们不愿意这样做。
如果我们禁用以上两个选项,Access会认为#id列bigint是一个字符串并显示数据。但随后字段类型不再是bigint或int。
这很可悲,因为这个问题现在已经有10年了。
答案 3 :(得分:0)
MySQL驱动程序可以选择将BIGINT
值转换为INT
。这会为你解决问题吗?