【问题标题】:Ms Access 2007 queries returns Boolean values false when it should be trueMs Access 2007 查询在应该为真时返回布尔值假
【发布时间】: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 代码中,#" &amp; Format(STOP_DATE + 1, "m/dd/yyyy") &amp; "#));" 将导致 STOP_DATE 多出 。在您的原始查询中,第二个日期(假设它也是m/dd/yyyy 格式)比第一个日期多一个。它可以解释结果差异。
  • 是的,这就是它的意思,我需要在 stop_date 中再添加一天,因为这个变量存储了我想要的月份的最后一个日期,但由于 ContactDate(date) 中数据的性质+time)我需要添加那一天,以便我可以捕获所有日期(在此示例中为 9 月)。这部分只影响选择的日期,它不能解释为什么我在 COPCFCR 和 FCRPossible 列中得到不同的值。
  • 就像我之前说的,如果我在同一个数据库中使用 Access 运行查询,我会得到我想要的结果,但如果我在 excel vba 中运行它,我会为同一行得到不同的值。我正在探索数据库损坏的可能性,我会让你知道我的发现。

标签: sql excel ms-access-2007 vba


【解决方案1】:

似乎数据库文件已损坏,这导致数据以不同的方式导出。查询工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多