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
相关产品推荐
相关产品推荐

