为什么不访问会在日期范围内返回正确的值?

时间:2013-10-24 18:18:13

标签: ms-access access-vba

它没有正确处理日期范围的查询。

我有一个表格,其值存储为“01/10/2013 11:00:00 PM”,用于DateStamp。范围从2013年9月25日上午1:00:00到2013年10月2日。

文本框值为dtBegin =“28/09/2013”​​和dtEnd = 01/10/2013。

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

此查询返回“无效使用Null”错误。但它们是这些日期和该电台名称之间的数据。

2 个答案:

答案 0 :(得分:1)

这可能是一个经典的访问日期格式错误:当使用带有斜杠的英文日期格式时,Access认为您使用格式MM / DD / YYYY,除非这会导致无效日期(然后它会尝试DD / MM / YYYY)。

因此,我更喜欢使用国际日期格式YYYY-MM-DD。

在您的情况下,这可能会导致查询“&gt; = 2013-09-28 And&lt; 2013-01-10”,这显然无法返回任何结果。 &GT;&GT;对于国际格式,它会要求“&gt; = 2013-09-28和&lt; 2013-10-01”

答案 1 :(得分:0)

如上一个答案所示,您的字符串格式错误,因为您的dSumUsuage类型为Date,它不接受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 & "')")