迁移至SQL Server后Access链接表RecordSet.Update报错求助
Access链接SQL Server链接表RecordSet.Update报错解决方案
问题场景
将Access数据库通过SQL Migration Assistant迁移至SQL Server后,操作Access图形界面的链接表时,原有代码在Activity.Update处报错ODBC--Call failed on RecordSet。
原代码:
Dim Activity As RecordSet Set Activity = CurrentDb.OpenRecordset("UserActivity") Activity.AddNew Activity!ActivityType = "Login To Afya DB" Activity!RefDocument = Me.Name Activity!Description = "User Has Seen Home_Page" Activity!UserName = Me.txtUserName.Value Activity!ActionedOn = Format(Now(), "dd/mm/yyyy") Activity.Update
已尝试添加dbSeeChanges参数,但问题未解决:
Dim Activity As RecordSet Set Activity = CurrentDb.OpenRecordset("UserActivity", dbOpenDynaset, dbSeeChanges) Activity.AddNew Activity!ActivityType = "Login To Afya DB" Activity!RefDocument = Me.Name Activity!Description = "User Has Seen Home_Page" Activity!UserName = Me.txtUserName.Value Activity!ActionedOn = Format(Now(), "dd/mm/yyyy") Activity.Update
排查与解决步骤
- 检查SQL Server表主键配置:确保
UserActivity表在SQL Server中已设置主键,若主键为自增标识列(Identity),需确认Access链接表已正确识别该属性,迁移过程中主键丢失或未配置会直接导致更新失败。 - 修正日期赋值方式:代码中用
Format将日期转为字符串赋值给SQL Server日期字段,易引发类型不匹配,直接赋值日期类型即可:Activity!ActionedOn = Date() ' 需保留时间则用Now() - 显式声明DAO.Recordset:避免与ADODB对象冲突,变量声明修改为:
Dim Activity As DAO.Recordset - 更新ODBC驱动与链接属性:使用最新版SQL Server ODBC驱动(如ODBC Driver for SQL Server),并在Access链接表属性中勾选“允许编辑”“返回匹配的行”选项。
- 捕获详细错误信息:添加错误捕获代码获取具体ODBC错误详情,便于精准定位:
On Error GoTo ErrorHandler ' 原有业务代码 Exit Sub
ErrorHandler:
MsgBox "错误编号: " & Err.Number & vbCrLf & "错误描述: " & Err.Description & vbCrLf & "ODBC详情: " & DBEngine.Errors(0).Description
Resume Next
内容的提问来源于stack exchange,提问作者Richard Mahendeka
相关产品推荐
相关产品推荐

