1

我正在使用带有本地表的 Access 2003,该表稍后将被传输并链接到 SQL Server 2008 表。我正在使用以下代码,但收到错误:cnn.Execute 行上的“运行时错误 3704:对象关闭时不允许操作”。

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

4 回答 4

15

也遇到了这个错误(在我的例子中,我使用存储过程来检索一些信息)。我做了一些更改,导致执行出现故障。

当我SET NOCOUNT ON作为存储过程的第一条语句时,错误消失了。

于 2013-03-08T16:55:14.330 回答
2

尝试CurrentProject.Connection.Execute strSQL而不是声明您的cnn对象。

于 2012-05-31T19:14:08.597 回答
1

那很简单。您需要添加

cnn.Open

在 cnn.Execute 之前的某个地方,也不要忘记调用

cnn.Close
Set cnn = nothing

在退出潜艇之前

于 2012-05-31T17:56:08.713 回答
-1

我最近也遇到了这个问题。我的错误出现了,因为我将 sql 查询中的一列命名为“Pit#”。我相当确定是 # 导致我发生此错误。我希望这对将来的某人有所帮助。

谢谢——壳牌

于 2020-09-29T22:54:34.407 回答