You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法编辑/删除SQL Server链接至MS Access的表行,报错多用户同时编辑

SQL Server 2008 R2 + Access ODBC链接表更新/删除报错排查

以下是排除已知原因后的可能问题及排查方向:

  • 主键列数据异常:
    虽已设置整数主键,仍需确认SQL Server端主键列无重复值、无NULL。执行以下SQL检查:

    SELECT 主键列名, COUNT(*) AS 重复次数 
    FROM 问题表名 
    GROUP BY 主键列名 
    HAVING COUNT(*) > 1;
    

    若存在重复,需先清理数据(删除重复行或调整主键)——主键约束本应阻止重复,但如果是事后添加主键时未处理历史数据,可能导致索引异常,引发Access误判。

  • ODBC驱动版本不兼容:
    旧版Jet ODBC驱动对SQL Server 2008 R2的支持有限,建议更换为SQL Server Native Client 10.0或更高版本(如ODBC Driver 11 for SQL Server):

    1. 在ODBC数据源管理器中删除旧DSN,重新创建使用新驱动的DSN;
    2. 删除Access中的链接表,用新DSN重新链接。
  • 缺少rowversion/timestamp列:
    Access默认依赖SQL Server的rowversion(旧称timestamp)列进行乐观并发检测,若表无此列,Access会用所有列值对比,一旦有隐性数据修改(如SQL Server端自动更新的列)就会误判为多用户冲突。解决方法:
    在SQL Server表中添加该列:

    ALTER TABLE 问题表名 ADD 行版本列名 rowversion;
    

    无需手动赋值,SQL Server会自动维护每行的版本标识,Access链接后会自动使用该列做冲突检测。

  • SQL Server端触发器/约束的隐性修改:
    若表存在UPDATE/DELETE触发器,或有默认值、计算列等自动修改数据的逻辑,Access读取数据后,这些逻辑会改变行数据,导致Access认为数据被其他用户修改。排查方法:
    暂时禁用触发器,测试更新/删除是否正常;若恢复正常,调整触发器逻辑,避免在用户操作时修改Access未跟踪的列。

  • Access链接表主键识别错误:
    即使SQL Server端有主键,Access链接时可能未正确识别。打开Access中链接表的设计视图,确认主键列旁有钥匙图标;若没有,右键点击对应列,选择「主键」手动设置,然后保存链接表。

  • 未提交的SQL Server事务:
    若SQL Server端存在未提交的事务(比如之前操作中断未回滚),会导致行锁未释放,Access执行更新/删除时触发冲突。执行以下命令检查:

    DBCC OPENTRAN;
    

    若存在未提交事务,确认无业务影响后用ROLLBACK TRANSACTION回滚。

  • 数据类型兼容性问题:
    若表中存在SQL Server特有的数据类型(如datetime2、varchar(max)、nvarchar(max)),旧版Jet驱动可能无法正确解析,导致Access无法跟踪行变化。尝试将此类列转换为兼容类型(如datetime、varchar(8000))后测试。

内容的提问来源于stack exchange,提问作者intellicon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:05:29