2014-09-19 128 views
1

我有一個從單個表中生成的查詢。使用表單來爲我的查詢設置標準我遇到了空值問題。我會在下面簡化我的問題。訪問查詢以包含所有值,包括空值

[許可證] 的表稱爲許可證。有一個字段我想過濾,稱爲狀態。在「狀態」字段中,有以下條目:空值,「已完成」和「已取消」。本質上,空值表示許可證狀態已打開。

在表單中: [FormQuery] 該表單稱爲FormQuery,並具有允許用戶爲其查詢選擇條件的複選框。該表格有四個複選框,名稱分別爲:全部,已完成,已打開,已取消。

查詢中:通過[Permits]過濾![Status] 查詢中有許多字段。與性判據的唯一字段是輸入(Permits.Status)。以下標準:

In (IIf([Forms]![FormQuery]![Completed]=True,"COMPLETED",""), 
    IIf([Forms]![FormQuery]![Cancelled]=True,"Cancelled",""), 
    IIf([Forms]![FormQuery]![All]=True,[Permits]![Status],"")) 

據我瞭解IN(...)是設置的標準的列表。標準取決於形式檢查,如在[Forms]![FormQuery]![Completed]=true部分中所見。如果該框被選中,則傳遞一個字符串,否則爲「」空值。所以當剛剛完成檢查時,該列表看起來像In (completed)

表單工作。當我選中「完成」複選框時,查詢將顯示全部完成。它與取消和全部複選框的工作方式類似。一個問題是,在最後一行中找到的代碼,特別是[permits]![status]部分的代碼只會引出填充的條目,並且空值被遺漏。

我將如何搜索空值以及如何在所有查詢中包含空值?

任何幫助將不勝感激。

+0

感謝您的參考。我覺得我所做的實質上是參數查詢並將輸入限制在表單上找到的內容。我是否正確地認爲? 此外,如果我輸入代碼: – Dre 2014-09-19 21:12:52

+0

另外,如果我嘗試: IIf([Forms]![FormQuery]![打開] =真,爲空,「」) 我得到了:這個表達式輸入錯誤,或者它太複雜,無法評估。例如,數字表達式可能包含太多複雜的元素。嘗試通過將部分表達式分配給變量來簡化表達式。 當刪除所有條件並開始新鮮時,我可以輸入條件爲空並獲取所有空值 – Dre 2014-09-19 21:20:16

回答

2

嘗試使用通配符代替:

In (IIf([Forms]![FormQuery]![Completed]=True,"COMPLETED",""), 
    IIf([Forms]![FormQuery]![Cancelled]=True,"Cancelled",""), 
    IIf([Forms]![FormQuery]![All]=True,[Permits]![Status],"*")) 

您可以測試這個...只是把這個在您的查詢條件字段:

IIf(True,"*","") 

運行它與假,而不是真的...實驗。

我建議你改變你的方法。使用參數查詢但避免IN()語句。一般如何在http://accessmvp.com/thedbguy/articles/parameterquerybasics.html

或者,使用VBA。一般如何在http://answers.microsoft.com/en-us/office/forum/office_2007-access/checkbox-filter-form-for-query/ab65c120-6356-e011-8dfc-68b599b31bf5

任何一個更典型,我相信更容易麻煩拍攝和維護。

+0

再次感謝您堅持使用我。我嘗試過使用false和true,我使用了「*」,如*,Null,Null,「」,但沒有找到成功。我也玩過一個沒有In的基本IIF代碼,就像你所建議的那樣,但是在複選框返回一個真實值的情況下仍然不會出現空值。 我想我可以做一個參數查詢,並告訴人們打開許可證來輸入「是空的」它只是看起來或像窗體一樣好用。 – Dre 2014-09-19 21:41:34

+0

一個人如何去查找參數查詢中的空值?如果您在對話框中輸入Is Null,查詢將不返回任何記錄。是否將'Null'這個短語變成了一個字符串,並且不允許作爲一個命令來操作? – Dre 2014-09-19 21:46:16

+0

是的,我明白了。這是空值的方式。因此,在查詢中創建一個字段:'Status_filter:IIf(IsNull([Status]),「open」,[Status])'。就此運行你的過濾器。 – Smandoli 2014-09-19 22:52:28