- ベストアンサー
VBでストアドの戻りパラメータを受け取る方法
VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします! CREATE PROC TEST ( I_VAL AS INT, O_VAL AS INT OUTPUT ) ~省略~
- みんなの回答 (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
その他の回答 (2)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
コンピューター [技術者向け] > プログラミング > 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でもできるかと思います。
お礼
ご回答ありがとうございました!
- malf
- ベストアンサー率21% (6/28)
昔の話ですが、SQLserverへODBCでコネクションを張ってMS-ACCESSからDB操作したことがあります。そのときは不可能でした。 ODBCはSQLserverからのリターンコードを受け取ることが出来ない仕様だったと記憶しています。今回のお話ではADO経由ということなので推測の域を出ませんが、ADOもOLEコントロールの一部なのでODBC経由のOLEコントロールなのかなと考えます。となると冒頭同様、「リターンは受け取れない仕様」ではないでしょうか。自信ありません。いい加減でごめんなさい。
お礼
アドバイスありがとうございます。 出来ないだろうという情報でもありがたいです。 でないとずっと調べつづけそうなので、、、 別の仕様も視野に入れてみます。
お礼
ばっちり出来ました! ありがとうございました!