簡體   English   中英

如何從VBA使用datetime參數調用SQL Server存儲過程?

[英]How to call SQL Server stored procedure with datetime parameter from VBA?

我有一個SQL Server存儲過程,該存儲過程接受datetime數據類型的兩個輸入參數。 我想從Excel VBA調用它。

VBA沒有日期時間類型,因此我嘗試了以下操作:

Dim spCommand As ADODB.Command
Set spCommand = New ADODB.Command
spCommand.ActiveConnection = cnn
spCommand.CommandText = "myProcedureName"
spCommand.CommandType = adCmdStoredProc
spCommand.Parameters.Refresh
spCommand.Parameters(1).Value = "6/1/2016"      'DateValue("2016-06-01") + TimeValue("00:00:00")
spCommand.Parameters(2).Value = "6/1/2016"     'DateValue("2016-06-01") + TimeValue("23:59:59")
spCommand.Execute

但是我得到這個錯誤:

在此處輸入圖片說明

我該如何解決?

編輯1
遵循@Joe的建議之后,我打開了調試器並得到了它,但是錯誤仍然存​​在:

在此處輸入圖片說明

使用DateSerial函數:

spCommand.Parameters(1).Value = DateSerial(2016,1,6)

並且,如果需要,還可以選擇使用TimeSerial函數:

spCommand.Parameters(2).Value = DateSerial(2016,1,6) + TimeSerial(23,59,59)

VBA沒有日期時間類型

是的,它確實:

Dim dtDateTime as Date
dtDateTime = DateSerial(2016,1,6) + TimeSerial(23,59,59)

更新

編輯之后,我看到Parameters集合包含三個項目。 第一個是返回參數,第二個和第三個是adDBTimeStamp類型的輸入參數。

同樣, Command.NamedParameters屬性為false,因此您可能無法使用命名參數,因為您似乎試圖在編輯隨附的屏幕快照中使用命名參數。

更新2

VBA集合的索引從1開始,而不是0,因此您應將參數指定為:

 spCommand.Parameters(2).Value = ... spCommand.Parameters(3).Value = ... 

我認為以上是錯誤的。 從1開始對標准VB / VBA集合進行索引。我認為,基於我的觀點的誤解是基於1的索引“更直觀”。

在開發ADO時,我相信Microsoft意識到基於1的集合是一個錯誤,因此決定使ADO集合基於0。 這使它們與標准集合不一致,但對javascript開發人員來說“更直觀”。 真是一團糟。

如果我是對的(並且自從使用ADO已經很長時間了,並且還沒有測試過),那么您需要:

spCommand.Parameters(1).Value = ...
spCommand.Parameters(2).Value = ...

這樣可以消除3265錯誤,但不能解決您原來的問題。 您的調試跟蹤顯示似乎已將參數設置為預期值。 我只能建議您嘗試生成MCVE ,包括所討論的存儲過程的簡化版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM