ADODB.Connection 错误 '800a0e78' 对象关闭时不允许操作

ADODB.Connection error '800a0e78' Operation is not allowed when the object is closed

我有class

Class dbaccess

Public Sub DBOpenAccess()
    ...
    strConnStr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="
    strConnStr = strConnStr & strDBLoc & ";"
    Set cnnObj = server.CreateObject("ADODB.Connection")
    cnnObj.Open strConnStr
End Sub
...
Public Function OpenRec()
     Set objRec = server.CreateObject("ADODB.Connection")
End Function

    Public Function ExecuteUpdateSQL(strSQLStatement)
         Set objRec = cnnObj.Execute(strSQLStatement)
    End Function
...
    Public Function CloseRec()
         objRec.close
         Set objRec = Nothing
    End Function
End Class

当我想从其他子程序执行查询并循环遍历记录集时

Sub transl()
 Set db = New dbaccess
 Call db.DBOpenAccess()
 Call db.OpenRec() 

    Set rst = db.ExecuteUpdateSQL("select * from Translations")
       Do while Not rst.eof
        ...
       rst.movenext
       loop
    rst.close
    Set rst = Nothing
 Call db.CloseRec() 
 Call db.DBClose()
 Set db = Nothing
End Sub

但是我在行 objRec.close

上遇到错误

ADODB.Connection error '800a0e78'

Operation is not allowed when the object is closed.

我做错了什么?以及如何解决这个问题?

一个 VBscript 函数 returns 通过对函数名称赋值得到的结果:

>> Function add(x, y) : add = x + y : End Function
>> WScript.Echo add(4,5)
>>
9

因此您的 ExecuteUpdateSQL() 应该如下所示

Public Function ExecuteUpdateSQL(strSQLStatement)
     Set ExecuteUpdateSQL = cnnObj.Execute(strSQLStatement)
End Function

标记对象分配所需的Set

那么您不需要全局(糟糕!)变量 objRec

Set rst = db.ExecuteUpdateSQL("select * from Translations")

将(唯一的)rst 设置到记录集,并且没有不合适的交互(参见 Alex 的评论)是可能的。