3

ODBCを使用してデータを2回取得するためにoracleを呼び出すVBAコードがあります。最初のデータ取得は問題ありません。しかし、2回目は、

**RunTime Error '-2147467259 (80004005)'; Unspecified error**

私のコードは次のとおりです。

注: Teradata の接続には同じコードが機能しますが、Oracle を使用すると失敗しました

'First Data retrieval
Query1 = "Select TableName from all_tables"
CmdSQLData.CommandText = Query1
CmdSQLData.CommandType = adcmdText 
CmdSQLData.Timeout=0
set rs = CmdSQLData.Execute()
'Then code to store data ...
'This part gives proper result ...
rs.close()

'Second Data retrieval
Query2 = "Select * from db.Event"
CmdSQLData.CommandText = Query2
CmdSQLData.CommandType = adcmdText 
CmdSQLData.Timeout=0
set rs = CmdSQLData.Execute() 'This line Gives Error - RunTime Error '-2147467259 (80004005)'; Unspecified error

また、cmdSQLData1として新しいコマンドオブジェクトを作成しようとしましたが、それでも同じエラーが発生しました

2 番目のクエリでエラーが発生する理由を教えてください。Oracleディレクトリでテストしたため、クエリに問題はありません。私にお知らせください

4

2 に答える 2

1

これはどこにも文書化されていませんがCommand、別の comamndText でオブジェクトを再利用することは、実際には悪い習慣です。使用している接続の種類はわかりませんが、たとえば ODBC の場合、これは内部的に偽の無効な SQL を Oracle に送信して、何らかのクリーンアップを強制します。代わりに、Command使用後にオブジェクトを破棄して、新しいオブジェクトを作成してください。

同じクエリを異なるパラメーター値で再実行する場合Commandは、オブジェクトを再利用することをお勧めしますが、ここではそうではありません。

于 2012-07-25T18:51:54.300 に答える
0

これらのタイプのクエリでは、コマンド テキストを使用する必要はまったくありません:-

` Dim con As New ADODB.Connection Dim rs As New ADODB.Recordset

con.Open "DSN=Oracle", "User", "Password"
rs.Open "select * from table_a", con

' Read all results

rs.Close

rs.Open "select * from table_b", con
' Read all results

rs.Close

con.Close

バインドされたパラメーターを使用してストア プロシージャまたはクエリを使用する予定がある場合にのみ、"Command" を使用する必要があります。

于 2012-07-26T07:50:51.337 に答える