2012-02-16 38 views
4

我試圖在MS訪問查詢中運行以下條件。基本上我想要做的是:使用OR運算符不工作的IIF查詢

  • 如果複選框= True,那麼所有記錄,包括那些有空白或空字段顯示(在我的窗體的組合框的默認值combo9]爲「*」)
  • 如果複選框=匹配Combo9值是假,則僅記錄顯示

我目前的表現不給任何錯誤,也不會產生任何結果!表達式的TRUE和FALSE的一半可以獨立工作,但在組合到iif表達式時不起作用。

Like IIf([Forms]![F_leg_reg]![Check25]=True,Like [Forms]![F_leg_reg]![Combo9] Or "" Or Is Null,Like [Forms]![F_leg_reg]![Combo9]) 

有人能告訴我我在做什麼錯嗎?提前致謝。

回答

7

不知道你需要這麼多likes,您使用的返回值的or邏輯運算符這沒有任何意義

IIF (condition, value-if-true, value-if-false) 

所以..

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 'foobar') 

如果任一條件遇到IIF將返回'酒吧'否則它將返回'foobar'

如果你願意,你可以嵌套它

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 
     IIF ([forms]![foo].[text1] = "2" AND [forms]![foo].[text2] = "2", 'foobar', null) 
    ) 

如果任一條件滿足IIF將返回「酒吧」否則我們檢查,看看是否text1text2是「2」,如果是的話返回「foobar的」否則我們返回null

希望這有助於

1

您正在重複IIf()表達式中的關鍵字Like。這是行不通的。你可以修復IIf(),但我會用一種不同的方法......更適合我的大腦。

這將在複選框被選中時返回所有行,但在未選中時不會返回任何行。

SELECT a_field, another_field, field_2_search 
FROM YourTable 
WHERE [Forms]![F_leg_reg]![Check25]=True; 

當複選框未選中時,將行限制爲那些field_2_search值包含組合值的行。

SELECT a_field, another_field, field_2_search 
FROM YourTable 
WHERE 
    [Forms]![F_leg_reg]![Check25]=False 
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*"; 

但是你只想要一個查詢,而不是兩個,所以把那些WHERE子句與OR結合起來。

SELECT a_field, another_field, field_2_search 
FROM YourTable 
WHERE 
    [Forms]![F_leg_reg]![Check25]=True 
    OR (
    [Forms]![F_leg_reg]![Check25]=False 
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*" 
    ); 
+0

感謝您的答覆。我很努力地看到field_2_search在哪裏進入。我試着通過創建一個新的文本框名稱field_2_search,但沒有運氣 – Reigncloud 2012-02-16 12:10:37

+0

OK對不起,我現在看到field_2_search複製我的查詢該代碼儘可能地在我的表,我試圖尋找 – Reigncloud 2012-02-16 12:18:30

+0

嗯領域。包含在SELECT列表中的field_2_search會更清晰。我現在就去做;抱歉,幫助你太遲了。 – HansUp 2012-02-16 13:33:05

1

我很晚纔到這個討論中,但我發現這個職位時,我遇到了同樣的問題。我已經解決了它,並希望分享。

問題是您的Iif語句的位置。由於您使用的是Access,因此您可能將Iif語句放置在查詢設計視圖的Criteria行中。刪除那個。相反,您需要在查詢中將Iif語句設置爲它自己的字段。

你還需要非常小心你用NULL和「*」使用oporators。語法非常敏感。

在一個新的查詢字段中輸入:

IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box]) 

然後設置標準對該領域是<>假。

的SQL是這樣的:

SELECT [Field1], [Field2], etc 
FROM Table1 
WHERE (IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box])<>False); 

希望這有助於!對不起,聚會太晚了!