2013-10-24 188 views
0

正確處理日期範圍的查詢。爲什麼不能在日期範圍內返回正確的值?

我有一個表格,其值存儲爲DateStamp的「01/10/2013 11:00:00 PM」。從2013年9月25日凌晨1點至2013年10月2日。

該文本框的值是dtBegin =「28/09/2013」​​和dtEnd = 01/10/2013。

dSumUsuage = DSum("Average", "tblScadaHourly", "[DateStamp] >= #" & dtBegin & "#" & " AND " & "[DateStamp] < #" & dtEnd & "#" & " AND ([Station] ='" & sStationName & "')") 

此查詢返回「無效使用空值」的錯誤。但他們是這些日期之間的數據和該站名稱的數據。

+0

你dSumUsuage是Date類型的,它不接受Null,因爲沒有記錄符合WHERE約束。 – jacouh

回答

1

這可能是一個典型的訪問日期格式錯誤:當使用帶斜線的英文日期格式時,Access認爲您使用MM/DD/YYYY格式,除非這會導致無效日期(然後它會嘗試DD/MM/YYYY)。

因此,我更喜歡使用國際日期格式YYYY-MM-DD。

就你而言,這可能會導致查詢「> = 2013-09-28和< 2013-01-10」,顯然無法返回任何結果。 >>與國際格式,它會要求「> = 2013-09-28和< 2013-10-01」

0

作爲上一個答案,您的位置字符串格式不正確,因爲您的dSumUsuage類型爲日期,它不接受Null,因爲沒有記錄符合你的不好的WHERE約束,所以會引發錯誤。

我們使用這個程序:

Public Function FormatDateTimeVb(ByVal varDateTime) 
    FormatDateTimeVb = "#" & Format(varDateTime, "yyyy-mm-dd hh:mm:ss") & "#" 
End Function 

使用此功能,形成日期時間字符串,現在我們得到tblScadaHourly.Average的總和:

dSumUsuage = DSum("Average", "tblScadaHourly", _ 
    "[DateStamp] >= " & FormatDateTimeVb(dtBegin) _ 
    & " AND [DateStamp] < " & FormatDateTimeVb(dtEnd) _ 
    & " AND ([Station] = '" & sStationName & "')") 
相關問題