%20%E5%9F%B7%E8%A1%8C%E5%85%B7%E6%9C%89%E5%A4%9A%E5%80%8B%E5%8F%83%E6%95%B8%E7%9A%84%20SQL%20%E9%A0%90%E5%AD%98%E7%A8%8B%E5%BA%8F.png)
感謝您的幫助,@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。例如,我需要一份 <= 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
來接受從查詢傳回的資料。