2012-04-16 2 views
0

У меня есть поле со списком в одной из моих форм, которое возвращает число, я использую это число в качестве критериев для поля в запросе, однако, если нет опции в поле со списком. Я хочу использовать набор критериев по умолчанию, но доступ продолжает говорить мне, что у меня есть недействительный синтаксис. Может ли кто-нибудь сказать мне, как я могу это сделать?Как использовать неравенства в «iif» в запросе при доступе

IIf(IsNull([Forms]![frm_a]![cmbo_b]),<2 or >3,[Forms]![frm_a]![cmbo_b])

Проблема возникает, когда я использую <2 or >3 в середине, если заявление.

+0

Каков ваш набор критериев по умолчанию, на который вы ссылаетесь? –

ответ

1

Ваша проблема состоит из двух частей. Прежде всего, вот псевдо IIF заявление, чтобы помочь вам понять, как они работают:

IIF(IsNull(SomeFieldOrControl),ConditionIsTrueSoDoThis,ConditionIsFalseSoDoThis) 

Другой способ объяснить это с такой пример, где мы будем показывать строку нулевой длины, если cmbo_b равна нулю:

Это покажет строку нулевой длины, если cbmo_b равна нулю:

IIF(IsNull([Forms]![frm_a]![cmbo_b]),"",[Forms]![frm_a]![cmbo_b]) 

Я думаю, вам нужно переключить функцию IsNull в Nz (нуль к нулю) функции.

Для второй части, когда дело доходит до оценки состояния двух частей, вам обычно нужно окружать его скобкой, что-то вроде этого. Я действительно не думаю, что это сработает, но это единственное, что я могу придумать, если вы настаиваете на попытке оценить сразу две разные возможности. Я установил это, чтобы показать 0, если условие оценивается как true. Я действительно не уверен, что вы хотите отобразить, если утверждение истинно, так как вы не использовали функцию IIF правильно для начала.

IIF(Nz([Forms]![frm_a]![cmbo_b],0)(<2 or >3),0,[Forms]![frm_a]![cmbo_b]) 

Я оставил интересно, почему вы не просто проверить, если условие = 3, так что, по-видимому, что вы оцениваете для в кружным путем. Только что показать, если условие оказывается истинным, я до сих пор не уверен, так как ваш код не дает никаких подсказок:

IIF(Nz([Forms]![frm_a]![cmbo_b],0)=3,0,[Forms]![frm_a]![cmbo_b]) 

Для окончательного слова, это может быть вопросом личных предпочтений, но Я стараюсь держаться подальше от ссылок на элементы управления на других формах, если только вокруг этого нет. Подобный код имеет тенденцию быть очень хрупким, поскольку переименование формы или элемента управления или просто создание формы подформы приведет к сбою и/или ошибке вашего кода. Дело не в том, что это совершенно неправильно, просто я пытаюсь придерживаться кода, который легко читать и как можно более удобно.

Что я часто делаю это создать общественные функции на формах или подформ, а затем вызвать их, используя такие заявления:

Call Forms("frm_a").MyPublicFunctionName() 

или

Call Me.Parent.MyPublicFunctionName() 'Call function on main form from subform 

или

Call Me.subform1.Form.MyPublicFunctionName() 'Call function on subform 

Один раз опять же, я думаю, это может быть только вопросом личных предпочтений. Такие публичные функции трудно отлаживать, потому что, если в MyPublicFunctionName произошла какая-либо ошибка, ваш код остановится на вышеуказанной строке, и вы не узнаете, какая строка действительно вызывает проблему.

Смежные вопросы