将 ODBC 链接 table 与 ODBC 链接视图交换后,MS Access 无法正常工作

MS Access not working after swapping ODBC linked table with ODBC linked view

我的公司使用 SQL 服务器数据库,以 Access 作为前端。服务器上最大的 table 之一称为 tbl_Contacts。主键 "ContactID" 被设置为自动递增的 "int" 数据类型。结果昨天下午,"int"类型运行的限制出来了,table.

无法添加新联系人了

起初我尝试只将数据类型更新为 "bigint",但随后 Access 无法识别数据类型并在联系人 table 中的所有字段显示 "Deleted" .

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

我最终制作了 tbl_Contacts 的视图并使用此 SQL 修改 ContactID 字段,包括 table 中的所有其他字段。

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

然后我将 Access 中的旧链接 table 重命名为 tbl_Contacts_OLD,将新的 ContactsView table 添加到具有 ODBC 连接的 Access 中,并将视图重命名为 "tbl_Contacts".

我以为一切正常,因为我可以再次向 table 添加新记录,但事实证明有些事情仍然无法正常工作。

我唯一能想到的是我数据库中的其他 table 期望 "ContactID" 成为 "Long Integer",但他们不喜欢它是 "Decimal".

当我尝试使用将数据添加到链接到 "tbl_Contacts" 的 table "tbl_CallLog" 的表单时,出现此错误。

Run-time error '3101' The MS Access database engine cannot find a record in the table 'tbl_Contacts' with key matching field(s) 'ContactID'

我是否应该转换为 Access 2010 可以识别和使用的其他数据类型?是否还有一个步骤我还需要做,也许将十进制值转换为 Access 中的另一种数据类型?

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

BigInt 只能被 Access 2016 理解。

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

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

我的tbl_Contactstable里面只有99k条记录,但是由于各种原因,加上table已经20岁了,IDENTITY SEED是2+亿, "int" 数据类型的限制。我查看了 ID,发现有 120k 个数字的差距,所以我使用这个查询来重置我的种子值。

DBCC CHECKIDENT ('[tbl_Contacts]', RESEED, -92801); 开始

我现在创建了几个测试联系人,第一个的ID号是-92800。

在年中我可以安装新的 CRM 系统之前,我应该会坚持下去。

感谢古斯塔夫的评论。