1

呼び出しコードで ADODB コマンドとパラメーターを作成して、それらを汎用 SQL 関数に渡そうとしていますが、リストからパラメーターを取得するときにエラーが発生します。

    Dim prm As ADODB.Parameter
    Dim cmd As ADODB.Command
    Dim ParameterList(0) As Variant

    Value = Cells(3,3).Value

    Set cmd = New ADODB.Command
    Set prm = cmd.CreateParameter("@Field", adVarChar, adParamInput, 50)
    cmd.Parameters.Append prm
    cmd.Parameters("@Field").Value = Value    

    ParameterList(0) = prm

    Call SQLFunc(Data, SQLStr, adCmdStoredProc, cmd, ParameterList)
    .
    .

sub SQLFunc(ByRef Data as Variant, SQLStr as String, CommandType As ADODB.CommandTypeEnum, ByRef cmd As ADODB.Command, ParamList As Variant)

    .
    .
    .
    If cmd.CommandType <> adCmdStoredProc Then
        cmd.Execute
    Else

        'Append the parameters
        For i = LBound(ParamList, 1) To UBound(ParamList, 1)
            Dim TempParam As ADODB.Parameter
            Set TempParam = ParamList(i)
            cmd.Parameters.Append TempParam 'Error here
        Next

        Set Rst = cmd.Execute

どうすればこれを達成できるか教えてください。

4

1 に答える 1

3

ParameterList(0) = prm

ParameterList(0)Empty、これを解決します。

set ParameterList(0) = prm

これも強く型付けするので、バリアントを使用する代わりにDim ParameterList(0) As ADODB.Parameter

表示されるエラーは、 を呼び出す前にコマンドにパラメーターを追加しているために発生し、SQLFunc不正に再度追加しようとしています。コマンドにバインドする場合、パラメータ名は一意である必要があります。

バインディングを削除して使用できます。

Set prm = cmd.CreateParameter("@Field", adVarChar, adParamInput, 50)
prm.Value = Value

その後、 からprm独立したままになりcmdます。

于 2012-11-30T15:40:41.057 に答える