【问题标题】:ADODB.Connection error '800a0e78' Operation is not allowed when the object is closedADODB.Connection 错误 '800a0e78' 对象关闭时不允许操作
【发布时间】:2015-05-12 13:11:33
【问题描述】:

我有课

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'

对象关闭时不允许操作。

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

【问题讨论】:

  • ExecuteUpdateSQL 什么都不返回? - 如果它返回objRec,则rstobjRec 引用相同的记录集,当您显式关闭rst 然后尝试关闭objRec 您尝试关闭基础记录集两次,因此出现错误。
  • 在您的代码中,ExecuteUpdateSQL 实际上是否返回任何内容?
  • 这是原始代码,所以我认为它不会返回任何东西
  • 但是Set rst = db.ExecuteUpdateSQL 会产生其他错误....
  • 您发布的代码显然不可能引发您声称的错误。请让您的代码示例minimal, complete, and verifiable。当您的示例代码不允许重现问题时,我们无法为您提供帮助。

标签: vb.net loops vbscript ado recordset


【解决方案1】:

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 的评论)。

【讨论】:

  • 我有更改,但在同一行上仍然出现相同的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多