• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAからOracleストアド実行)

ExcelVBAからOracleストアド実行エラー

このQ&Aのポイント
  • ExcelVBAからOracleに接続し、ストアドを実行して複数行のデータを取得後、エクセルの各セルに取得データを設定するマクロを作成しています。しかし、コマンドのExecuteを行った後にレコードセットが取得できないエラーが発生しています。
  • ストアド自体はOracle側でエラーなく動作しており、カーソルで取得したデータをエクセル側に渡すためにそれ用のOutputの変数が必要なのか疑問に思っています。
  • どのようにすれば正常にレコードセットを取得できるのか、アドバイスをいただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 の戻り値をとらずに、ワークテーブルを直接見に行くかしたらいいんじゃないですかね?      

MAME2001
質問者

お礼

ありがとうございます! エラーの原因はわかりました。 カウントの仕方が違っていたようです。 やはり、outの引数がない場合は何も返ってこないんですかね? ストアドプロシージャとファンクションの違い、検索してみますね。 ワークテーブル等使うと楽そうですよね・・・ ただ、お客様からの仕様がストアドを作ってそれを見に行け という感じなので、もうちょっとやってみます!

その他の回答 (1)

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

参考になるかどうかは分かりませんが… 参照URLはもうご覧になってますか? 参考URLはSQL Serverでのケースですが、 ストアド内で複数のSQL文を使っている場合に このエラーが出るようです。

参考URL:
http://nary.cocolog-nifty.com/blog/2009/12/sql-server-exce.html
MAME2001
質問者

お礼

まだきちんとテストできていませんが、自己解決です。 myRs.RecordCount ではなく、myCmd.RecoreCount のようです。

MAME2001
質問者

補足

nao-yさん、お返事ありがとうございます。 4時間くらいずっと検索し続けていましたので、こちらのページも拝見いたしました。 Oracleではまた違うような感じで・・・ SQL文は1つですが、UNIONのSQL文にしています。 ある条件で抽出し、UNIONでそれぞれの列のSUMを最後に取っています。 OracleのSQL文も久しぶりなのですが、やっとストアドのコンパイルエラーがなくなったと思ったら VBA側からのエラーがどうにも解決できず(>_<) カーソル自体あまりわかっていないのでそちらも合っているのか・・・