似乎是一個常見問題,但我無法獲得任何示例來處理我的代碼。使用Excel VBA將參數傳遞給存儲過程的問題
對不起,如果這是微不足道的,因爲我是DBA而不是開發人員。
我有一個存儲過程,需要兩個參數LaborRate
和EndDate
。 LaborRate
是一個十進制數據類型,將從工作表BOMSum
和單元格G1中獲取它的變量。 EndDate
是日期數據類型,將從工作表BOMSum
和單元格G2中獲取其變量。即使瀏覽了本網站上的教程和其他建議,我的所有嘗試都失敗了。
這是我非常簡單的代碼我開始了實際運行正確的,但不指定任何PARAMS運行:
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID=<DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "CostingInfo"
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
這是我現在有。我試圖從G1和G2傳遞兩個參數LaborRate
和EndDate
。
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID=<DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = CostingInfo
prm1 = cmd.CreateParameter("@LaborRate", adDecimal, adParamInput)
prm1.Precision = 28
prm1.NumericScale = 4
cmd.Parameters.Append prm1
prm1.Value = ActiveSheet.Range("G1").Text
prm2 = cmd.CreateParameter("@endDate", adDate, adParamInput)
prm2.Value = ActiveSheet.Range("G2").Text
cmd.Parameters.Append prm2
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
我已經收到有關精度和對象變量或塊變量未設置的錯誤。我很困惑,很難從VBA編程中移除。
編輯:經過Rude Dawg的一些建議,現在是我的代碼。現在我得到一個「語法錯誤或訪問衝突」錯誤,這在調試點,遇到的問題的cmd.Execute部分:
Sub Execute_SP()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=<ServerName>;Initial Catalog=<DB>;User ID= <DB_User>;Password=<pwd>"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = CostingInfo
set prm1 = cmd.CreateParameter("@LaborRate", adDecimal, adParamInput)
prm1.Precision = 28
prm1.NumericScale = 4
prm1.Value = Sheets("BOMSum").Range("G1").VALUE
cmd.Parameters.Append prm1
set prm2 = cmd.CreateParameter("@endDate", adDate, adParamInput)
prm2.Value = Sheets("BOMSum").Range("G2").VALUE
cmd.Parameters.Append prm2
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
ActiveWorkbook.RefreshAll
End Sub
我有一個類似的問題與我的存儲過程名稱的雙括號:'[[spDistPOCheckOrderConfirmation_byLine]]' – nutsch 2016-09-19 18:30:09