将 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 的数据类型应为 Long 或 GUID。 长 是迄今为止最常用的。
所以这不是世界上最好的解决方案,但我最终通过以下操作解决了我的问题。
我的tbl_Contactstable里面只有99k条记录,但是由于各种原因,加上table已经20岁了,IDENTITY SEED是2+亿, "int" 数据类型的限制。我查看了 ID,发现有 120k 个数字的差距,所以我使用这个查询来重置我的种子值。
DBCC CHECKIDENT ('[tbl_Contacts]', RESEED, -92801);
开始
我现在创建了几个测试联系人,第一个的ID号是-92800。
在年中我可以安装新的 CRM 系统之前,我应该会坚持下去。
感谢古斯塔夫的评论。
我的公司使用 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 的数据类型应为 Long 或 GUID。 长 是迄今为止最常用的。
所以这不是世界上最好的解决方案,但我最终通过以下操作解决了我的问题。
我的tbl_Contactstable里面只有99k条记录,但是由于各种原因,加上table已经20岁了,IDENTITY SEED是2+亿, "int" 数据类型的限制。我查看了 ID,发现有 120k 个数字的差距,所以我使用这个查询来重置我的种子值。
DBCC CHECKIDENT ('[tbl_Contacts]', RESEED, -92801); 开始
我现在创建了几个测试联系人,第一个的ID号是-92800。
在年中我可以安装新的 CRM 系统之前,我应该会坚持下去。
感谢古斯塔夫的评论。