【问题标题】:VBA passing date in stored procedure problems存储过程问题中的VBA传递日期
【发布时间】:2014-06-23 12:34:17
【问题描述】:

我在使用 SQL 存储过程将日期值传递给日期时间值时遇到了困难。 @DateTime 参数在 Microsoft SQL Server 的 MyDb 中采用日期时间格式。当我运行下面的子程序时,我得到一个错误:Parameter type not supported. 我相信这个错误与adDBTimeStamp 参数类型有关。知道如何解决这个问题吗?

Public Sub AddDateTime

Dim DateTime as Date
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim param as ADODB.Parameter
Dim sConnString As String

/*Create the connection string*/

DateTime = Now()

sConnString = "Driver={SQL Server};Server=TheServer3;Database=MyDb;Trusted_Connection=Yes;"

Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = sConnString
cmd.CommandText = "usp_AddNewDateTime"
cmd.CommandType = adCmdStoredProc

Set param = cmd.CreateParameter("@DateTime", adDBTimeStamp, adParamInput, , DateTime)
cmd.Parameters.Append param

Set rs = cmd.Execute

/*Clean up*/

Set conn = Nothing
Set rs = Nothing

End Sub

【问题讨论】:

  • 确认 adDBTimeStamp = 135

标签: sql vba excel stored-procedures


【解决方案1】:

由于您提供的是Date 值,因此只需使用adDBDate

Set param = cmd.CreateParameter("@DateTime", adDBDate, adParamInput, , DateTime)

【讨论】:

  • 我仍然收到Parameter type not supported.,我被定向到:Set rs = cmd.Execute
  • 奇怪的是,如果我用 41765(今天的日期)替换 DateTime 变量,就没有错误。
  • 但如果我将DateTime 替换为Format(DateTime, "General Number"),我会再次收到错误消息。
  • @bfs1990 SQL server 不支持 "adDBDate",你必须使用 "adDBTimeStamp" support.microsoft.com/kb/214459/en
【解决方案2】:

简单的解决方案 -- DateTime 变量必须转换为 Double:CDbl(DateTime)

【讨论】:

    猜你喜欢
    • 2017-02-19
    • 2019-05-05
    • 2014-11-19
    • 2020-03-04
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多