Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将ADODB参数数组传递给函数?_Vba - Fatal编程技术网

Vba 将ADODB参数数组传递给函数?

Vba 将ADODB参数数组传递给函数?,vba,Vba,我试图在calligng代码中创建ADODBcommand和参数,以便将它们传递到通用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.CreatePar

我试图在calligng代码中创建ADODBcommand和参数,以便将它们传递到通用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
Dim prm作为ADODB.参数
Dim cmd作为ADODB.Command
变光参数列表(0)作为变量
值=单元格(3,3)。值
Set cmd=New ADODB.Command
设置prm=cmd.CreateParameter(“@Field”,adVarChar,adParamInput,50)
cmd.Parameters.Append prm
cmd.Parameters(“@Field”).Value=Value
参数列表(0)=prm
调用SQLFunc(数据、SQLStr、adCmdStoredProc、cmd、参数列表)
.
.
子SQLFunc(ByRef数据作为变量,SQLStr作为字符串,CommandType作为ADODB.CommandTypeEnum,ByRef cmd作为ADODB.Command,ParamList作为变量)
.
.
.
如果cmd.CommandType adCmdStoredProc,则
cmd.Execute
其他的
'附加参数
对于i=LBound(ParamList,1)到UBound(ParamList,1)
Dim TempParam作为ADODB.参数
设置TempParam=ParamList(i)
cmd.Parameters.Append TempParam'错误
下一个
设置Rst=cmd.Execute
有谁能告诉我如何做到这一点吗?

之后

ParameterList(0) = prm
参数列表(0)
,以解决此问题

set ParameterList(0) = prm
我也会强烈地键入它,而不是使用变量
Dim ParameterList(0)作为ADODB.Parameter

出现您看到的错误是因为您在调用
SQLFunc
之前已将参数附加到命令中,在该命令中您非法再次尝试这样做。绑定到命令时,参数名称必须唯一

您可以删除绑定并使用

Set prm = cmd.CreateParameter("@Field", adVarChar, adParamInput, 50)
prm.Value = Value
然后,
prm
保持独立于
cmd