在表单的两个日期之间从表单运行查询时出错

时间:2019-03-19 08:31:44

标签: ms-access ms-access-2010 ms-access-2007 ms-access-2013 ms-access-2016

我有一个名为FirstInLastOut的表单,如下图所示。Form

根据我想在两个日期之间搜索的姓名或徽章编号。

我在查询中使用以下条件:

>=[Forms]![FirstInLastOut]![StartDateEntry] And <=[Forms]![FirstInLastOut]![EndDateEntry]

这给了我包括其他月份在内的结果。请参阅下面的查询报告。

FirstinlastoutReport

因此,如您在图像中看到的那样,日期的数量随着参数的增加而减少,而其他月份也有所增加。

我如何做到这一点,使其仅选择日期范围之间的日期?

SELECT FistClockInRaw.Badgenumber, FistClockInRaw.name, FistClockInRaw.lastname, FistClockInRaw.MinOfCHECKTIME, FLastClockOutRaw.MaxOfCHECKTIME, [MaxOfCHECKTIME]-[MinOfCHECKTIME] AS TotalHours, FLastClockOutRaw.QDate, FistClockInRaw.MinOfQTime, FLastClockOutRaw.MaxOfQTime, RawCompleteQuery.CHECKTIME
FROM RawCompleteQuery, FLastClockOutRaw INNER JOIN FistClockInRaw ON (FLastClockOutRaw.Badgenumber = FistClockInRaw.Badgenumber) AND (FLastClockOutRaw.name = FistClockInRaw.name) AND (FLastClockOutRaw.QDate = FistClockInRaw.QDate)
WHERE (((FistClockInRaw.name)=[Forms]![FirstInLastOut]![FirstNameEntry]) AND ((RawCompleteQuery.CHECKTIME)>=[Forms]![FirstInLastOut]![StartDateEntry] And (RawCompleteQuery.CHECKTIME)<=[Forms]![FirstInLastOut]![EndDateEntry]));

是查询

1 个答案:

答案 0 :(得分:0)

我假设表单字段StartDateEntryEndDateEntry绑定到类型date的字段。

我还假设您只想比较那些表单字段的日期部分。

因此,请尝试使用此条件来确保正确的日期解释:

WHERE FistClockInRaw.name=[Forms]![FirstInLastOut]![FirstNameEntry]
AND RawCompleteQuery.CHECKTIME >= Format([Forms]![FirstInLastOut]![StartDateEntry], "\#yyyy-mm-dd\#")
AND RawCompleteQuery.CHECKTIME <= Format([Forms]![FirstInLastOut]![EndDateEntry], "\#yyyy-mm-dd\#")

备注:

请注意,每个日期字段/变量也总是包含时间部分!

因此,您当前将EndDateEntry<=进行比较的逻辑可能会造成麻烦,因为您只会在字段00:00:00中获得时间值为CHECKTIME的结束日期的结果

如果CHECKTIME的任何记录包含请求的结束日期和比00:00:00大的时间,则不在结果中。

为避免这种情况,您应该使用<并添加一天:

And RawCompleteQuery.CHECKTIME < Format([Forms]![FirstInLastOut]![EndDateEntry] + 1, "\#yyyy-mm-dd\#")