2011-07-25 20 views
0

ExcelスプレッドシートのVBAコードからOracle DBに接続する際にエラーが発生しました。私が実行するクエリは正常に動作しますが、接続を閉じるときに次のエラーが発生します。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 
+0

cn.Close行の下にExit Subを追加してください。そして「停止」を取り除く:それはそこに必要ではない。 –

答えて

1

ありcn.Closeライン後にエラーハンドラに継続的に実行を停止するには何もいないので、ハンドラは非existantの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 
+0

正確。 @ Kevのコードはエラーが発生していなくても 'Exit Sub'がないのでerrHandlerを実行しています。 @ Kevの問題は、特にcn.Closeの後に実行されているcn.Errorsへの参照にあります(あなたにはわかりませんが、@ Timの答えを書き換えています)。 –

+0

私はこれに答えなかったことをただ知った。これは正しかった。 – Kev

関連する問題