数据单元"#Deleted"在Access中 - ODBC,MySQL和BIGINT唯一ID

时间:2014-10-13 14:04:07

标签: mysql ms-access odbc

我有通过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。

4 个答案:

答案 0 :(得分:1)

您可以尝试在Access查询上创建表单,并使用查询中的CInt()将BIGINT转换为INT。这在表单处理之前发生。根据您的情况,您可能需要在查询中转换为字符串(CStr()),然后手动处理验证用户是否使用IsNumeric输入了数字。我的想法是欺骗表单而不是试图解释数据类型,这似乎是你的问题。

答案 1 :(得分:1)

答案 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。这会为你解决问题吗?

enter image description here