【问题标题】:VBA: creating multiple parameters inside with/ end with statementVBA:在with / end with语句中创建多个参数
【发布时间】:2017-10-27 15:15:03
【问题描述】:

我有没有错误的代码。我的问题更多是想学习可以包含多个参数的 With/End With 语句的语法。现在,一个新的 ADODB.Command 已设置并在带有 ActiveConnection 的 With/End 内,包括 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

【问题讨论】:

    标签: vba ms-access-2013 with-statement


    【解决方案1】:

    我会想到

    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
    

    【讨论】:

    • 在您的示例中,我认为您将值混合在哪里,这让我理解起来有点混乱。你能至少告诉我如何正确地做一个参数吗?在我的代码中,每个变量/参数有 3 行。 Set = CreateParameter,追加变量,然后给变量赋值。
    • 错字。第一个.Parameters.Append 创建并附加一个名为@ArrangementID 的参数,并为其赋予一个Forms("MTDDataCheck").ArrangementID.Value 的值。它可以在 1 行上完成,无需参数变量。
    • 谢谢 Alex K。您是否介意检查我的代码的最新版本:“得到响应后的代码:”并告诉我它是否正确?再次感谢您。
    • = .CreateParameter("@Comment",中删除=
    猜你喜欢
    • 2012-02-28
    • 2018-12-06
    • 2012-05-01
    • 2020-02-29
    • 2015-01-16
    • 2010-10-27
    • 2018-04-19
    • 2017-09-23
    相关资源
    最近更新 更多