Ошибка при выполнении запроса из формы между двумя датами из формы - PullRequest
0 голосов
/ 19 марта 2019

У меня есть форма 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 голосов
/ 20 марта 2019

Я предполагаю, что поля форм 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 с <= может вызвать проблемы, потому что вы получите только результаты даты окончания, имеющие значения времени 00:00:00 в поле CHECKTIME.

Если какая-либо запись CHECKTIME содержит запрошенную дату окончания и часть времени, большую, чем 00:00:00, это не результат.

Чтобы избежать этого, следует использовать< и добавьте один день:

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