2013-10-24 149 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 & "')") 
相关问题