MS Access查询以在具有true和所有记录的记录之间切换

时间:2013-07-21 20:54:29

标签: ms-access

我有一个查询,其中返回一个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

感谢任何有用的见解。

1 个答案:

答案 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似乎正常。