谢谢你的帮助,@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
参数来接受查询返回的数据。