2016-09-07 17 views
3

私はAccessからストアドプロシージャを実行すると少し問題があります。私はそれでOKですが、そこにある正しい順序でパラメータを指定してAccess VBAでストアドプロシージャを呼び出すのはなぜですか?

Set cmd = init_adodbcommand("sp_002_test_tabellenparameter") 

cmd.Parameters("@str_test") = "Test"  
cmd.Parameters("@str_test2") = "Test" 

cmd.Execute 

:私は今、私はこのようなストアドプロシージャを呼び出していますのためにMS SQL Server 2008の

と一緒に、「Microsoft ActiveXデータ2.8オブジェクトライブラリ」を使用しています問題私はあまりにも正常に動作し、このコードを、使用していますので、私は、ストアドプロシージャではnvarchar(max)の変数を使用していた場合:

Set cmd = init_adodbcommand("sp_002_test_tabellenparameter") 

cmd.Parameters.Append cmd.CreateParameter("@str_test", adLongVarWChar, adParamInput, -1, "Test") 
cmd.Parameters.Append cmd.CreateParameter("@str_test2", adLongVarWChar, adParamInput, -1, "Test") 

cmd.Execute 

それはあまりにも動作しますが、パラメータが正しい順序になっている場合にのみ、のようなそれらはサーバー上のストアドプロシージャに追加されます。 この現象は、最初に述べた最初のオプションでは発生しません。このオプションを使用すると、パラメータを直接指定できます。

サーバー上のSPのコードは、そのように開始します。

ALTER PROCEDURE [dbo].[sp_002_test_tabellenparameter] 
    -- Add the parameters for the stored procedure here 
    @str_test nvarchar(max) = NULL, 
    @str_test2 nvarchar(max) = NULL 

私は30個の以上のパラメータを持つストアドプロシージャの多くを持っており、これらのパラメータのいくつかは、時には必要とされていないと私はしないでください正しい順序について「くそ」をしないでください:D

私はAccessで使用しているパラメータの名前は関係ありません。

私の責任はどこですか?

ありがとうございました!初期化する:)

アタッチメントコード:

Dim cmd_temp As ADODB.Command 
Dim adoconn_connection_tmp As ADODB.Connection 

Set adoconn_connection_tmp = New ADODB.Connection 

    Set adoconn_connection_tmp = ADOConnObj 

    Set cmd_temp = New ADODB.Command 

    cmd_temp.CommandType = adCmdStoredProc 
    cmd_temp.CommandText = str_prozedurname 
    cmd_temp.ActiveConnection = adoconn_connection_tmp 

    Set init_adodbcommand = cmd_temp 

End Function 
+3

'cmd_temp.NamedParameters = True'という行をコマンドオブジェクトイニシャライザに追加すると、それは役に立ちますか? – Arvo

+0

あなたはそれをしました。ありがとうございます:D – John

+0

私が知っている限り、ADOパラメータは、注文に従います。 @Arvoがあなたが明示的に名前のセットを整列させることを示唆していない限り、与えた名前は単にローカルコレクション名であり、保存されたproc named paramsに対応する必要はありません。また、(デフォルト値を設定しているので)保存されたproc [paramsは両方ともオプションです](https://technet.microsoft.com/en-us/library/ms189330(v = sql.105).aspx)に注意してください。したがって、1つ、2つ、またはすべてのパラメータを追加することができ、プロシージャを実行する必要があります。 – Parfait

答えて

2

あなたは、コマンドオブジェクト初期化子にライン

cmd_temp.NamedParameters = True 

を追加する必要があります。

関連する問題