[[20180326183951]] 『ADOでExecuteした際Stateが0になっている』(モゲラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


MS提供のプロバイダ「MSDAORA」だと、WITH文が使えないらしいですよ。「OraOLEDB.Oracle」を使ってみてください。
(???) 2018/03/27(火) 09:07

ありがとうございます

OraOLEDB.Oracleを使用した結果取得できることを確認できました。
しかしMicrosoft ODBC for Oracleで正規化した後Inner Joinするほうが圧倒的に速かったのでWITHを使用するのは断念しようと思います
(モゲラ) 2018/03/27(火) 12:41


あのあとプロバイダ(ドライバ?)にOracle in OraClient11g_home1を指定したらWITH文が使えるようになりました。
環境に依存するのが難点ですがOLEやoo4oで取得した際200s以上かかっていたものが40s以内で取得できる為こちらに移行しようと思います。(Microsoft ODBC for Oracleで正規化した後Inner Joinするほうは60s近くかかってました)

ありがとうございました。
(モゲラ) 2018/03/27(火) 18:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.