2013-07-21 59 views
1

我有一个查询,其中包括一个Active标志:true表示Active,false表示未激活。表单上有一个活动复选框控件。缺省值是Checked。当复选框被选中时,我需要查询返回只有Active = true的记录。当复选框未选中时,我需要返回所有记录。MS Access查询在具有true和所有记录的记录之间切换

我一直在试图设置活动领域的标准,在这样的查询:

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记录之间切换。我想在查看True记录和所有记录之间切换。

另一件事是当表单打开时查询不返回任何内容。我认为[Forms]![myForm]![chkActive]的值在需要查询来填充表单时不存在。但是,查询似乎在从chkActive的OnClick事件中调用它时访问[Forms]![myForm]![chkActive]的罚款。它被称为:

DoCmd.Requery 

任何有用的见解是赞赏。

回答

0

添加控件的值作为查询中的列:

FilterControl1: [Forms]![myForm]![chkActive] 

,然后设置此列的标准In ([Active], false)
如果控件和列匹配或者选择了false,则表达式为true。 false作为全部选择器。
这可能看起来有点隐密,但对其他数据类型也适用。假设你有一个带有ID的组合框,并在查询中添加了ID = -1,Text ='< all>'和一个UNION。
然后ColumnN: [ControlName],标准:IN ([column], -1)的工作原理与过滤选择或-1都相同。

我也可以确认过滤器在加载时不起作用。我想这只是Access。 Me.Requery在似乎工作正常。

+0

谢谢 - 两者都很好! –