
Excel:2010
Oracle:10g
接続:ADODB
Oracleで質問すべきか、VB側にすべきか迷いましたが、こちらに質問させていただきます。
ExcelVBAからOracleに接続し、ストアドを実行して複数行のデータを取得後
エクセルの各セルに取得データを設定するマクロを作成しております。
コマンドのExecuteを行った後、レコードセットが取得できていないようで
「オブジェクトが閉じている場合は、操作は許可されません」
となってしまいます。
ストアド自身は、Oracle側でエラーなく動いています。
カーソルで取得したデータをエクセル側に渡すには、それ用のOutputの変数(配列?)が必要なのでしょうか?
よろしくお願いいたします。
ストアドプロシージャ(一部SELECT文は長いため、省いています)
--------------------
CREATE OR REPLACE PROCEDURE A.P930
(
varCD IN VARCHAR2,
varDate IN VARCHAR2
)
AS
CURSOR C_SIM IS
SELECT
CD,
NAME
FROM T
WHERE
CD = varCD AND
CNTRCT_DATE = varDate;
SIM_REC C_SIM%ROWTYPE;
BEGIN
OPEN C_SIM;
LOOP
FETCH C_SIM INTO SIM_REC;
EXIT WHEN C_SIM%NOTFOUND;
END LOOP;
CLOSE C_SIM;
END;
/
VBA側
Connection接続はOK
--------------------
Sub LIST()
変数宣言等省いています
Set myCmd = New ADODB.Command
With myCmd
.ActiveConnection = DBADOCon
.CommandType = adCmdStoredProc
.CommandText = "P930"
.Parameters.Append .CreateParameter("varCD", adVarChar, adParamInput, 3, strLineCd)
.Parameters.Append .CreateParameter("varDate", adVarChar, adParamInput, 6, strMonth)
Set myRs = New ADODB.Recordset
Set myRs = .Execute
End With
If myRs.RecordCount = 0 Then ←ここでエラーになります
'エラーメッセージ表示
Exit Sub
End I
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 …
out で戻すなら、
http://www.progress-japan.co.jp/support/SupportL …
ADODB.Command.Execute の戻り値は Command が SQL であるときのレコードセットじゃないかな??
ADOのしがらみがめんどうならば、ストアードで、ワークテーブルに書き込んで、
execute の戻り値をとらずに、ワークテーブルを直接見に行くかしたらいいんじゃないですかね?
ありがとうございます!
エラーの原因はわかりました。
カウントの仕方が違っていたようです。
やはり、outの引数がない場合は何も返ってこないんですかね?
ストアドプロシージャとファンクションの違い、検索してみますね。
ワークテーブル等使うと楽そうですよね・・・
ただ、お客様からの仕様がストアドを作ってそれを見に行け
という感じなので、もうちょっとやってみます!
No.1
- 回答日時:
参考になるかどうかは分かりませんが…
参照URLはもうご覧になってますか?
参考URLはSQL Serverでのケースですが、
ストアド内で複数のSQL文を使っている場合に
このエラーが出るようです。
参考URL:http://nary.cocolog-nifty.com/blog/2009/12/sql-s …
この回答への補足
nao-yさん、お返事ありがとうございます。
4時間くらいずっと検索し続けていましたので、こちらのページも拝見いたしました。
Oracleではまた違うような感じで・・・
SQL文は1つですが、UNIONのSQL文にしています。
ある条件で抽出し、UNIONでそれぞれの列のSUMを最後に取っています。
OracleのSQL文も久しぶりなのですが、やっとストアドのコンパイルエラーがなくなったと思ったら
VBA側からのエラーがどうにも解決できず(>_<)
カーソル自体あまりわかっていないのでそちらも合っているのか・・・
まだきちんとテストできていませんが、自己解決です。
myRs.RecordCount
ではなく、myCmd.RecoreCount
のようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PCC-S-02201エラーの対処を教え...
-
PL/SQL PLS-00103エラーについて
-
CASE文のエラーについて
-
はじめまして!
-
シェルスクリプトでオラクルの...
-
ExcelVBAからOracleストアド実行
-
DATABSE LINKについて
-
ORA-01843: 指定した月が無効で...
-
ORA-06502のエラー
-
ビューが作成できない
-
Oracle9 union使用時の結合制限...
-
「ORA-00907: 右カッコがありま...
-
ACCESSでパススルークエリにパ...
-
PL/SQLによるCREATE TABLE後のI...
-
PL/SQLでPLS-00201のエラー
-
外部ライブラリのロード中にエ...
-
pro*c で pl/sql に変数を渡す...
-
オラクル致命的なエラー(provi...
-
HAVING句でのBETWEEN演算子
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
はじめまして!
-
ORA-01843: 指定した月が無効で...
-
PL/SQL PLS-00103エラーについて
-
シェルスクリプトでオラクルの...
-
PL/SQLのコンパイルエラーにつ...
-
PCC-S-02201エラーの対処を教え...
-
「ORA-00907: 右カッコがありま...
-
ORA-14459: GLOBALキーワードが...
-
ORA-06502のエラー
-
PL/SQLでPLS-00201のエラー
-
DATABSE LINKについて
-
sqlのエラーハンドリングについ...
-
SQLLOADER
-
無効なSQL文の具体例を教えてく...
-
PL/SQLによるCREATE TABLE後のI...
-
ビューが作成できない
-
ストアドファンクションの実行
-
pro*c で pl/sql に変数を渡す...
おすすめ情報