VBA 将日期参数传递给 SQL Server 存储过程
Posted
技术标签:
【中文标题】VBA 将日期参数传递给 SQL Server 存储过程【英文标题】:VBA passing date parameters to SQL Server stored procedure 【发布时间】:2017-02-19 01:39:49 【问题描述】:我遇到了从 EXCEL VBA 代码传递给 SQL Server 存储过程的日期参数的问题。
存储过程采用两个日期参数@FromDate
和@ToDate
。在 Excel 中,我想使用从单元格中获取的日期值执行此过程。
问题是,从单元格到过程的日期以"dd/mm/yyyy"
格式传递,而不管我在 excel 单元格中所做的任何格式更改。而 SQL 过程接受格式 "yyyy-mm-dd"
或 "yyyy-mon-dd"
或 "yyyy/mm/dd"
或 "dd-mon-yyyy"
。
程序抛出错误:
"从字符转换日期和/或时间时转换失败 字符串”用于从 excel 传递的日期(格式为“dd/mm/yyyy”
我使用的vba代码是(参考https://www.mssqltips.com/sqlservert...to-sql-server/)
Private Sub CommandButton1_Click()
Dim FromDate As Date
Dim ToDate As Date
FromDate = Format(Sheets("Sheet1").Range("B1").Value, "yyyy-mm-dd") 'Pass value from cell B1 to SellStartDate variable
ToDate = Format(Sheets("Sheet1").Range("B2").Value, "yyyy-mm-dd") 'Pass value from cell B2 to SellEndDate variable
MsgBox FromDate
MsgBox ToDate
'Pass the Parameters values to the stored procedure used in the data connection
With ActiveWorkbook.Connections("TestConnection").OLEDBConnection
.CommandText = "EXEC dbo.spr_TestProcedure '" & FromDate & "','" & ToDate & "'"
ActiveWorkbook.Connections("TestConnection").Refresh
End With
End Sub.
有没有办法以 SQL Server 过程接受的格式传递日期?如果没有其他选择,那么我将不得不选择将我的过程参数类型设置为 varchars 并将它们转换为日期。
感谢您对此的帮助!
【问题讨论】:
这适用于哪个 RDBMS?请添加标签以指定您使用的是mysql
、postgresql
、sql-server
、oracle
还是db2
- 或其他完全不同的东西。
在 VBA 中将 FromDate
和 ToDate
变量声明为字符串。您希望将字符串连接到您的 CommandText SQL 字符串。否则你的Format()
是多余的。
@marc_s,我已经编辑了我的问题以标记数据库,即 sql server
@Ralph,无论我在 excel 中使用什么格式作为日期,VBA 都会(在 msgbox 上)显示 dd/mm/yyyy 格式。例如,如果我输入 2016-sep-25,msgbox 会显示为 25/09/2016。 commandText 将代码构建为“EXEC dbo.spr_TestProcedure '@FromDate','@ToDate'”,当您右键单击 -> 表 -> 编辑查询时我可以看到。 .Refresh 是执行代码的那个。
@JNevill,是的,当我将 FromDate 和 ToDate 更改为字符串时它正在工作。感谢您指出选项。因此,表查询是使用 SQL 期望的日期格式构建的。虽然我现在卡住了查询没有执行,因此数据没有得到刷新,除了代码“ActiveWorkbook.Connections("TestConnection").Refresh"
【参考方案1】:
您可以将日期作为 char() 传递给 sp 并将其转换为日期。
【讨论】:
以上是关于VBA 将日期参数传递给 SQL Server 存储过程的主要内容,如果未能解决你的问题,请参考以下文章