プロが教える店舗&オフィスのセキュリティ対策術

VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします!

CREATE PROC TEST
(
I_VAL AS INT,
O_VAL AS INT OUTPUT
)

~省略~

A 回答 (3件)

昔の話ですが、SQLserverへODBCでコネクションを張ってMS-ACCESSからDB操作したことがあります。

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

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

お礼日時:2005/09/29 11:40

コンピューター [技術者向け] > プログラミング > 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でもできるかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/09/29 17:40

#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
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/09/29 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A