Функция IsNull внутри IIf() не работает - MS Access

У меня есть поле в запросе, которое проверяет, как пользователь ввел дату в основной форме. Я пытаюсь сделать это как одну введенную дату, когда первое текстовое поле заполнено, и как диапазон дат, если конечная дата введена во второе текстовое поле. Поэтому, если текстовое поле конечной даты пусто, его следует игнорировать, и запрос должен выполняться так, как если бы выполнялась фильтрация только по определенной дате. Я использовал приведенное ниже выражение и ввел только начальную дату, поэтому он должен рассматривать поле как отфильтрованное только по 1 дате, а не по диапазону. Но запрос возвращает пустой. [Text0] — это дата начала, а [Text3] — дата окончания. Поле представляет собой поле даты задания, предназначенное для возврата номеров заданий либо с этой даты, либо из диапазона дат.

Пример: если [Text0] установлено на 20.04.2015, а [Text3] пусто, запрос должен вернуть номера заданий A-18, B-18 и C-18. Если [Text0] установлено на 20.04.2015, а [Text3] установлено на 27.04.2015, запрос должен вернуть A-18, B-18, C-18, D-19, E-19, F-19. Разница между -18 и -19 - это неделя, которой она соответствует.

=IIf((IsNull([Forms]![MainForm]![Text3])=True),[Forms]![MainForm]![Text0],Between [Forms]![MainForm]![Text0] And [Forms]![MainForm]![Text3])

person whatwhatwhat    schedule 30.04.2015    source источник
comment
Дайте нам пример данных для работы. Я уже вижу, что не так, но мне нужно убедиться, что Between будет работать в том контексте, в котором вы его используете.   -  person Mark C.    schedule 30.04.2015
comment
@Invent-Animate помогает? И еще раз спасибо за помощь! Кажется, я помню вас по другому вопросу :)   -  person whatwhatwhat    schedule 30.04.2015
comment
Без проблем! Однако мне нужно, чтобы вы поняли, что в контексте вашего вопроса мы понятия не имеем, что такое job numbers и почему они должны быть возвращены.   -  person Mark C.    schedule 30.04.2015
comment
Это используется в VBA или SQL?   -  person Mark C.    schedule 30.04.2015
comment
Это SQL, хотя я в основном держу его в представлении «Дизайн» (MS Access). Номера заданий — это названия для выполнения конкретного проекта. Суффикс, прикрепленный к этому номеру задания, меняется каждую неделю (отсюда -18 против -19). Они связаны с кучей информации во множестве таблиц. Одно поле в одной из этих таблиц — это понедельник, когда выполняется задание, т. е. дата задания.   -  person whatwhatwhat    schedule 01.05.2015
comment
Я думаю, что следующий вопрос: если Text3 пусто, ищет ли запрос все записи больше, чем Text0? Если да, то у меня есть решение, а если нет, то у меня тоже есть решение.   -  person Mark C.    schedule 01.05.2015
comment
@Invent-Animate не будет возвращать задания с текстом больше [Text0]. Использование только даты начала означает, что вы найдете вакансии только с этой конкретной датой.   -  person whatwhatwhat    schedule 01.05.2015
comment
Ой! Не знал этого. Я думаю, решение Брайана Песслера должно быть тем, что вам нужно.   -  person Mark C.    schedule 01.05.2015


Ответы (1)


Я думаю, что вам нужно что-то вроде этого:

Select JobNumber, ...
from Jobs
where JobDate >= [Forms]![MainForm]![Text0]
    and JobDate <= nz([Forms]![MainForm]![Text3],[Forms]![MainForm]![Text0])
person Brian Pressler    schedule 30.04.2015