質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

Q&A

1回答

3336閲覧

VBscriptまたはVBAでストアドプロシージャから値を取得したい

kamiyui_bidan

総合スコア47

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

0グッド

0クリップ

投稿2019/09/03 01:54

編集2019/09/03 04:32

下記のようにすれば、Functionの戻り値を取得できますが、
配列とレコード件数を返すストアドプロシージャから
配列の値と、レコード件数を格納した変数の値を取得するには
どのように書けばいいでしょうか?

ご教授のほど、宜しくお願い致します。
DBはOracleです。

VBscript

1Dim Conn 'Connectionオブジェクト用 2Dim objRs 3 4Set Conn = Server.CreateObject("ADODB.Connection") 5Set objRs = Server.CreateObject("ADODB.Recordset") 6Conn.Open 接続情報 7 8strSql = "SELECT FUNC_CAL('2019/09/11') as Col1 From dual" 9objRs.open strSql, Conn, adOpenForwardOnly, adLockReadOnly 10val = objRs.Fields("Col1").value

【WHERE条件は1つ、取得列は1列、且つ2,3行だが、ストアドにしたい理由】
①クラシックASPとサードパーティ製ソフトの組み合せの画面だけ、エラーになってもエラーが表示されない(処理が終わらなければエラー)為、VBscript側では極力、分岐を少なくしたい
②①の事があるので、数年後の仕様変更は、極力ストアドだけの変更で済ませたい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

これを見る限りストアドではなくて通常のSQL文ですよね。

vba

1strSql = "SELECT FUNC_CAL('2019/09/11') as Col1 From dual"

実際のストアドは別ということでしょうか
仮に『レコード件数を格納した変数の値』というものが存在しているのであれば

sql

1declare @行数 int 2 3set @行数=10 4 5SELECT FUNC_CAL('2019/09/11') as Col1,@行数 as 行数じゃ From dual

のように変数をselectに含めればあとは通常の値として取り出せばいいと思います。

vba

1val = objRs.Fields("Col1").value 2msgbox(objRs.Fields("行数じゃ").value)

関係ありませんが読み取るだけならADODB.ConnectionのExecuteでも取得できます。

vba

1'objRs.open strSql, Conn, adOpenForwardOnly, adLockReadOnly 2set objRs=Conn.execute(strSql)

投稿2019/09/03 02:36

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamiyui_bidan

2019/09/03 04:29

ご回答、ありがとうございます。 FUNC_CAL()とは別に、StoredA()というプロシージャ(PL/SQL)があります(といいますか、これから作ります)。 現在は ```SQL Select Col1 From テーブルA --結果は0件以上 WHERE ym='2019/11/11' ``` で取得し、RecordCountプロパティとMoveNextを使い、RecordCountの値によって処理を分岐させています。 Col1の結果が2,3行の場合、VARRAYというのを使えばいいのかな、と考えています。 その場合、VARRAYの値はどのようにして取得するのでしょうか? ※ストアドを利用したい理由を追記しました。
sousuke

2019/09/03 05:19

すみませんSQLServerだと思ってました いずれにしてもvb側では列値として引き受けるしかないので val = objRs.Fields("VARRAY型の列名").value これでエラーが出るのかどうかを確認されてみては?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問