2017-05-26 18 views
0

我有无错误地工作的代码。我的问题更多的是想学习可以包含多个参数的With/End With语句的语法。现在,一个新的ADODB.Command被设置并且在With/End中包含了ActiveConnection,commandType和CommandText。然后在With With参数之外创建,附加和分配。VBA:使用/ end语句创建多个参数

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

这里是我的代码:

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 

回答

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 
+0

在你的例子中,你正在混合哪些值,我想,这使得我有点困惑,理解。你是否至少告诉我如何正确地做一个参数?在我的代码中,每个变量/参数有3行。 Set = CreateParameter,追加变量,然后赋值给变量。 –

+0

Typo。第一个'.Parameters.Append'创建并附加一个名为'@ ArrangementID'的参数,并为其提供任何Forms(“MTDDataCheck”)ArrangementID.Value'的值。它可以在1行上完成,而不需要参数变量。 –

+0

谢谢Alex K.你会介意检查我的代码的最新版本:“代码得到回应后:”并让我知道它看起来是否正确?再次感谢你。 –