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 的评论)是可能的。
我有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 的评论)是可能的。