Проблема с вашим кодом заключается в том, что если выбран последний вариант, результирующее предложение 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"))