我试图在按钮点击事件上打开2个ADODB记录集,如:
Private Sub btn1_Click()
Dim rs As New ADODB.Recordset
Dim rst As New ADODB.Recordset
rs.Open "UPDATE table ITEM = " & Me.ITEM & " where ID = " & ID, CurrentProject.Connection
rs.Close
Set rs = Nothing
rst.Open "Update Table2 set Item2 = " & Me.Item2,CurrentProject.Connection
End Sub
我得到的第一个错误是在rs.close
,它说:
关闭对象时不允许操作。
我真的很困惑这个错误,因为我显然没有关闭记录集rs
。
但即使我删除rs.close
我得到:
您输入的表达式是指已关闭或不存在的对象
在...上
rst.Open "Update Table2 set Item2 = " & Me.Item2,CurrentProject.Connection
发生了第一个错误(在rs.Close
上),因为记录集从未打开过。
您的UPDATE
(当您包含SET
关键字时)已成功执行,但UPDATE
不会返回记录。所以记录集没有打开。运行以下代码以澄清情况......
Dim rs As New ADODB.Recordset
Dim strUpdate As String
strUpdate = "UPDATE table SET ITEM = " & Me.item & " where ID = " & id
rs.Open strUpdate, CurrentProject.Connection
If rs.State = adStateClosed Then
Debug.Print "can't close recordset because it's already closed"
Else
rs.Close
End If
当你想执行UPDATE
时,你不需要记录集;你甚至不需要ADO。你可以这样做......
CurrentDb.Execute strUpdate, dbFailOnError
关于你的第二个错误,我不确定原因,但怀疑问题在于构建语句文本。建议你将它添加到你的代码并运行它...
Debug.Print "Update Table2 set Item2 = " & Me.Item2
如果这不会触发相同的错误,请从“立即”窗口复制语句文本,并将其粘贴到Access查询设计器中的新查询的SQL视图中进行测试。如果您不熟悉立即窗口,Ctrl + g将带您到那里。
.Open
方法不适用于动作查询,而是适用于选择查询。
由于您正在评估update
语句,您应该使用.Execute
的ADODB Connection object方法而不是.Open
方法。