В Access требуется ли «ложная часть» функции IIf?

#ms-access #required

#ms-access #требуется

Вопрос:

При преобразовании некоторых запросов Access в T-SQL я наткнулся на функцию доступа IIf. Я прочитал документацию здесь и понимаю, что она принимает 3 параметра: выражение, значение if true и значение if false. Что мне еще предстоит найти, так это то, требуется ли параметр «false»? И если значение false не указано, каково поведение?

ОБНОВЛЕНИЕ: когда был задан этот вопрос, я не знал, работает ли запрос только с 2 параметрами (b / c я не могу запустить запрос в Access). Однако я подозревал, что это может сработать (только с 2 параметрами), поскольку несколько запросов, которые я конвертирую (в T-SQL), имеют вложенные IIF, а последний IIF имеет только 2 параметра.

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

1. Это IIf , и в документе, который вы связали, четко указано, что требуются все 3 параметра.

2. Андре, да, вы правы, (и я знал) в документе четко указано, что все 3 обязательны. Мое замешательство возникло из-за запросов, которые мне было поручено преобразовать — некоторые из них имеют вложенные IIF, в которых конечный IFF имеет только два параметра. Обычно я бы запустил запрос и посмотрел, что произойдет, но по нескольким причинам я не могу запускать запросы. Итак, я полагаю, что моим основным мотивом было определить, каковы были намерения человека, который написал запрос в первую очередь, и определить, что должно произойти (в Access), если IIF задано только 2 параметра.

3. А, понятно. Я этого не знал. Было бы очень полезно, если бы вы добавили эту информацию (что функция фактически работает в запросах только с 2 параметрами) к вашему вопросу.

Ответ №1:

Это IIf не IFF так. Все аргументы требуются в выражениях VBA и текстового поля, и оба должны быть вычисляемыми (без результата ошибки, такого как DivBy0), потому что будут вычислены обе части — если любая из них ошибается, все выражение ошибается. IIf() в запросе Access работает по-другому — ‘falsepart’ вычисляется только в случае сбоя ‘truepart’, и если ‘falsepart’ не указан, выражение возвращает Null, если ‘truepart’ завершается с ошибкой.

Попробуйте несколько выражений и посмотрите, что произойдет. Один для тестирования : IIf(1=2,"T") .

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

1. 7 июня, 1) часть вашего ответа «IIf() в запросе работает по-другому» — это то, что я искал. 2) Я попробовал IIF в T-SQL, и «ВЫБЕРИТЕ IIf(1 = 2,’T’)» выдает ошибку «Неправильный синтаксис», если указан не 3-й аргумент, а 3) Я попробовал это в Access, и при выполнении запроса «ВЫБЕРИТЕ IIf (1 = 2, «T»)» отображается пустая ячейка. Могу ли я предположить, что «пустая ячейка» — это то, что вы подразумеваете под «возвращает Null, если ‘truepart’ завершается неудачей»?

2. Да, результат равен нулю, в отличие от пустой строки.

Ответ №2:

Дополнение к отличному ответу June7:

Вот два простых запроса, которые работают в Access SQL:

 SELECT IIf(1=1, "yes")
 

(возвращает «да»)

 SELECT IsNull(IIf(1=2, "yes"))
 

(возвращает -1, иначе True) — поэтому, если вы опускаете falsepart , IIf() возвращает действительно NULL, если expr не оценивается как True.

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

1. Андре, отличное дополнение, и оно очень проясняет двусмысленность. Спасибо!

Ответ №3:

Да, это обязательно, на самом деле это похоже на оператор if else .

т.е. действие выполняется, если условие выполнено, и другое действие выполняется, если условие не выполнено