Оператор IIF в Access Query возвращает NULL во всех значениях

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

Теперь этот вопрос касается поля (OM/Quota) таблицы (Candidates) и формулы запроса (Merit List Creator). Я просто хочу, чтобы он проверял, является ли значение QuotaVal из формы либо Null (т.е.; ""), либо "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])

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

Просто чтобы уточнить, хочу ли я это;

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

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

Значение OM/Quota должно быть "OM", если QuotaVal = "CIV" ИЛИ "" В противном случае значение OM/Quota = QuotaVal

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

Что было бы;

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», когда я запускал запрос, независимо от того, какую формулу я пробовал, приведенную выше. или в решениях до сих пор

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


person Genious28    schedule 14.10.2019    source источник
comment
Пустая строка не является значением NULL. могут быть просто удалены данные или фактический пробел. NULL — неизвестные или отсутствующие данные. Если столбец был NULL, он вернул бы то же самое для вашего заявления. Вы пытались оценить с помощью IsNull()?   -  person Matt    schedule 14.10.2019
comment
да, в другой формуле, и это работает..   -  person Genious28    schedule 14.10.2019
comment
я не могу использовать ИЛИ CIV ??   -  person Genious28    schedule 14.10.2019
comment
Нужно ли будет делать отдельное поле в запросе?   -  person Genious28    schedule 14.10.2019
comment
что было бы; iff([Forms]![Создать список]![QuotaVal] равно Null, OM, [Forms]![Создать список]![QuotaVal])   -  person Genious28    schedule 14.10.2019
comment
мой вопрос; нельзя ли вместо этого использовать iff([Forms]![Generate List]![QuotaVal] = Null или CIV, OM, [Forms]![Generate List]![QuotaVal])?   -  person Genious28    schedule 14.10.2019
comment
Ты сможешь. Вы просто не можете ввести слово ИЛИ и получить следующее значение. Вам снова понадобится столбец/поле, например: IIF([Forms]![Generate List]![QuotaVal] is Null OR [Forms]![Generate List]![QuotaVal] = "CIV", "OM", [Forms]![Generate List]![QuotaVal])   -  person Matt    schedule 14.10.2019
comment
Что-то может быть не так с циклом ... потому что он только обновляет значения до «OM» в поле OM/Quota, которые имеют либо Null в Quota, либо «CIV».   -  person Genious28    schedule 14.10.2019
comment
stackoverflow.com/questions/58237979/   -  person Genious28    schedule 14.10.2019
comment
Хотя это на VBa, а не на SQL.   -  person Genious28    schedule 14.10.2019


Ответы (1)


Попробуй это:

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]

person Unhandled Exception    schedule 14.10.2019
comment
Я хочу вернуть OM независимо от того, является ли QuotaVal CIV или Null - person Genious28; 14.10.2019
comment
В противном случае должно возвращаться значение QuotaVal, отличное от Null или CIV. - person Genious28; 14.10.2019
comment
Должны сделать так, вы пробовали? - person Unhandled Exception; 14.10.2019
comment
если это CIV или Null, он должен вернуть OM - person Genious28; 14.10.2019
comment
я еще не пробовал это выражение .. я пробовал свое; iif([Forms]![Создать список]![QuotaVal] равно Null, OM, iif([Forms]![Создать список]![QuotaVal] = CIV,OM, [Forms]![Создать список]![QuotaVal] )) - person Genious28; 14.10.2019
comment
и он вернул только те, у которых были значения Null или CIV. - person Genious28; 14.10.2019
comment
Что-то может быть не так с циклом ... потому что он только обновляет значения до «OM» в поле OM/Quota, которые имеют либо Null в Quota, либо «CIV». - person Genious28; 14.10.2019
comment
if it's "CIV" or Null, it should return "OM": Это то, что он делает, как вы и просили. - person Unhandled Exception; 14.10.2019
comment
я также сказал, что он должен возвращать значение QuotaVal, если оно отличается от Null или 'CIV' - person Genious28; 14.10.2019
comment
stackoverflow.com/questions/58237979/ - person Genious28; 14.10.2019
comment
i also said that it should return the value of QuotaVal if it is other than Null or 'CIV': Верно. Он также делает это. - person Unhandled Exception; 14.10.2019
comment
можете подсказать подходящую петлю?. - person Genious28; 14.10.2019
comment
Какая петля? В вашем вопросе нет ничего о петле. Я только что ответил на ваш вопрос. Попробуйте. - person Unhandled Exception; 14.10.2019
comment
он не дает других значений, таких как AS для AS или AR для AR - person Genious28; 14.10.2019
comment
проверьте цикл в другом вопросе ссылки, которую я вам отправил. - person Genious28; 14.10.2019
comment
хотя это в VBa, а не в SQL. - person Genious28; 14.10.2019