Использование оператора OR для нулевых значений в операторе IIF

У меня есть форма MS access с дополнительными критериями для выполнения запроса. Пользователь установит флажок и введет значение, а затем выполнит запрос на основе выбранных полей и входных данных. Проблема, которую я имею для одного поля, в частности, является таблица хранит значения NULL. Критерии для запроса выглядят следующим образом:

 IIf([Checkbox]=-1,[Data in Form],([Field]Like "*" Or [Field]Is Null))

Если я использую этот код в качестве критерия для поля в запросе, он работает только тогда, когда значение находится в форме и флажок установлен. Если я использую код в качестве выражения, он возвращает значения NULL, когда флажок не установлен, но возвращает все записи, когда флажок установлен и значение введено. если я использую Like "*" or Is Nullв качестве критерия, он работает, возвращая все записи, так почему он не работает как часть инструкции IIF?

1 ответ

  1. Найти его трудно следовать (много данных тестирования и ожидаемые результаты всегда приветствуются), но я думаю, что-то вроде этого:

    Правило перезаписи стандартной логики

    IF A THEN B
    

    эквивалентно

    ( NOT A OR B )
    

    Таким образом, ваше условие поиска может быть что-то вроде:

    WHERE ( checkbox1 = FALSE OR field1 = input1 OR field1 IS NULL )
      AND ( checkbox2 = FALSE OR field2 = input2 OR field2 IS NULL )
      AND ( checkbox3 = FALSE OR field3 = input3 OR field3 IS NULL )
    

    ОБНОВЛЕНИЕ

    Что-то более похожее:

    WHERE NameColumn = NameInput
          AND ( SearchEditioncheckbox = FALSE 
                OR EditionColumn = EditionInput 
                OR EditionColumn IS NULL )
    

    ДАЛЬНЕЙШЕЕ ОБНОВЛЕНИЕ

    Может быть:

    WHERE NameColumn = NameInput
          AND ( SearchEditioncheckbox = FALSE 
                OR EditionColumn = EditionInput )
    

    или возможно:

    WHERE NameColumn = NameInput
          AND ( SearchEditioncheckbox = FALSE 
                OR EditionColumn = EditionInput 
                OR ( EditionColumn IS NULL AND EditionInput IS NULL )