6

これは本当に簡単なはずですが、私はまだ本当に簡潔な答えを見つけていません. 整数値を返す非常に単純なストアド プロシージャが sql サーバーにあります。私がやりたいことは、その戻り値を Access で使用する変数に取得することだけです。

ストアド プロシージャ:

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

2 に答える 2

5

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

基本的には、SqlParameter を作成し、Direction を Output に設定して、それを SqlCommand の Parameters コレクションに追加するだけです。次に、ストアド プロシージャを実行し、パラメーターの値を取得します。

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

ただし、変数宣言に OUT (または OUTPUT) という単語も含める必要があります。

@NextSumID integer OUT

変数を OUT (または OUTPUT) として宣言すると、プロシージャが終了したときに値が何であれ、自動的に返されるため、RETURN を使用するだけで済みます。

ストアド プロシージャからデータを返す:MSDN

RETURN @NextSumID代わりに、単一の整数値を返すだけなので、を使用できます。このアプローチでは、パラメーターを次のように指定する必要がありますReturnValue

theParameter.Direction = ParameterDirection.ReturnValue

このアプローチについては、こちら (MSDN) で詳しく説明しています。

于 2013-07-25T21:26:09.640 に答える
3

値を返すストアド プロシージャを使用して戻り値を取得する方法を次に示します。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
于 2015-07-31T13:56:14.630 に答える