adodb.command.execute不使用参数



我正在尝试在VBA中创建一个函数来处理我的SQL过程调用。我遇到了一个问题,如果代码需要为无法正常工作的过程提供参数。代码在下面,如果我在没有可选参数的情况下调用该过程,则可以正常工作。在执行之前,我添加了一个断点;if语句触发罚款,而即时窗口告诉我, ?cmd.Parameters(0)?cmd.Parameters(1)具有值,但我会收到错误:myProcedure期望参数'@sd_name''未提供。该过程仅期望有2个参数,我什至不在乎该名称,它们只能按位置通过。

Function RunSQL(comtext As String, Optional Params As String = "No") As ADODB.Recordset
Dim cmd As New ADODB.Command
Dim recset As New ADODB.Recordset
Dim prm As ADODB.Parameter
TryConnect
cmd.commandtext = comtext
cmd.CommandType = adCmdText
cmd.ActiveConnection = GlobalCon
cmd.CommandTimeout = 0
If Params <> "No" Then
    Set prm = cmd.CreateParameter("@sd_name", adVarChar, adParamInput, 100)
    cmd.Parameters.Append prm
    cmd.Parameters("@sd_name").Value = Params
    Set prm = cmd.CreateParameter("@year_wk_num", adInteger, adParamInput, 100)
    cmd.Parameters.Append prm
    cmd.Parameters("@year_wk_num").Value = ThisWorkbook.Sheets("Control Sheet").Range("year_wk").Value
End If
--------------!Error Here----------------
Set recset = cmd.Execute
Set RunSQL = recset
Set cmd = Nothing
End Function

得到它,简单错误,似乎您无法以这种方式添加参数到ADODB.Command.CommandType adCmdText,而是必须是adCmdStoredProc。我想如果您想使用该类型,因为MSDN表示可以用作存储过程的文本定义,我可能可以将它们添加为commandtext字符串的一部分。但是,在这种情况下,我刚刚完成了以下操作,它工作正常(当不需要参数时仍需要adCmdText并调用VBA定义的查询字符串而不是过程):

If Params <> "No" Then
   cmd.CommandType = adCmdStoredProc 'added this line

相关内容

最新更新