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

Access前端迁移SQL Server后端后无法新增记录求助

解决Access前端迁移SQL Server后的更新报错问题

一、核心处理SSMA_timeStamp字段冲突

SSMA迁移时自动生成的SSMA_timeStamp字段是用于乐观并发控制的rowversion(原timestamp)类型,这个字段不能手动赋值(包括Now()),会由SQL Server自动维护,这也是你赋值时报错的根本原因。结合你用移除该字段的视图能正常运行的测试结果,可按以下两种方式处理:

  • 直接删除该字段:如果原Access系统未依赖乐观并发控制,直接在SQL Server中删除tbl_WorkOrders表的SSMA_timeStamp字段,彻底消除冲突。
  • 设置字段为只读:若需保留并发控制,在Access中链接tbl_WorkOrders后,打开表设计视图,将SSMA_timeStamp字段的「允许编辑」属性设为否,让前端代码不再尝试修改该字段。

二、修复DAO测试中的自增列错误

错误提示Cannot insert explicit value for identity column...说明你的代码在新增记录时,尝试给SQL Server的IDENTITY自增主键字段赋值。解决方式:

  • 修改代码逻辑:找到新增记录的代码段,删除所有对自增主键字段的赋值语句(比如rs("WorkOrderID") = xxx),SQL Server会自动生成主键值,和原Access自动编号逻辑一致。
  • 临时开启IDENTITY_INSERT(仅特殊场景):如果需要手动插入主键值(如补录历史数据),可先执行以下SQL语句,完成后再关闭:
    SET IDENTITY_INSERT tbl_WorkOrders ON
    -- 执行插入操作
    SET IDENTITY_INSERT tbl_WorkOrders OFF
    
    日常新增记录不建议使用此方式。

三、验证Bit字段默认值设置

确认SQL Server中两个Bit字段的配置:

  • 打开SSMS查看tbl_WorkOrders的字段属性,确保默认值为0(SSMA生成的((0))格式不影响生效),且「允许为空」设为否。
  • 在Access链接表中同步检查字段默认值,避免新增记录时因字段未赋值触发报错。

四、ADODB代码适配调整

原ADODB代码需做少量适配以兼容SQL Server:

  • 确保连接字符串使用ODBC Driver 17 for SQL Server(当前使用的驱动正确,避免旧驱动兼容性问题)。
  • 新增记录时明确指定要赋值的字段,不要包含SSMA_timeStamp和自增主键字段,示例:
    rs.AddNew
    rs("CustomerName") = "ABC Corp"
    rs("OrderDate") = Date()
    ' 仅赋值业务字段,跳过系统维护字段
    rs.Update
    

内容的提问来源于stack exchange,提问作者Dave by 2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:53:09