[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ADOでExecuteした際Stateが0になっている』(モゲラ)
ADOを使用しOracle11にあるデータをExcelシートに反映しようとしています。
下記コードを実行した際Stateが0のレコードセットが取得されデータを繫栄することが出来ません。
SQLの部分を"SELECT * FROM dual"というようにWITH句を使用しなければこのようなことにはならないのですが、真にやりたいこととして780のカラムからなるテーブルに別のテーブルをInner Joinしてからテーブルを正規化したいため先にVIEWを作成しておきたいと思った次第です。
テーブル管理している立場ではないので一時表もこのようなかんじで取得したいと思っています。
ADOでWITH句って使えないものなんでしょうか?
よろしくお願いします。
Public Sub Sample01()
On Error GoTo Err_Handler 'エラー時の処理を有効にする
'ADOをセットする Dim Cn As Object: Set Cn = CreateObject("ADODB.Connection") Dim rs As Object: Set rs = CreateObject("ADODB.Recordset")
'データベースにログインする。 Cn.CursorLocation = 3 Cn.Open "Driver={Microsoft ODBC for Oracle};SERVER=hoge;UID=hoge;PWD=hoge;"
'SQL実行****ここでrs.State=0になっている**** Set rs = Cn.Execute("WITH VIEW01 AS (SELECT hoge,fuge FROM moge) SELECT T.hoge,T.fuge FROM VIEW01 T") 'レコードにSET
'テーブルに反映 With Sheet1.ListObjects(1).Query Set Recordset = rs .Refresh False End With
On Error Resume Next 'エラー時の処理を有効にする rs.Close: Set rs = Nothing Cn.Close: Set Cn = Nothing On Error GoTo 0
Exit Sub Err_Handler: Dim e As Variant: e = Array(Err.Number, Err.source, Err.Description)
On Error Resume Next 'エラー時の処理を有効にする rs.Close: Set rs = Nothing Cn.Close: Set Cn = Nothing On Error GoTo 0
Err.Raise e(0), e(1), e(2) End Sub
一応oo4oで同じSQLを取得することは出来ました。
しかしoo4oではテーブルに反映することは困難な気がして(GetXMLで取得した際そこだけで250秒かかってしまいました)早い方法を模索しています
< 使用 Excel:Excel2013、使用 OS:Windows7 >
OraOLEDB.Oracleを使用した結果取得できることを確認できました。
しかしMicrosoft ODBC for Oracleで正規化した後Inner Joinするほうが圧倒的に速かったのでWITHを使用するのは断念しようと思います
(モゲラ) 2018/03/27(火) 12:41
ありがとうございました。
(モゲラ) 2018/03/27(火) 18:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.