【发布时间】:2013-07-03 01:45:14
【问题描述】:
我正在尝试将一些数据从 SQL Server 提取到 Microsoft Excel 2007。我已经设置了连接,除了时间戳之外,一切似乎都工作正常。我只能得到要通过的日期,而不是相应的小时、分钟或秒。我可以使用 Excel ODBC 查询工具从 SQL 数据库中提取数据,并且在那里列出了小时和分钟。我尝试了各种不同的 CAST() 选项。他们都没有解决我的问题。我正在运行 Windows XP。我不知道服务器上运行的是什么版本的 Microsoft SQL。我的代码如下所示。
Sub Populate_Sheet(theSheet As Worksheet)
'Declare variables'
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
Dim executeThisSQLStatement As String
'Dim target As Worksheet
'Set target = theSheet
executeThisSQLStatement = "SELECT CAST(DateHour_CPT AS TIMESTAMP) FROM EnergyData_v"
'Open Connection'
objMyConn.ConnectionString = "driver={SQLServer};Data Source=DataMart;User ID=acctname.value;Password=mypass.value;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = executeThisSQLStatement
objMyCmd.CommandType = adCmdText
'Open Recordset'
Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open
'Copy Data to Excel'
theSheet.Range("A6").CopyFromRecordset objMyRecordset
End Sub
【问题讨论】:
-
您的意思是转换为 DATETIME 而不是 TIMESTAMP? SQL Server 在命名 TIMESTAMP 类型时犯了一个大错误 - 虽然它听起来类似于表示与日期和时间有关的东西的 ANSI SQL 类型,但它与任何一个都无关。在查询窗口中尝试此操作,忽略所有这些 VBA 和 Excel 干扰:
SELECT CAST(GETDATE() AS TIMESTAMP); -
另外,您永远不必说“我不知道我正在运行哪个版本”——使用
SELECT @@VERSION;获得这一点很简单。 -
这可能是 Excel 格式的问题。尝试将日期列单元格的格式更改为“yyyy-mm-dd hh:mm:ss”
-
我尝试了 DATETIME 和 TIMESTAMP。 DATETIME 将返回日期,但不返回 hh:mm。 TIMESTAMP 不会返回任何内容。我还尝试了 Excel 中单元格的所有格式选项。所有数据库条目的时间为 00:00:00.000。明天早上我将使用该 Select 语句获取 SQL Server 版本。这个时间戳问题真的让我很恼火。我今天花了很多时间来弄清楚这一点。我现在不能回头。
标签: sql sql-server excel vba ado