【发布时间】: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"
标签: excel sql-server-2008 parameter-passing