为啥我的 ODBC 在添加新记录后立即失败?

Posted

技术标签:

【中文标题】为啥我的 ODBC 在添加新记录后立即失败?【英文标题】:Why does my ODBC fail immediately after adding a new record?为什么我的 ODBC 在添加新记录后立即失败? 【发布时间】:2016-07-02 02:13:39 【问题描述】:

从我的 Access 2016 前端将新记录添加到 SQL 链接表后,立即弹出一条 ODBC 错误消息,并且表中的所有数据都变为#Name?

这是一个合并复制的数据库。

记录确实在错误之前成功插入,我可以在关闭并重新打开表后看到它。现有记录也可以编辑和删除。唯一的问题是,在添加新记录后,ODBC 将被删除,并出现 Invalid Cast Specification (#0) 错误。我将无效数据放入其中是没有意义的,因为插入的新记录与我输入的所有数据完全一样。我只需关闭并重新打开表格即可查看新数据。

我正在处理这个问题的第二周,我觉得我已经尝试了所有方法。每次在此特定表中添加新记录时,我都无法让系统生成错误。数据库中的所有其他表都很好。

这是我的表格布局:

CREATE TABLE [dbo].[TrnRegistration](
    [fkClassSchedID] [int] NULL,
    [fkCompanyID] [int] NULL,
    [NumberUsers] [int] NULL,
    [Notes] [nvarchar](max) NULL,
    [Contact] [nvarchar](50) NULL,
    [fkUserTypeID] [int] NULL,
    [fkOrderTypeID] [int] NULL,
    [OrderRef] [nvarchar](50) NULL,
    [FloatClassID] [int] NULL,
    [LocFrstID] [int] NULL,
    [LocScndID] [int] NULL,
    [SalesRep] [int] NULL,
    [RegistrationID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [VerifDate] [bit] NOT NULL DEFAULT ((0)),
    [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT     [MSmerge_df_rowguid_8C3233BCD5FB4C7AA23281E8C482C778]  DEFAULT   (newsequentialid()),
 CONSTRAINT [TrnRegistration_PK] PRIMARY KEY NONCLUSTERED 
(
    [RegistrationID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

【问题讨论】:

我不确定我是否能够提供帮助,但我对错误何时发生感到困惑。您说记录插入很好,因为您可以看到新记录。但是你说当你得到错误时,插入的记录更改为#Name?并且插入后发生错误。如果插入后发生错误,如何确认插入是好的?插入记录 -> 错误 -> 记录有#Name。您在该流程中的哪个位置打开表格并且插入看起来不错?查看新记录后是否出现错误? Access 中的链接 ODBC 表在某些数据类型或列配置方面存在问题。例如。 Bit columns that can be NULL,但这似乎不是问题所在。我的猜测是ROWGUIDCOL 列。 Access 在表设计视图中为此显示什么数据类型?您在其他表中是否有 ROWGUIDCOL 列? 尝试使用标准 SQL 驱动程序重新链接表,而不是使用本机 10/11 驱动程序。现在,本机 11 驱动程序在您给定的表上不起作用 - 我不确定为什么。但是,标准的默认 SQL 驱动程序似乎可以工作 artm - 这是我的流程:打开表格>在新记录中输入数据>按回车键保存记录>所有记录中的所有数据(整个表格显示)立即变为#Name?并且我收到一条 ODBC 失败错误消息>关闭用#Name 填充的表? values>重新打开表格>所有记录都可以看到和编辑没有问题,包括我刚刚输入的最后一条。 @Andre - 是的,我认为 Rowguidcol 确实与它有关,因为当我在 SQL 中从头开始重新创建有问题的表并通过 Access 链接到它时,它工作正常。然后,当我将表作为文章添加到合并复制时(这正是 Access 自动添加 ROWGUIDCOL 时),并再次将其重新链接到 Access 时,即开始发生错误。 【参考方案1】:

如果我粘贴到您的创建表中,则与本机 11 的链接不起作用,但默认标准驱动程序(您似乎正在使用的驱动程序)确实有效。但是,由于我的测试不是复制数据库,因此用于复制的列是问题所在。

简单的解决方案是创建一个省略复制列 (rowGuid) 的视图。然后,您链接到该视图来代替表格。您当然可以在链接后删除原始表链接,然后将链接表重命名为您在 Access 中使用的相同名称 - 因此,此建议将允许所有表单/报告/代码/SQL 在原始表的基础上像以前一样工作使用的表名。

因此,使用省略一列的视图,并从 Access 链接到该视图应该可以实现这一点。

【讨论】:

以上是关于为啥我的 ODBC 在添加新记录后立即失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 vsql 可以返回所有记录,而使用 ODBC 驱动程序不能?

Sequelize - 无法添加或更新子行:外键约束失败

为什么我的SQL Server审核触发器搞乱了来自Access的ODBC调用/刷新?

MS Access VBA 和 SQL Server - 记录集更新时 ODBC 调用失败

为啥我的SSL证书验证失败

在 SQL 中检索记录后立即更新表