2016-09-30 35 views
0

我有一個MS訪問表單,其中包含用於運行查詢的可選條件。用戶將選擇一個複選框並輸入一個值,然後根據所選字段和輸入運行查詢。我特別針對一個字段的問題是表存儲NULL值。用於查詢的標準是這樣的:使用OR運算符對於IIF語句中的空值

IIf([Checkbox]=-1,[Data in Form],([Field]Like "*" Or [Field]Is Null)) 

如果我在查詢中使用此代碼作爲標準領域,只有當值形式,並選中該複選框工作。如果我將該代碼用作表達式,則在複選框未選中時返回空值,但在選中複選框並輸入值時返回所有記錄。如果我使用Like "*" or Is Null作爲標準,它將返回所有記錄,爲什麼它不作爲IIF聲明的一部分工作?

+1

'[Field] Like「*」或[Field]是否與'TRUE'不同? – onedaywhen

+0

就像它說的那樣,你的條件永遠是真的(它有一個值,或者是null,不管它是真的) – CyberClaw

+0

它有點像過濾器,如果複選框是'TRUE'使用數據用戶提交來指定結果返回,如果它的'FALSE'返回所有包含NULL值的值 –

回答

0

發現很難跟隨(大量的測試數據和預期的結果總是受歡迎的),但我想是這樣的:

標準邏輯重寫規則

IF A THEN B 

相當於

(NOT A OR B) 

所以,你的搜索條件可以是這樣的:

WHERE (checkbox1 = FALSE OR field1 = input1 OR field1 IS NULL) 
    AND (checkbox2 = FALSE OR field2 = input2 OR field2 IS NULL) 
    AND (checkbox3 = FALSE OR field3 = input3 OR field3 IS NULL) 

UPDATE

更多的東西一樣:

WHERE NameColumn = NameInput 
     AND (SearchEditioncheckbox = FALSE 
      OR EditionColumn = EditionInput 
      OR EditionColumn IS NULL) 

進一步更新

可能是:

WHERE NameColumn = NameInput 
     AND (SearchEditioncheckbox = FALSE 
      OR EditionColumn = EditionInput) 

或可能:

WHERE NameColumn = NameInput 
     AND (SearchEditioncheckbox = FALSE 
      OR EditionColumn = EditionInput 
      OR (EditionColumn IS NULL AND EditionInput IS NULL) 
+0

是的,這應該在理論上工作,但可悲的是它沒有。也試過這種方式 下面是我想要實現的一個示例 如果用戶在庫中搜索圖書,並且可以按名稱和版本進行搜索。他們應該能夠通過名稱進行搜索,只留下版本複選框和字段空白,它應該返回所有的值,包括NULL,但是如果他們指定了版本,那麼它應該只返回基於名稱和版本的值 –

+0

使用複選框的目的是什麼?如果您輸入一個值,則將檢索包含該值的所有記錄。如果你沒有輸入一個值,所有的記錄將被檢索(包括那些具有NULL值的記錄)...... – Rene

+0

@Rene雖然你是正確的,但複選框沒有提供任何附加功能,原理是相同的即「如果複選框被選中」與「如果文本框爲空」相同。這個問題確實是捕獲所有值,包括NULL或輸入的值。 –