【问题标题】:Error on Connection close when connecting VBA to Oracle将 VBA 连接到 Oracle 时连接关闭时出错
【发布时间】:2011-07-25 15:22:28
【问题描述】:

从 Excel 电子表格中的 VBA 代码连接到 Oracle 数据库时遇到错误。我运行的查询工作正常,但是当我尝试关闭连接时,我收到以下错误:

运行时错误 3265:在与请求的名称或序号对应的集合中找不到项目。

我的代码副本如下。错误发生在“cn.close”行。任何帮助将不胜感激!

Sub GetData()
Dim cn As New ADODB.Connection 
comm As New ADODB.Command
rs As New ADODB.Recordset
On Error GoTo errhandler:

    cn.ConnectionString = "DSN=XXX;Uid=XXX;Password=XXX;"    
    cn.Open

    comm.CommandType = adCmdText
    comm.CommandText = "Select * from XXX where rownum < 10;"
    Set comm.ActiveConnection = cn
    rs.ActiveConnection = cn
    rs.Open comm
    Sheets("Sheet1").Range("a1").Offset(1, 0).CopyFromRecordset rs  'copy the records
    rs.Close

    cn.Close

errhandler:
    Debug.Print (Err.Description)
    Debug.Print "Error# " & cn.Errors(0).NativeError & ": " & cn.Errors(0).Description
Stop

End Sub

【问题讨论】:

  • 尝试在您的 cn.Close 行下方添加 Exit Sub。并删除“停止”:那里不需要。

标签: oracle vba oracle10g


【解决方案1】:

在 cn.Close 行之后没有什么可以阻止执行继续进入您的错误处理程序,因此您的错误可能来自错误处理程序本身(因为处理程序试图引用一个不存在的 Err 对象)。

...     
rs.Close
cn.Close
Exit Sub   ' don't run into your error handler

errhandler:
  Debug.Print (Err.Description)
  Debug.Print "Error# " & cn.Errors(0).NativeError & _
              ": " & cn.Errors(0).Description 
  'Stop  'delete this - not needed here

End Sub 

【讨论】:

  • 完全正确; @Kev 的代码正在运行 errHandler,即使没有引发错误,因为它缺少 Exit Sub。 @Kev's,问题出在对在 cn.Close 之后运行的 cn.Errors 的引用(不确定您是否清楚,我只是改写@Tim 的答案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多