【发布时间】:2014-12-01 00:32:51
【问题描述】:
这种很难解释,因为英语不是我的第一语言,让我们看看是否能让我自己理解,我尝试执行 Select 查询以获取时间范围内的记录(ContactDate 列包含日期/时间值) 查询如下:
SELECT Val([ACD_ID] & Format(DateValue([ContactDate]),'0')) AS SEARCH_CODE, CFinal, 1 AS Expr1,
COPCFCR, FCRPossible, RecordName
FROM [YTD-Daily_Report]
WHERE ((([YTD-Daily_Report].[ContactDate])>=#9/01/2014#
And ([YTD-Daily_Report].[ContactDate])<=#10/01/2014#));
在源表(YTD-Daily_Report)中,COPCFCR 和 FCRPossible 被定义为复选框(true 或 false),当我在数据库中使用 Access 运行此查询时,一切正常,我得到一个包含 ID 连接值的列+ 日期,包含分数的列,包含 1 的列,包含 COPCFCR 值(真或假)的列,包含 FCRPossible 值(真或假)的列,以及包含 RecordName 的列,此时如果我与表中的值进行比较,它们匹配 100%。 现在,我把这个查询放在 Excel 工作簿上,但是当它运行时,它返回 COPCFCR 和 FCRPossible 列的值错误,有时返回 false 为 true,反之亦然,有时值与相应的值 100% 匹配在源表上,例如在某些行中,当根据源表它应该为假时,COPCFCR 返回为真。 这是我正在使用的 Excel VBA 代码:
Dim rsSource As New Recordset
Dim m_Connection As New Connection
Dim rngTarget as range
dim result as long
m_Connection.Provider = "Microsoft.ACE.OLEDB.12.0"
m_Connection.Open "Path and name of the Database"
strQuery = "SELECT Val([ACD_ID] & Format(DateValue([ContactDate]),'0')) AS SEARCH_CODE, CFinal, 1 AS Expr1, COPCFCR, FCRPossible, RecordName" & Chr(13) & _
"FROM [YTD-Daily_Report]" & Chr(13) & _
"WHERE ((([YTD-Daily_Report].[ContactDate])>=#" & Format(START_DATE, "m/dd/yyyy") & "# And ([YTD-Daily_Report].[ContactDate])<=#" & Format(STOP_DATE + 1, "m/dd/yyyy") & "#));"
rsSource.Open strQuery, m_Connection, adOpenForwardOnly, adLockReadOnly
Set rngTarget = Range("A2")
result = rngTarget.CopyFromRecordset(rsSource)
If rsSource.State Then rsSource.Close
Set rsSource = Nothing
If m_Connection.State Then m_Connection.Close
Set m_Connection = Nothing
有什么想法会发生什么吗?
【问题讨论】:
-
在执行查询之前,您在
strQuery变量中看到了什么?我认为在将其与原始查询进行比较时,您会发现一些差异,而这种差异将揭示您的问题。 -
strQuery存放的是sql代码,值就是我上面贴的
-
你确定吗?在您的 VBA 代码中,
#" & Format(STOP_DATE + 1, "m/dd/yyyy") & "#));"将导致STOP_DATE多出 天。在您的原始查询中,第二个日期(假设它也是m/dd/yyyy格式)比第一个日期多一个月。它可以解释结果差异。 -
是的,这就是它的意思,我需要在 stop_date 中再添加一天,因为这个变量存储了我想要的月份的最后一个日期,但由于 ContactDate(date) 中数据的性质+time)我需要添加那一天,以便我可以捕获所有日期(在此示例中为 9 月)。这部分只影响选择的日期,它不能解释为什么我在 COPCFCR 和 FCRPossible 列中得到不同的值。
-
就像我之前说的,如果我在同一个数据库中使用 Access 运行查询,我会得到我想要的结果,但如果我在 excel vba 中运行它,我会为同一行得到不同的值。我正在探索数据库损坏的可能性,我会让你知道我的发现。
标签: sql excel ms-access-2007 vba