使用来自带有复选框的表单的输入进行查询
Query Using Input From A Form with A Checkbox
提前感谢大家的时间和关注。
我正在为我的工作做一个非常简单的数据库,它太大而不适合我们通常在这里使用的 excel 电子表格。我提前道歉,因为我对访问的了解非常有限,但必须弄清楚。
我有大约 1,150,000 条记录,需要能够按以下条件进行搜索:部件号 (txtPK)、步骤 (txtStep)、跳过百分比 (txtPer) 和瓶颈? (chkARD); ARD 在数据库中为 "Y" 或 "N".
此代码用于仅显示 Y 或仅显示 N:
IIf([Forms]![Skips_Form]![chkARD],"Y", "N")
但是,当我尝试将其调整为显示“*”而不是 "N" 时,它 returns 没有记录,而不是所有记录。
IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
我的愿望是在选中复选框时仅显示带有 "Y" 的记录,
并在未选中时显示所有记录。
大概您在查询的 where
子句中使用了这些 iif
语句,并与 =
运算符结合使用 - 例如:
select *
from YourTable
where ARD = IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
如果确实如此,那么,当 iif
语句的 else 参数被 returned 时,SQL语句变为:
select *
from YourTable
where ARD = "*"
因此,这将 return 条 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"
完成工作SQL代码
谢谢李 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 %];
提前感谢大家的时间和关注。
我正在为我的工作做一个非常简单的数据库,它太大而不适合我们通常在这里使用的 excel 电子表格。我提前道歉,因为我对访问的了解非常有限,但必须弄清楚。
我有大约 1,150,000 条记录,需要能够按以下条件进行搜索:部件号 (txtPK)、步骤 (txtStep)、跳过百分比 (txtPer) 和瓶颈? (chkARD); ARD 在数据库中为 "Y" 或 "N".
此代码用于仅显示 Y 或仅显示 N:
IIf([Forms]![Skips_Form]![chkARD],"Y", "N")
但是,当我尝试将其调整为显示“*”而不是 "N" 时,它 returns 没有记录,而不是所有记录。
IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
我的愿望是在选中复选框时仅显示带有 "Y" 的记录, 并在未选中时显示所有记录。
大概您在查询的 where
子句中使用了这些 iif
语句,并与 =
运算符结合使用 - 例如:
select *
from YourTable
where ARD = IIf([Forms]![Skips_Form]![chkARD],"Y", "*")
如果确实如此,那么,当 iif
语句的 else 参数被 returned 时,SQL语句变为:
select *
from YourTable
where ARD = "*"
因此,这将 return 条 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"
完成工作SQL代码 谢谢李 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 %];