访问ADO:当对象关闭时不允许操作错误消息

时间:2012-05-31 17:53:58

标签: ms-access vba

我正在将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

4 个答案:

答案 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#”中的列之一。我相当确定是#导致我发生了此错误。我希望这对以后的人有所帮助。

谢谢-壳牌