Microsoft Access. Работа с запросами и нулевыми значениями
Это может показаться простым вопросом, но я не могу понять это. У меня есть таблица с несколькими полями. 3 из них (SizeA, SizeB, SizeC) являются числами, и у меня есть форма, которая использует запрос для запроса таблицы. Теперь размер A всегда не равен нулю, но SizeB и C могут быть равны нулю. Вот критерии, которые я использую для размеров A, B и C:
Like IIf([forms]![Search Fittings]![SizeA_Text]="0","*",[forms]![Search Fittings]![SizeA_Text])
Like IIf([forms]![Search Fittings]![SizeB_Text]="0","*",[forms]![Search Fittings]![SizeB_Text])
Like IIf([forms]![Search Fittings]![SizeC_Text]="0","*",[forms]![Search Fittings]![SizeC_Text])
Как видите, if проверяет, равно ли поле формы Size*_Text 0 или нет. Проблема в том, что записи таблицы с SizeB или SizeC не установлены (поэтому они нулевые) не отображаются в поиске. Решение может выглядеть следующим образом:
Like IIf([forms]![Search Fittings]![SizeC_Text]="0",Like "*" Or Is Null,[forms]![Search Fittings]![SizeC_Text])
но это не работает Есть ли у вас какие-либо предложения о том, как я могу реализовать эту логику?
Спасибо, Гвидо
2 ответа
Вам нужно использовать немного более сложные критерии, это невозможно сделать в течение одного iif()
(вы не можете проверить запись таблицы на нулевое значение в пределах like
заявление).
([...sizeC_text]="0" and isnull(<your field>)) or <your field> like iif([...sizeC_text]="0","*",[...sizeC_text])
Также обратите внимание, что это условие верно, если вы используете его в VBA, если вы поместите его в выражение SQL, чем заменить isnull()
функция к ... Is Null
Обернуть поле в nz
функция.
NZ
назначит второй аргумент, если первый равен нулю.
nz("SuperUser","default") = "SuperUser"
nz(NULL,"default") = "default"
это изменит ваш тест на что-то вроде этого (повторите для любых тестов, которые вам нужно сделать):
Like IIf(nz([forms]![Search Fittings]![SizeB_Text],"")="0"
,"*"
,nz([forms]![Search Fittings]![SizeB_Text],"")
)