VBA: 在 with/end with 语句中创建多个参数

VBA: creating multiple parameters inside with/ end with statement

我的代码没有错误。我的问题更多是出于想学习可以包含多个参数的 With/End With 语句的语法。现在设置了一个新的 ADODB.Command 并在 With/End With ActiveConnection 中包含了 commandType 和 CommandText。然后在 With 5 之外创建、附加和分配参数。

我想知道这些参数是否也可以在 ADODB.Command 的 With/End With 中。

这是我的代码:

Set ADOQD = New ADODB.Command
    With ADOQD
        .ActiveConnection = ADOCon
        .CommandType = adCmdStoredProc
        .CommandText = "jsp_AddFeedback"
    End With

Set pArrangementID = CreateParameter("@ArrangementID", adVarChar, adParamInput, 15)
ADOQD.Parameters.Append pArrangementID
pArrangementID = Forms("MTDDataCheck").ArrangementID.Value

Set pEditor = ADOQD.CreateParameter("@Editor", adVarWChar, adParamInput, 20)
ADOQD.Parameters.Append pEditor
pEditor = gstrLastEditor

Set pProofer = ADOQD.CreateParameter("@Proofer", adVarWChar, adParamInput, 20)
ADOQD.Parameters.Append pProofer
pProofer = gstrLastProofer

Set pControlName = ADOQD.CreateParameter("@ControlName", adVarWChar, adParamInput, 255)
ADOQD.Parameters.Append pControlName
pControlName = lbl.name

Set pComment = ADOQD.CreateParameter("@Comment", adLongVarWChar, adParamInput, -1)
ADOQD.Parameters.Append pComment
pComment = reply

这是我的尝试:

    Set ADOQD = New ADODB.Command
With ADOQD
    .ActiveConnection = ADOCon
    .CommandType = adCmdStoredProc
    .CommandText = "jsp_DeleteFeedback"
    Set pArrangementID = .CreateParameter("@ArrangementID", adVarChar, adParamInput, 15)
    .Parameters.Append pArrangementID
    pArrangementID = Forms("MTDDataCheck").ArrangementID.Value
    Set pControlName = .CreateParameter("@ControlName", adVarWChar, adParamInput, 255)
    .Parameters.Append pControlName
    pControlName = lbl.name
    .Execute
End With

这是正确的做法吗?非常感谢任何例子。

谢谢。

收到响应后的代码:

Set ADOQD = New ADODB.Command
With ADOQD
    Set .ActiveConnection = ADOCon
    .CommandType = adCmdStoredProc
    .CommandText = "jsp_AddFeedback"
    .Parameters.Append .CreateParameter("@ArrangementID", adVarChar, adParamInput, 15, Forms("MTDDataCheck").ArrangementID.Value)
    .Parameters.Append .CreateParameter("@Editor", adVarWChar, adParamInput, 20, gstrLastEditor)
    .Parameters.Append .CreateParameter("@Proofer", adVarWChar, adParamInput, 20, gstrLastProofer)
    .Parameters.Append .CreateParameter("@ControlName", adVarWChar, adParamInput, 255, lbl.name)
    .Parameters.Append .CreateParameter("@Comment", adLongVarWChar, adParamInput, -1, reply)
    .Execute
End With

我还以为

ADOQD.Parameters.Append pArrangementID
pArrangementID = Forms("MTDDataCheck").ArrangementID.Value

实际上会失败或用字符串替换集合中的参数...

没关系,因为您不需要显式创建参数,随其他所有内容一起提供值:

Set ADOQD = New ADODB.Command
With ADOQD
    SET .ActiveConnection = ADOCon
    .CommandType = adCmdStoredProc
    .CommandText = "jsp_AddFeedback"

    .Parameters.Append .CreateParameter("@ArrangementID", adVarChar, adParamInput, 15, Forms("MTDDataCheck").ArrangementID.Value)
    .Parameters.Append .CreateParameter("@Editor", adVarWChar, adParamInput, 20, gstrLastEditor)
    ...
End With