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

MS Access错误91:对象变量或With块变量未设置问题求助

解决MS Access Error 91:对象变量或With块变量未设置的问题

嘿,我一眼就揪出问题所在了——你定义了db这个数据库对象变量,但完全没给它初始化赋值!当代码走到db.Execute这一步时,db还是个空对象,系统找不到对应的数据库实例,自然就抛出Error 91了。

另外你的SQL语句还有个低级拼写错误:把UPDATE写成了Updatable,这也会导致后续SQL执行失败,得一起改掉。

修复后的完整代码

Private Sub Cmdsave_Click()
    Dim db As Database
    Dim i As Integer ' 显式声明变量类型,避免变体类型的潜在问题
    
    ' 关键步骤:给db变量赋值,指向当前打开的数据库实例
    Set db = CurrentDb()
    
    For i = 0 To LISTQTY.ListCount - 1 Step 1
        ' 修正SQL拼写错误,把Updatable改为UPDATE
        db.Execute "UPDATE tblstock SET boxQty = boxQty + " & LISTQTY.Column(1, i) & " WHERE PID=" & Me.LISTQTY.Column(0, i) & ""
    Next i
End Sub

额外优化建议(可选)

为了避免SQL注入风险,同时让代码更健壮,推荐用参数化查询替代直接拼接字符串:

Private Sub Cmdsave_Click()
    Dim db As Database
    Dim i As Integer
    Dim qdf As QueryDef
    Dim sqlTemplate As String
    
    Set db = CurrentDb()
    ' 定义带参数的SQL模板
    sqlTemplate = "UPDATE tblstock SET boxQty = boxQty + [AddQty] WHERE PID=[ProductID]"
    
    For i = 0 To LISTQTY.ListCount - 1 Step 1
        Set qdf = db.CreateQueryDef("", sqlTemplate)
        ' 给参数赋值,避免字符串拼接的风险
        qdf.Parameters("[AddQty]") = LISTQTY.Column(1, i)
        qdf.Parameters("[ProductID]") = Me.LISTQTY.Column(0, i)
        qdf.Execute dbFailOnError ' 开启错误捕获,方便排查问题
        Set qdf = Nothing
    Next i
    
    Set db = Nothing
End Sub

这种写法不仅更安全,还能避免因为PID或数量里的特殊字符(比如单引号)导致的SQL语法错误。

内容的提问来源于stack exchange,提问作者vivekananda reddy vicky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:39:08