我有课
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'
关闭对象时不允许操作。
我做错了什么?以及如何解决这个问题?
答案 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的评论)。