使用带有复选框的表单中的输入进行查询

时间:2019-02-14 17:16:26

标签: ms-access-2007

提前感谢大家,感谢您的时间和精力。

我正在为我的工作做一个非常简单的数据库,该数据库太大而无法放入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”的记录, 并在未选中时显示所有记录。

2 个答案:

答案 0 :(得分:1)

大概是在查询的iif子句中使用这些where语句,并结合=运算符-类似于:

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"

答案 1 :(得分:0)

完整的工作SQL代码 谢谢Lee Mac

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 %];