使用ODBC链接视图交换ODBC链接表后,MS Access无法正常工作

时间:2018-01-19 16:08:07

标签: sql-server-2005 ms-access-2010

我公司使用SQL Server数据库,Access作为前端。服务器上最大的表之一称为tbl_Contacts。主键“ContactID”被设置为自动递增的“int”数据类型。原来昨天下午,“int”类型的限制用完了,没有新的联系人可以添加到表中。

首先我尝试将数据类型更新为“bigint”,但Access无法识别数据类型,并显示“联系人”表格中所有字段的“已删除”。

我阅读了大量不同的文章,并意识到Access 2010无法理解bigint数据类型,并且我需要将该字段转换为Access可以理解的其他类型。

我最终创建了一个tbl_Contacts视图,并使用此SQL修改了ContactID字段,包括表格中的所有其他字段。

CAST(ContactID AS Decimal(15, 0)) AS ContactID

然后我将Access中的旧链接表重命名为tbl_Contacts_OLD,使用ODBC连接将新的ContactsView表添加到Access中,并将View重命名为“tbl_Contacts”。

我认为一切正常,因为我可以再次向表中添加新记录,但事实证明有些事情仍然无效。

我唯一可以想象的是,我的数据库中的其他表期望“ContactID”是“长整数”,并且他们不喜欢它是“十进制”。 < / p>

当我尝试使用将数据添加到表“tbl_CallLog”(链接到“tbl_Contacts”)的表单时,我收到此错误。

  

运行时错误'3101'   MS Access数据库引擎无法在表'tbl_Contacts'中找到记录,其中包含密钥匹配字段'ContactID'

我应该投射到Access 2010可以识别和使用的其他数据类型吗?是否可能需要执行一个步骤,可能将十进制值转换为Access中的另一种数据类型?

我是否需要在引用原始Contacts表的所有其他表上转换数据类型,以便它们的链接字段现在是十进制数据类型?

2 个答案:

答案 0 :(得分:0)

只有Access 2016才能理解

BigInt

记录ID的数据类型应为 Long GUID Long 是迄今为止最常用的。

答案 1 :(得分:0)

所以这不是世界上最好的解决方案,但我最终解决了我的问题。

我的tbl_Contacts表中只有99k记录,但由于种种原因,而且表格已有20年历史,IDENTITY SEED的数量已超过2亿,这是&#34; int&#34;数据类型。我查看了ID并找到了120k数字的间隙,因此我使用此查询重置了种子值。

DBCC CHECKIDENT(&#39; [tbl_Contacts]&#39;,RESEED,-92801); GO

我现在已经创建了多个测试联系人,第一个的ID号为-92800。

这应该让我感到高兴,直到我能在今年年中建立一个新的CRM系统。

感谢Gustav的评论。