- ベストアンサー
ExcelVBAからOracleストアド実行エラー
- ExcelVBAからOracleに接続し、ストアドを実行して複数行のデータを取得後、エクセルの各セルに取得データを設定するマクロを作成しています。しかし、コマンドのExecuteを行った後にレコードセットが取得できないエラーが発生しています。
- ストアド自体はOracle側でエラーなく動作しており、カーソルで取得したデータをエクセル側に渡すためにそれ用のOutputの変数が必要なのか疑問に思っています。
- どのようにすれば正常にレコードセットを取得できるのか、アドバイスをいただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ん? > CREATE OR REPLACE PROCEDURE A.P930 > ( > varCD IN VARCHAR2, > varDate IN VARCHAR2 > ) は procedure (function じゃない)だし、out の引数もないから、 > Set myRs = .Execute ではなにもかえってこないんではないですか?? function の戻り値を ADO で得るためには、なんかくふうが要るようだ。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/as_s04.htm out で戻すなら、 http://www.progress-japan.co.jp/support/SupportLink/faq/technical/ProgrammingTips/programming/ ADODB.Command.Execute の戻り値は Command が SQL であるときのレコードセットじゃないかな?? ADOのしがらみがめんどうならば、ストアードで、ワークテーブルに書き込んで、 execute の戻り値をとらずに、ワークテーブルを直接見に行くかしたらいいんじゃないですかね?
その他の回答 (1)
- nao-y
- ベストアンサー率58% (111/190)
参考になるかどうかは分かりませんが… 参照URLはもうご覧になってますか? 参考URLはSQL Serverでのケースですが、 ストアド内で複数のSQL文を使っている場合に このエラーが出るようです。
お礼
まだきちんとテストできていませんが、自己解決です。 myRs.RecordCount ではなく、myCmd.RecoreCount のようです。
補足
nao-yさん、お返事ありがとうございます。 4時間くらいずっと検索し続けていましたので、こちらのページも拝見いたしました。 Oracleではまた違うような感じで・・・ SQL文は1つですが、UNIONのSQL文にしています。 ある条件で抽出し、UNIONでそれぞれの列のSUMを最後に取っています。 OracleのSQL文も久しぶりなのですが、やっとストアドのコンパイルエラーがなくなったと思ったら VBA側からのエラーがどうにも解決できず(>_<) カーソル自体あまりわかっていないのでそちらも合っているのか・・・
お礼
ありがとうございます! エラーの原因はわかりました。 カウントの仕方が違っていたようです。 やはり、outの引数がない場合は何も返ってこないんですかね? ストアドプロシージャとファンクションの違い、検索してみますね。 ワークテーブル等使うと楽そうですよね・・・ ただ、お客様からの仕様がストアドを作ってそれを見に行け という感じなので、もうちょっとやってみます!