我有一个查询,其中返回一个Active标志:true表示Active,false表示不活动。表单上有一个Active复选框控件。默认为已选中。选中该复选框后,我需要查询仅返回Active = true的记录。如果未选中该复选框,则需要返回所有记录。
我一直在尝试在查询中设置Active字段的条件,如下所示:
IIf([Forms]![myForm]![chkActive]=True,True,)
IIf([Forms]![myForm]![chkActive]=True,True, True or False)
IIf([Forms]![myForm]![chkActive]=True,True,([MyQuery]![Active])=True Or ([MyQuery]![Active])=False)
原因是如果选中了chkActive,则IIf返回True,否则返回一些我想要所有记录的指示。 Checked部分似乎工作正常。如果我使用类似的东西:
IIf([Forms]![myForm]![chkActive]=True,True,False)
我可以在看到True记录和False记录之间切换。我想在看到真实记录和所有记录之间切换。
另一个原因是表单打开时查询不返回任何内容。我认为在填充表单需要查询时,[Forms]![myForm]![chkActive]
的值不存在。但是,当从chkActive的[Forms]![myForm]![chkActive]
事件调用时,查询似乎可以访问OnClick
。它被调用:
DoCmd.Requery
感谢任何有用的见解。
答案 0 :(得分:0)
将控件的值添加为查询中的列:
FilterControl1: [Forms]![myForm]![chkActive]
然后将此列的条件设置为In ([Active], false)
如果控件和列匹配或者选择了 false ,则表达式为true。 false 用作 all 选择器
这可能看起来有点密码,但它也适用于其他数据类型。假设您有一个带ID的组合框并添加了ID = -1,Text ='< all>'在查询中使用UNION
然后ColumnN: [ControlName]
,条件:IN ([column], -1)
同样可以过滤选择,也可以过滤-1。
我还可以确认过滤器在加载时不起作用。我猜这只是Access。 Me.Requery
中的Form_Load
似乎正常。