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

问题描述 投票:1回答:2

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

我正在为我的工作做一个非常简单的数据库,这个数据库太大了,无法放入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
2个回答
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"

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 %];
© www.soinside.com 2019 - 2024. All rights reserved.