首页 > 解决方案 > 在 MS Access 中创建一个查询,如果未提供输入,则返回所有条目;如果提供输入,则返回所选条目

问题描述

我正在尝试创建一个查询,该查询将接受来自表单的输入(来自一组 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")))) 

我可以在选择男性和女性时为这项工作做这项工作,但不幸的是,如果我选择的话,我也无法正常工作。在这种情况下,无论字段中的性别是什么,它都应该只返回所有条目,但它什么也不返回。任何指针将不胜感激!

谢谢!

标签: databasems-access

解决方案


您的代码的问题是,如果选择了最后一个选项,则生成的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"))

推荐阅读