2013-07-21 90 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

謝謝 - 兩者都很好! –