【问题标题】:Return dates (not strings) from an ADODB query从 ADODB 查询返回日期(不是字符串)
【发布时间】:2023-04-09 17:50:01
【问题描述】:

下面的函数工作正常并输出正确的结果,除了它将日期输出为字符串而不是日期。我怎样才能让它输出日期呢?

Function GetExpiries_YieldX(TradeDate As Date, Code As String) As Variant

    'Create and open the connection
    Dim oConnection As Connection
    Set oConnection = New Connection
    oConnection.ConnectionString = strConnectionStringYieldX
    oConnection.Open

    'Create the command object
    Dim oCommand As Command
    Set oCommand = New Command
    oCommand.CommandType = adCmdText

    Dim SQLString As String

        SQLString = "SELECT DISTINCT Expiry" _
                 & " FROM MTM" _
                 & " WHERE TradeDate = ?" _
                 & "   and Code = ?"

    oCommand.CommandText = SQLString
    oCommand.ActiveConnection = oConnection

    oCommand.Parameters.Append oCommand.CreateParameter("Date", adDBTimeStamp, adParamInput)
    oCommand.Parameters.Append oCommand.CreateParameter("Code", adVarChar, adParamInput, 50)

    oCommand.Parameters.Item("Date").Value = TradeDate
    oCommand.Parameters.Item("Code").Value = Code

    Dim result As New ADODB.Recordset
    Set result = oCommand.Execute

    Dim resultA As Variant
    'GetExpiries_YieldX = WorksheetFunction.Transpose(result.GetRows)
    GetExpiries_YieldX = result.GetRows

    oConnection.Close

End Function

【问题讨论】:

  • 数据库中的列Expiry是否定义为DataTime?
  • 你对结果集做了什么?如果放入工作表范围,您可以使用 Range(..).CopyFromRecordset 方法将记录集转储到一个范围中,然后使用 NumberFormat 修改这些范围的格式
  • @Philip 不,它只是 date 类型(SQL Server 2008 顺便说一句),我将日期放在工作表上。目前,我只是将它们转换为做这种事情的日期:=DATE(LEFT(A2,4),MID(A2,6,2),RIGHT(A2,2)),但如果可能的话,我希望它们只是作为日期出现。我发现很难找到关于如何正确编写这类函数(即查询 sql server dbs 的 vba 函数)的体面文档:/
  • 或者您可以尝试将 Expiry 字段转换为 SQL 字符串中的日期格式:“SELECT DISTINCT CDATE(Expiry)...
  • 转换只返回#VALUES...

标签: excel adodb vba


【解决方案1】:

2.8 之前的 ADODB 版本无法识别 SQL Server 2008 中引入的新 Date 数据类型。

所以,请检查以下内容:

  1. 确保您在连接字符串中使用 native SQL Server 提供程序(NOT OLEDB SQL 提供程序),因此它应该类似于 "Provider=SQLNCLI10 .1;数据源=MyServer;初始目录=MyDatabase;Uid=MyUser;Pwd=MyPassword;"
  2. 确保您已安装最新的 SQL Native Client(sqlncli2008.msi 或类似的东西,您可以从 SQL Server 2008 可再发行组件中窃取它)
  3. 确保您的 VB 项目中引用的 ADO 版本为 2.8

ADODB & SQL 2008 (MS Forums)找到所有这些

我希望这可以帮助您从数据库中的日期列中获取数组中的日期列!

【讨论】:

  • 只需更改连接字符串(即您的答案中的第 1 步)即可修复它!谢谢!
  • 不客气,来来回回弄清楚发生了什么很有趣:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多