2013-04-10 43 views
1

下面的函数可以正常工作,并输出正确的结果,除了它将日期作为字符串输出而不是日期。我怎样才能让它输出日期呢?ADODB查询返回日期(非字符串)

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 
+0

是定义为DataTime的数据库中的列** Expiry **? – 2013-04-10 13:47:40

+0

你对结果集做什么?如果放入工作表范围,可以使用** Range(..)。CopyFromRecordset **方法将记录集转储到一个范围内,然后使用NumberFormat修改这些范围的格式 – 2013-04-10 13:49:34

+0

@Philip否它只是'date'类型SQL Server 2008 btw),我把日期放在工作表上。目前我只是将它们转换为日期,做这种事情:'= DATE(LEFT(A2,4),MID(A2,6,2),RIGHT(A2,2))''但我更喜欢if如果可能的话,他们只是以日期出现。我发现很难找到正确的文档来了解如何编写这些函数(即查询sql server dbs的vba函数):/ – Dan 2013-04-10 13:59:30

回答

3

ADODB之前的版本2.8已经aproblem识别新日期数据类型在SQL Server 2008中引入

所以,检查以下内容:

  1. 确保您使用的是原生您的Connnection字符串中的SQL Server提供程序(不是OLEDB SQL提供程序),因此它应该是类似于“ Provider = SQLNCLI10.1; Data Source = MyServer; Initial Catalog = MyDatabase; Uid = MyUser; Pwd = MyPassword;“
  2. 确保您已经安装了最新的SQL Native Client的
  3. 确保ADO版本在你的VB项目中引用(sqlncli2008.msi或类似的东西,你可以从SQL Server 2008可再发行偷)为2.8

发现了所有这一切ADODB & SQL 2008 (MS Forums)

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

+0

只需更改连接字符串(即您的答案中的第1步)就可以修复它!谢谢! – Dan 2013-04-11 06:37:06

+0

你是最受欢迎的,这是很有趣的来回去解决发生了什么:) – 2013-04-11 08:14:51