2013-07-25 27 views
5

これは本当に簡単ですが、実際の簡潔な答えはまだ見つかりませんでした。私は整数値を返す非常に単純なストアドプロシージャをSQL Serverに持っています。私がしたいのは、その戻り値をAccessで使用する変数に代入することだけです。VBA変数にストアドプロシージャの戻り値を割り当てます

ストアドプロシージャ:

ALTER PROCEDURE [dbo].[out_GetNextID] 
@NextSumID integer 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

-- Insert statements for procedure here 
SELECT @NextSumID = IDENT_CURRENT('Outage Summary')+IDENT_INCR('Outage Summary') 
RETURN @NextSumID 
END 

私は、ストアドプロシージャを実行するためにADODBを使用しています、と私はこれを尋ねるために持つためにダムを感じるが、私はcmd.Executeを実行した後にどのように私はAccessでの戻り値にアクセスします?おかげさまで、ごめんなさい。

答えて

4

出力パラメータを使用するか、またはReturnValue(後述)を設定する2つの方法があります。このSO linkから引用OUTPUTパラメータについて:

、本質的に、あなただけの、SqlParameterを作成して出力する方向 を設定し、SqlCommandオブジェクトのParametersコレクションに追加する必要があります。次に はストアドプロシージャを実行し、パラメータの値を取得します。

このページのコードを参照してください。

しかし、あなたはまた、あなたの変数宣言でOUTワード(またはOUTPUT)を含める必要があります。それはどのような値で、自動的に返却されますあなたがOUT(またはOUTPUT)として変数を宣言すると

@NextSumID integer OUT 

プロシージャが終了したら、RETURNを使用するだけです。

Return Data from a Stored Procedure :MSDN

あなただけのシングル、整数、値を返すされているので、あなたは、代わりに、RETURN @NextSumIDを使用することができます。このアプローチはhere (MSDN)さらに議論されている

theParameter.Direction = ParameterDirection.ReturnValue 

:このアプローチのために、あなたはReturnValueとしてパラメータを指定する必要があります。

+0

ありがとうございました。私は 'RETURN @ NextSumID'を削除し、' RETURN'を使用することに決めました。なぜなら、欠落していたキーパーツは 'NextID = cmd.Parameters(" @ NextSumID ")'で変数を代入するだけだったからです。なぜ私がそれを理解することがとても難しいのか分かりません。 – philthyfool

+0

私の答えにも情報を照合するのにはしばらく時間がかかりました;) –

+1

ストアドプロシージャの出力変数の基本的な使い方のどこかに、より良い文書/例があるはずです。レコードセットやその他のものを更新している状況を簡単に見つけることは簡単ですが、単純な使用状況はそれほどありません。これが私と同じような苦境で他の誰かを助けてくれることを願っています。 – philthyfool

1

値を返すストアドプロシージャを使用して戻り値を取得する方法は次のとおりです。 Microsoft ActiveX Data Objects 2.8 Libraryを参照する必要があります。

Sub CheckValue(ByVal NextSumID As Long) 

    'open connnection 
    Dim ACon As New Connection 
    ACon.Open ("Provider=SQLOLEDB;Data Source=<SqlServer>;" & _ 
     "Initial Catalog=<Table>;Integrated Security=SSPI") 

    'set command 
    Dim ACmd As New Command 
    Set ACmd.ActiveConnection = ACon 
    ACmd.CommandText = "out_GetNextID" 
    ACmd.CommandType = adCmdStoredProc 

    'Return value must be first parameter else you'll get error from too many parameters 
    'Procedure or function "Name" has too many arguments specified. 
    ACmd.Parameters.Append ACmd.CreateParameter("ReturnValue", adInteger, adParamReturnValue) 
    ACmd.Parameters.Append ACmd.CreateParameter("NextSumID", adVarChar, adParamInput, 10, NextSumID) 

    'execute query 
    Call ACmd.Execute 

    'get return value 
    Debug.Print "Return value: " & ACmd.Parameters("ReturnValue") 

    ACon.Close 

End Sub 
関連する問題