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

#ms-access #checkbox #null #iif

#ms-access #флажок #null #iif

Вопрос:

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

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

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

Комментарии:

1. Чем [Field] Like "*" Or [Field] Is Null отличается от TRUE ?

2. Как уже было сказано, ваше условие всегда истинно (оно либо имеет значение, либо равно нулю, в любом случае это правда)

3. Это похоже на фильтр, если флажок установлен «TRUE», используйте данные, которые пользователь отправляет, чтобы указать возвращаемые результаты, если его «FALSE» возвращает все значения, которые включают нулевые значения

4. @CyberClaw не уверен, что я следую, условием будет флажок, значение которого может быть -1 ‘TRUE’ или 0 ‘FALSE’

5. Дело в том, что выражение [Field] типа «*» Или [Field] равно Null ничего не делает, потому что оно должно возвращать все (это всегда верно). Должен быть более простой способ извлечения всех записей, например, с помощью * или, возможно, оставить его пустым. Поскольку IIf может использоваться многими способами и местами, трудно точно понять, где он вводит это выражение. Кроме того, флажок является логическим, поэтому использование [Checkbox] = True может быть более удобным для чтения или просто [Checkbox]

Ответ №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 )
  

Комментарии:

1. да, теоретически это должно работать, но, к сожалению, это не так. попробовал и так, вот пример того, чего я пытаюсь достичь, если пользователь ищет книгу в библиотеке, и они могут выполнять поиск по названию и изданию. Они должны иметь возможность выполнять поиск только по имени, оставляя флажок Edition и поле пустыми, которые должны возвращать все значения, включая нули, однако, если они указывают издание, оно должно возвращать значения только на основе имени и издания

2. Какова цель использования флажков? Если вы введете значение, будут извлечены все записи, содержащие это значение. Если вы не введете значение, будут извлечены все записи (включая записи, имеющие нулевые значения)….

3. @Rene хотя вы правы в том смысле, что флажки не предоставляют никаких дополнительных функций, принцип тот же, т.Е. «Если флажок установлен» совпадает с «Если текстовое поле пустое». Проблема действительно заключается в захвате всех значений, включая нули или введенное значение.

4. @onedaywhen единственная проблема с вашим решением заключается в том, что оно будет возвращать нулевые значения, даже если указана редакция

5. @TT CAM, поэтому, если флажки не предоставляют никаких дополнительных функций, удалите их. И использовать Like "*" or Is Null в качестве критерия.