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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Accessからoracleのストアドプロシージャを呼び出したい。
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
無効なSQL文の具体例を教えてく...
-
PCC-S-02201エラーの対処を教え...
-
PL/SQLでPLS-00201のエラー
-
はじめまして!
-
「ORA-00907: 右カッコがありま...
-
ORA-01843: 指定した月が無効で...
-
グループ関数のエラーについて
-
ORA-12571パケット書き込みエラ...
-
ORA-06502のエラー
-
ストアドファンクションの実行
-
PL/SQLのコンパイルエラーにつ...
-
【Oracle】リモートでのimpコマ...
-
エラーコードについて
-
PL/SQLによるCREATE TABLE後のI...
-
DBエラー 右カッコがありません
-
PL/SQL PLS-00103エラーについて
-
レコードセットの開放のタイミ...
-
NVL関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQLのコンパイルエラーにつ...
-
ORA-01843: 指定した月が無効で...
-
「ORA-00907: 右カッコがありま...
-
PL/SQL PLS-00103エラーについて
-
PCC-S-02201エラーの対処を教え...
-
はじめまして!
-
データベースのカラムの型がCHA...
-
SQLLOADER
-
ストアドファンクションの実行
-
無効なSQL文の具体例を教えてく...
-
sqlのエラーハンドリングについ...
-
シェルスクリプトでオラクルの...
-
ORA-06502のエラー
-
DATABSE LINKについて
-
PL/SQLでPLS-00201のエラー
-
HAVING句でのBETWEEN演算子
-
ORA-14459: GLOBALキーワードが...
-
ACCESSでパススルークエリにパ...
おすすめ情報