我正在将Access 2003与本地表一起使用,该表稍后将被传输并链接到SQL Server 2008表。我使用以下代码,但得到错误:“运行时错误3704:关闭对象时不允许操作”在cnn.Execute行上。
sub test()
On Err GoTo Err_Sub
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim str As String
Dim strSQL As String
'Open a connection.
Set cnn = New ADODB.Connection
cnn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CurrentDb.Name & ";" & _
"Persist Security Info=False"
strSQL = Me.RecordSource
str = Mid(strSQL, InStr(strSQL, "Where "))
strSQL = "Update myTable SET Active = False " & str
Set rs = cnn.Execute(strSQL)
If Not rs Is Nothing Then rs.Close
Exit_Sub:
Set rs = Nothing
Exit Sub
Err_Sub:
MsgBox Err.Description
Resume Exit_Sub
End Sub
答案 0 :(得分:7)
也遇到这个错误(在我的情况下,我使用存储过程来检索一些信息)。我做了一些改变导致执行失灵。
当我将SET NOCOUNT ON
作为存储过程的第一个语句时,错误消失了。
答案 1 :(得分:2)
请尝试CurrentProject.Connection.Execute strSQL
,而不是声明您的cnn
对象。
答案 2 :(得分:1)
那很简单。你需要添加
cnn.Open
在cnn.Execute之前的某个地方 另外,别忘了打电话
cnn.Close
Set cnn = nothing
退出子
之前答案 3 :(得分:-1)
我最近也遇到了这个问题。出现错误是因为我正在命名sql查询“ Pit#”中的列之一。我相当确定是#导致我发生了此错误。我希望这对以后的人有所帮助。
谢谢-壳牌