1

我有一个查询,除其他外,它返回一个活动标志:活动为真,非活动为假。表单上有一个活动复选框控件。默认为选中。当复选框被选中时,我需要查询只返回 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)

我可以在查看真记录和假记录之间切换。我想在查看真实记录和所有记录之间切换。

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

DoCmd.Requery

感谢任何有用的见解。

4

1 回答 1

0

将控件的值添加为查询内的列:

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

然后将此列的条件设置为In ([Active], false)
如果控件和列匹配或选择了false ,则表达式为 true。false用作所有选择器。
这可能看起来有点神秘,但它也适用于其他数据类型。假设您有一个带有 ID 的组合框,并在查询中添加了 ID = -1, Text ='<all>' 和 UNION。
然后ColumnN: [ControlName], Criteria:IN ([column], -1)的作用类似,可以过滤所有选择或 -1。

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

于 2013-07-21T22:12:16.080 回答