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

Access中Large Number类型字段更新失败问题求助

解决Access VBA更新Large Number字段时的"Multiple-step OLE DB operation generated errors"错误

问题重现

测试代码如下:

Private Sub test()
Dim rs As New ADODB.Recordset
Dim size As LongLong

        rs.Open "Select * From LocalFiles ", _
                CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
                
         rs.AddNew
         size = 12345678912345#
         rs("FileSize") = size
         rs.Update  ' 报错:Multiple-step OLE DB operation generated errors
         rs.Close

End Sub
  • 数据库FileSize字段为Large Number类型,已启用该类型且为支持Large Number的新数据库
  • 使用VBA的LongLong类型存储数据,仅在赋值rs("FileSize") = size后触发更新错误

原因分析

你推测的OLE DB驱动不支持Large Number类型是准确的。Access的ADODB连接(基于OLE DB)对Large Number字段的原生支持存在兼容性问题,无法直接将VBA的LongLong类型值映射到该字段。

解决办法

方法1:使用DAO记录集替代ADODB

DAO是Access原生的数据访问接口,对Large Number字段支持更完善:

Private Sub test()
Dim rs As DAO.Recordset
Dim size As LongLong

Set rs = CurrentDb.OpenRecordset("LocalFiles", dbOpenDynaset)
rs.AddNew
size = 12345678912345#
rs("FileSize") = size
rs.Update
rs.Close
Set rs = Nothing
End Sub

方法2:通过SQL语句直接插入/更新

绕开记录集赋值,直接用参数化SQL传递数值:

Private Sub test()
Dim size As LongLong
Dim sqlStr As String

size = 12345678912345#
sqlStr = "INSERT INTO LocalFiles (FileSize) VALUES (@FileSize)"

With CurrentProject.Connection
    .Execute sqlStr, Array(size)
End With
End Sub

方法3:将数值转为字符串后赋值(临时 workaround)

如果必须使用ADODB,可以先把LongLong转为字符串,再赋值给字段:

Private Sub test()
Dim rs As New ADODB.Recordset
Dim size As LongLong

rs.Open "Select * From LocalFiles ", _
        CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
        
rs.AddNew
size = 12345678912345#
rs("FileSize") = CStr(size) ' 转为字符串赋值
rs.Update
rs.Close
Set rs = Nothing
End Sub

注意:此方法仅适用于纯数字的Large Number字段,若字段涉及小数需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:28:21