【问题标题】:Query Using Input From A Form with A Checkbox使用带有复选框的表单输入进行查询
【发布时间】:2019-02-14 17:16:25
【问题描述】:

提前感谢大家的时间和关注。

我正在为我的工作做一个非常简单的数据库,它太大而无法放入我们通常在这里使用的 excel 电子表格中。我提前道歉,因为我对访问的了解非常有限,但必须弄清楚这一点。

我有大约 1,150,000 条记录,需要能够按以下条件进行搜索:部件号 (txtPK)、步骤 (txtStep)、跳过百分比 (txtPer) 和瓶颈? (chkARD); ARD 在数据库中为“Y”或“N”。

此代码仅显示 Y 或仅显示 N:

IIf([Forms]![Skips_Form]![chkARD],"Y", "N")

但是,当我尝试调整它以显示“*”而不是“N”时,它不返回任何记录,而不是所有记录。

IIf([Forms]![Skips_Form]![chkARD],"Y", "*")

我希望在选中复选框时仅显示带有“Y”的记录, 并在未选中时显示所有记录。

【问题讨论】:

    标签: ms-access-2007


    【解决方案1】:

    假设您在查询的where 子句中使用这些iif 语句,并与= 运算符一起使用 - 类似于:

    select *
    from YourTable
    where ARD = IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
    

    如果确实如此,那么当iif语句的else参数返回时,SQL语句变为:

    select *
    from YourTable
    where ARD = "*"
    

    因此,这将返回 ARD 字段的文字值为 "*" 的记录。

    相反,您应该使用like 运算符,这将允许诸如星号之类的通配符匹配任何值,例如:

    select *
    from YourTable
    where ARD like IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
    

    或者,使用一些简单的布尔逻辑,例如:

    select *
    from YourTable
    where (not [Forms]![Skips_Form]![chkARD]) or ARD="Y"
    

    【讨论】:

    • 非常感谢;令人惊讶的是,仅在该语句之前添加 Like 就可以使一切正常运行。经过2天的努力。我很感激。我相信这对您来说很容易,我感谢您抽出宝贵时间帮助我了解如何解决它,以及为什么它会有所作为。
    • 已发布完整的工作代码;再次感谢您
    • @Azketta 不客气!感谢您对我的时间的赞赏。
    【解决方案2】:

    完整的工作 SQL 代码 谢谢李麦克

    SELECT Data.POS, Data.PK, Data.[Step], Data.[ARD?], Skips.Skips, Skips.Total, 
    Skips.[Skips %], Data.[OPERATION DESCRIPTION], Data.CHARGE_NUMBER, Data.[MDM_PN],
    Data.[PlanVer], Data.[PlanRev], Data.[Task_Desc], Data.[Prod Version]
    
    FROM Data INNER JOIN Skips ON Data.POS = Skips.POS
    
    WHERE 
    (((Data.POS) Like "*" & [Forms]![Skips_Form]![txtPK] & "*") 
    AND ((Data.[Step]) Like "*" & [Forms]![Skips_Form]![txtStep] & "*") 
    AND ((Data.[ARD?]) Like IIf([Forms]![Skips_Form]![chkARD],"Y","*")) 
    AND ((Skips.[Skips %])>=[Forms]![Skips_Form]![txtPer])) 
    
    OR 
    (((Data.POS) Like "*" & [Forms]![Skips_Form]![txtPK] & "*") 
    AND ((Data.[Step]) Like "*" & [Forms]![Skips_Form]![txtStep] & "*") 
    AND ((Data.[ARD?]) Like IIf([Forms]![Skips_Form]![chkARD],"Y","*")))
    
    ORDER BY Skips.[Skips %];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2013-11-01
      • 2016-11-22
      • 2017-06-25
      • 1970-01-01
      • 2020-10-28
      相关资源
      最近更新 更多