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

时间:2015-05-12 13:11:34

标签: vb.net loops vbscript ado recordset

我有课

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错误'800a0e78'

     

关闭对象时不允许操作。

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

1 个答案:

答案 0 :(得分:2)

VBscript函数通过对函数名称的赋值返回其结果:

>> 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

然后你不需要全局(phooey!)变量objRec

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

会将(唯一的)rst设置为记录集,并且不可能存在不合适的互动(参见Alex的评论)。