• ベストアンサー

VBでストアドの戻りパラメータを受け取る方法

VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします! CREATE PROC TEST ( I_VAL AS INT, O_VAL AS INT OUTPUT ) ~省略~

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

  • ベストアンサー
回答No.3

#2のxcrOSgS2wYさんが飛ばしているリンク先の、.NETサンプルを書いた者です。 .NETからVB6へのコンバートをやってみました。 (いつもと逆方向への変換なので、違和感がありました^^;;;) ストアドは、参考URLのまま利用しています。 Option Explicit Sub Main()   Const DEF_ストアド名 As String = "ストアド"      Dim l_adoCnn  As ADODB.Connection   Dim l_adoCmd  As ADODB.Command   Dim l_adoRec  As ADODB.Recordset      Set l_adoCnn = New ADODB.Connection   Set l_adoCmd = New ADODB.Command      'コネクション設定   l_adoCnn.CursorLocation = adUseClient  '← これ重要、結構忘れられる。   l_adoCnn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=master;uid=sa;pwd=sa"      With l_adoCmd     'コネクションをコマンドに設定     Set .ActiveConnection = l_adoCnn     'コマンド種別 = ストアド     .CommandType = adCmdStoredProc     'ストアド名を指定     .CommandText = DEF_ストアド名     'パラメータ追加:戻り値     .Parameters.Append パラメータ作成(l_adoCmd, "@戻り値", adInteger, 4, adParamReturnValue)     'パラメータ追加:引数(I/I/O/IO)     .Parameters.Append パラメータ作成(l_adoCmd, "@パラム1_VAR_I", adVarChar, 12, adParamInput, "abcde")     .Parameters.Append パラメータ作成(l_adoCmd, "@パラム2_INT_I", adInteger, 4, adParamInput, 2)     .Parameters.Append パラメータ作成(l_adoCmd, "@パラム3_VAR_O", adVarChar, 26, adParamOutput)     .Parameters.Append パラメータ作成(l_adoCmd, "@パラム4_INT_IO", adInteger, 4, adParamInputOutput, 3)   End With   'ストアド実行   Set l_adoRec = l_adoCmd.Execute      '実行結果を出力   Dim i As Integer   Dim l_str結果 As String      With l_adoCmd     For i = 0 To .Parameters.Count - 1       l_str結果 = l_str結果 & i & vbTab & .Parameters(i).Name & vbTab & .Parameters(i).Value & vbCrLf     Next   End With   Call MsgBox(l_str結果, vbInformation, "結果出力") End Sub 'パラメータ作成関数 Private Function パラメータ作成( _          ByRef p_adoコマンド As ADODB.Command _         , ByVal p_strパラメータ名 As String _         , ByVal p_dtpDBタイプ As ADODB.DataTypeEnum _         , ByVal p_intサイズ As Integer _         , ByVal p_pdrパラメータ種別 As ADODB.ParameterDirectionEnum _         , Optional ByVal p_obj初期値 _     ) As ADODB.Parameter        Dim l_adoPrm  As ADODB.Parameter   Set l_adoPrm = p_adoコマンド.CreateParameter(p_strパラメータ名, p_dtpDBタイプ, p_pdrパラメータ種別, p_intサイズ)   l_adoPrm.Value = IIf(IsMissing(p_obj初期値), vbNull, p_obj初期値)      Set パラメータ作成 = l_adoPrm End Function

mocomoco_0001
質問者

お礼

ばっちり出来ました! ありがとうございました!

その他の回答 (2)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

コンピューター [技術者向け] > プログラミング > Visual Basic No.1648176 質問:SQL ServerのストアドでOUTPUTパラメータを2つ http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648176 に、VB.NETでADO.NETを使ってストアドのOUTPUTパラメータを受け取る例があります。 おそらくADO.NETでできることは、面倒さえいとわなければADOでもできるかと思います。

mocomoco_0001
質問者

お礼

ご回答ありがとうございました!

  • malf
  • ベストアンサー率21% (6/28)
回答No.1

昔の話ですが、SQLserverへODBCでコネクションを張ってMS-ACCESSからDB操作したことがあります。そのときは不可能でした。 ODBCはSQLserverからのリターンコードを受け取ることが出来ない仕様だったと記憶しています。今回のお話ではADO経由ということなので推測の域を出ませんが、ADOもOLEコントロールの一部なのでODBC経由のOLEコントロールなのかなと考えます。となると冒頭同様、「リターンは受け取れない仕様」ではないでしょうか。自信ありません。いい加減でごめんなさい。

mocomoco_0001
質問者

お礼

アドバイスありがとうございます。 出来ないだろうという情報でもありがたいです。 でないとずっと調べつづけそうなので、、、 別の仕様も視野に入れてみます。

関連するQ&A