由於英語不是我的第一語言,因此難以解釋這種特殊情況,讓我們來看看是否可以讓自己明白,即時嘗試執行Select查詢以獲取記錄一個時間範圍內(列ContactDate包含的日期/時間值)的查詢是如下:Ms Access 2007查詢返回布爾值,當它應該爲true時返回false
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是定義爲複選框(真或假),當我運行這個查詢使用數據庫中的訪問它一切運作良好我得到一個ID +日期的連接值的列,包含分數的列,其中1列,具有COPCFCR值的列(真或假),一列與FCRPossible值(true或false),以及帶有RecordName的列,此時如果我將它們與表中的值進行比較,它們將匹配100%。 現在,我把這個查詢放在一個Excel工作簿上,但是當它運行時它返回COPCFCR和FCRPossible列的值錯誤,有時候返回false作爲true或viceversa,而其他時候這些值與相應的100%匹配源表上的值,例如在某些行中,根據源表將COPCFCR返回爲true時應爲false。 下面是我在使用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'變量中看到了什麼?我認爲在將其與原始查詢進行比較時會看到一些差異,並且這種差異會向您顯示問題。 – 2014-10-06 17:46:01
strQuery存儲sql代碼,該值正是我上面發佈的 – 2014-10-06 18:39:38
確定嗎?在您的VBA代碼中,'#「和格式(STOP_DATE + 1,」m/dd/yyyy「)& "#));」'會在'STOP_DATE'中導致一天** **更多。在你的原始查詢中,第二個日期(假設它也是'm/dd/yyyy'格式)比第一個日期多一個月**。它可以解釋結果的差異。 – 2014-10-06 19:00:40