在表单的两个日期之间从表单运行查询时出错
Posted
技术标签:
【中文标题】在表单的两个日期之间从表单运行查询时出错【英文标题】:Error when runing query from form between two date from a form 【发布时间】:2019-03-19 08:31:44 【问题描述】:我有一个名为 FirstInLastOut 的表单,如下图所示。
根据我想在两个日期之间搜索的姓名或徽章编号。
我在查询中使用以下条件:
>=[Forms]![FirstInLastOut]![StartDateEntry] And <=[Forms]![FirstInLastOut]![EndDateEntry]
这是给我的结果,其中也包括其他月份。请看下面的查询报告。
因此,正如您在图像中看到的那样,日期的数量随着参数的下降而下降,但其他月份也是如此。
我怎样才能使它只选择日期范围之间的日期?
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]));
是查询
【问题讨论】:
它将输入的日期作为文本而不是日期进行比较,因此它将选择所有日期在 15 到 19 之间的日期。因此,为了获得正确的结果,表/查询中的数据类型应该是日期并转换选择表单上的文本首先显示日期数据类型 【参考方案1】:我假设表单字段StartDateEntry
和EndDateEntry
绑定到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
与<=
进行比较的逻辑可能会导致麻烦,因为您只会在CHECKTIME
字段中获得时间值为00:00:00
的结束日期的结果。
如果CHECKTIME
的任何记录包含请求的结束日期和大于00:00:00
的时间部分,则它不在结果中。
为避免这种情况,您应该使用<
并添加一天:
And RawCompleteQuery.CHECKTIME < Format([Forms]![FirstInLastOut]![EndDateEntry] + 1, "\#yyyy-mm-dd\#")
【讨论】:
以上是关于在表单的两个日期之间从表单运行查询时出错的主要内容,如果未能解决你的问题,请参考以下文章