通过 Excel(VBA)使用多个参数执行 SQL 存储过程

通过 Excel(VBA)使用多个参数执行 SQL 存储过程

谢谢你的帮助,@FreeMan。

然而,我对此仍感到迷茫。

让我从头开始。

这是我的查询总结(我希望它清楚)

SELECT DISTINCT Q1,Q2,Q3

from(SELECT A,B,C) Q1

full outer join

(SELECT A,B,C

from tblA as a

join tblB as b

on a.aID = b.bID

join tblC as c

on b.bID = c.cID

where (a,b, cdate <= ?

group by c) Q2

ON Q1.A = Q2.B

WHERE Convert(DATETIME, Q1.[B], 103) <= ?

order by Q1.[A]

When I try to refresh my table, I get the following error message

"[Microsoft][ODBC SQL Server Driver]Invalid Parameter number" and then

"[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index"

我需要一种方法,使我能够使用指定单元格(即单元格 C3)中的参数运行此查询。

我希望这能让事情更清楚一点,我不熟悉 VBA,所以上面建议的所有命令对我来说都是令人困惑的。

原始问题

*[我是 VBA 新手,因此我很难让我的查询使用多个参数运行。我正在使用这个宏,但当我运行它时,它告诉我没有提供第二个参数。

Sub RefreshQuery()

With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
    .CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh

End Sub

我的问题是:- 1. 如何将变量设置为日期格式?我需要一份报告来显示所有交易 <= 某个日期(变量参数) 2. 电子表格中变量的位置(单元格 b2)对于两个参数保持不变。例如,我需要一份所有交易 <= 2014 年 12 月 31 日的列表,以及截至同一日期 2014 年 12 月 31 日的坏账拨备值/总额。]*

答案1

以下是在代码中创建和设置参数的快速示例:

Sub CreateParam()

     Dim oQuery As QueryTable
     Dim oParam As Parameter

     Set oQuery = Sheet3.QueryTables(1)

     oQuery.CommandText = Replace(oQuery.CommandText, "='Berlin'", "=?")

     Set oParam = oQuery.Parameters.Add("CityParam")

     oParam.SetParam xlRange, Sheet3.Range("J1")
     oParam.RefreshOnChange = True

     oQuery.Refresh

End Sub

代码快速抄袭自dicks-clicks.com

基本上,您需要为存储过程中的每个参数执行该.Parameter.Add()行,然后就可以开始了。请注意,您不需要编写整个代码Sub()来执行此操作,只需将该Set oParam = oQuery.Parameters.Add()行包含在现有代码中即可。

您可能需要深入了解一下这些选项,因为您可以指定要发送的数据类型,还可以设置一个OUT参数来接受查询返回的数据。

相关内容