Создание запроса в MS Access, который возвращает все записи, если ввод не введен, или выбранные записи, если ввод предоставлен - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать запрос, который будет принимать входные данные из формы (из набора из 3 переключателей, один для "мужского", один для "женского" и один для "любого") и возвращать все записиуказанный вход.

Я немного новичок в MS Access, поэтому извиняюсь, если это супер базовый вопрос.Я много смотрел в Интернете, чтобы найти решение, но не могу найти подходящее!

У меня есть такой запрос:

   IIf([Forms]![AgeRangeQueryForm]![GenderOptionGroup]. 
   [Value]=1,"M",IIf([Forms]![AgeRangeQueryForm]![GenderOptionGroup]. 
   [Value]=2,"F",IIf([Forms]![AgeRangeQueryForm]![GenderOptionGroup]. 
   [Value]=3,([Child Details].[Gender])="M" Or ([Child Details]. 
   [Gender])="F")))

Если это помогает коду SQLдля запроса это:

   WHERE ((([Child Details].Gender)=IIf([Forms]![AgeRangeQueryForm]! 
    [GenderOptionGroup].[Value]=1,"M",IIf([Forms]![AgeRangeQueryForm]! 
    [GenderOptionGroup].[Value]=2,"F",IIf([Forms]![AgeRangeQueryForm]! 
    [GenderOptionGroup].[Value]=3,([Child Details].[Gender])="M" Or ([Child 
    Details].[Gender])="F")))) 

Я могу сделать эту работу, когда выбран Мужской и Женский, но, к сожалению, я не могу заставить его работать, если я выберу либо.В этом случае он должен просто возвращать все записи независимо от того, какой пол в поле, но он просто ничего не возвращает.Любые указатели будут оценены!

Спасибо!

1 Ответ

0 голосов
/ 03 января 2019

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

where [Child Details].Gender = ([Child Details].[Gender]="M" or [Child Details].[Gender]="F")

И поскольку [Child Details].Gender является строковым значением, оно никогда не будет равнологическое значение, возвращаемое выражением в скобках.


Существует несколько способов достичь этого: один из возможных методов - использовать комбинацию оператора like и choose функция:

where 
    [child details].gender like 
    choose([Forms]![AgeRangeQueryForm]![GenderOptionGroup],"M","F","[MF]")

В качестве альтернативы, вы можете использовать функцию switch аналогичным образом:

where 
    [child details].gender like 
    switch
    (
        [Forms]![AgeRangeQueryForm]![GenderOptionGroup]=1,"M",
        [Forms]![AgeRangeQueryForm]![GenderOptionGroup]=2,"F",
        [Forms]![AgeRangeQueryForm]![GenderOptionGroup]=3,"[MF]"
    )

Или простоиспользуя логическую логику:

where 
([Forms]![AgeRangeQueryForm]![GenderOptionGroup] in (1,3) and [child details].gender = "M") or
([Forms]![AgeRangeQueryForm]![GenderOptionGroup] in (2,3) and [child details].gender = "F")

Или, если вы не хотите ограничивать результаты, возвращаемые при выборе третьего параметра, перед всеми вышеупомянутыми фильтрами добавьте:

([Forms]![AgeRangeQueryForm]![GenderOptionGroup] = 3) or

Например:

where 
    ([Forms]![AgeRangeQueryForm]![GenderOptionGroup] = 3) or
    ([child details].gender = choose([Forms]![AgeRangeQueryForm]![GenderOptionGroup],"M","F"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...