透過 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。例如,我需要一份 <= 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來接受從查詢傳回的資料。

相關內容