Оператор IIF в Access Query возвращает NULL во всех значениях - PullRequest
0 голосов
/ 14 октября 2019

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

Теперь эта проблема связана с полем (OM / Quota) таблицы (Candidates) и формулой запроса (Merit List Creator). ,Я просто хочу, чтобы он проверил, является ли значение QuotaVal из формы равным нулю (то есть "") или "CIV" (обозначает гражданский), тогда он должен обновить поле, OM / Quota до "OM", иначеследует установить для OM / Quota значение в QuotaVal из формы.

Что я пробовал;

        <Condition>      ,       <Value of OM/Quota if True>    ,    <value of OM/Quota if False>

IIf([Forms]![Generate List]![QuotaVal]="","OM",IIf([Forms]![Generate List]![QuotaVal]="CIV","OM",[Forms]![Generate List]![QuotaVal]))

IIf([Forms]![Generate List]![QuotaVal]=""or"CIV","OM",[Forms]![Generate List]![QuotaVal])

Iff([Forms]![Generate List]![QuotaVal]=(""or"CIV"),[Forms]![Generate List]![QuotaVal])

IIF([Forms]![Generate List]![QuotaVal] is Null OR [Forms]![Generate List]![QuotaVal] = "CIV", "OM", [Forms]![Generate List]![QuotaVal])

IIf(Nz([Forms]![Generate List]![QuotaVal], "CIV") = "CIV", "OM", [Forms]![Generate List]![QuotaVal])

Ни один из них не работал, все они возвращали нулевое (то есть "") значение в поле OM / Quota

Просто чтобы заявить, хотите, чтобы мне было нужно;

Если значение QuotaVal = "Null" ИЛИ "CIV", то OM / Quota = "OM", в противном случае значение OM / Quota = QuotaVal

Выходные данные должны быть такими, что;

Значение OM / Quota должно быть "OM", если QuotaVal = "CIV" OR "" Иначе значение OM / Quota = QuotaVal

Должен ли я сделать отдельное поле дляНулевая формула в запросе?

Что было бы;

iff([Forms]![Generate List]![QuotaVal] is Null, "OM", [Forms]![Generate List]![QuotaVal])

Еще один вопрос, который возник у меня в голове:

Могу ли я невместо этого используйте iff([Forms]![Generate List]![QuotaVal] = Null or "CIV", "OM", [Forms]![Generate List]![QuotaVal])?

Формула в целом должна быть такой:

iff([Forms]![Generate List]![QuotaVal] is Null, "OM", iff([Forms]![Generate List]![QuotaVal] = "CIV","OM", [Forms]![Generate List]![QuotaVal]))

Для тестирования я заменил цикл на и выполнил все вышеприведенные формулы;

Private Sub CreateAllKey_Click()

    QuotaVal.Value = "AR"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AR"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AR"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AR"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AR"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AR"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "AS"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "OM"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "DP"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "FGEI"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Gen-Sci-I"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Gen-Sci-II"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Gen-Sci-III"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Humanities"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Pre-Engg"
    DoCmd.OpenQuery ("Merit List Creator")

    QuotaVal.Value = "RFGEI"
    GroupVal.Value = "Pre-Med"
    DoCmd.OpenQuery ("Merit List Creator")



QuotaVal.Value = Null
GroupVal.Value = Null

MsgBox ("Merit Lists Created!")

End Sub

Он по-прежнему не возвращал значения, отличные от «OM» в поле «OM / Quota», когдаЯ запустил запрос независимо от того, какую формулу я пробовал, приведенную выше. или в решениях до сих пор

Извините, если мой английский был трудным для понимания, я не являюсь ни родным, ни у меня нет другого слова, чтобы вставить их в

1 Ответ

0 голосов
/ 14 октября 2019

Попробуйте:

IIf(Nz([Forms]![Generate List]![QuotaVal], "CIV") = "CIV", "OM", [Forms]![Generate List]![QuotaVal]) 

Nz(expression, "CIV") возвращает "CIV", если выражение равно Null.

Так что это выражение возвращает OM, если [Forms]![Generate List]![QuotaVal] равно Null илиCIV. В противном случае возвращается [Forms]![Generate List]![QuotaVal]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...