【发布时间】:2016-02-23 14:12:14
【问题描述】:
我有一个 Excel 工作表,它通过 ODBC 连接到一个 Oracle 数据库,该数据库引入了发票数据。然后,我尝试使用 SQL 语句从同一工作簿中的另一个工作表中读取 Excel 工作表中的数据,该语句使用定义下载(链接)数据的 Excel 范围。
没有 WHERE 子句的 SQL 语句可以正常工作。当我添加在日期字段上设置条件的 WHERE 子句时,我得到了这篇文章主题中列出的错误。我相信我在日期字段的 SQL 语句中使用的语法是正确的——因为如果我复制下载的数据并将其作为值粘贴到另一个工作表中,然后针对此复制的数据处理 SQL 语句,则 SQL 语句有效.此外,如果我在 WHERE 子句中选择要使用的其他(非日期)字段,则代码可以工作。
下面是代码。 (范围名称“InvoiceData”定义 SQL 语句将读取的数据集)。如果您对如何纠正有任何想法,请告诉我。我的备份计划是简单地将数据复制/粘贴为值 - 但这会使文件变得相当大。
代码最后一条语句出现“用于查看链接的Microsoft Excel的连接...丢失”的错误信息。
Function OpenRangeRS(rng As Range) As Recordset
'**Returns as recordset for the passed in range or range name
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sDBPath As String
Dim sRangeAddress As String
Dim sFile As String
Dim sConnect As String
Dim sSQL As String
Dim dReportDate As Date
sDBPath = ThisWorkbook.FullName
sConnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & sDBPath & ";HDR=Yes';"
cn.Open sConnect
dReportDate = Range("SelectedDate")
sSQL = "SELECT * FROM [InvoiceData] "
sSQL = sSQL & " WHERE Invoice_Date = " & "#" & dReportDate & "#"
rs.Open sSQL, sConnect
【问题讨论】: