2014-03-26 43 views
2

我有一個名爲「專業」欄裏面有關於醫生/護士/醫師數據,使得Doctor1可能;在此領域的「小兒外科醫生神經病學」。基本上只有一些有關醫生的信息將填補這個領域。我在表單上有四個搜索框,用戶可以搜索特定的醫療保健專業人員。有人可能想要搜索「兒科」,「外科醫生」和「神經病學」。我有這樣的設置,現在使用SQL和我的代碼如下所示:如何查詢多個搜索框中的一個領域,可能是空白

AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise1] & "*" 
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise2] & "*" 
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise3] & "*" 
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise4] & "*" 

注意我是如何使用一樣,因爲用戶可能想要查找的單詞「外科雜誌」,這將返回包含手術和外科醫生的記錄。如果一個記錄在他們的專業領域有兒科,外科醫生和神經病學的話,這很有效。然而,我需要這個查詢來返回Doctor1,他只有外科醫生在他的專業領域和Doctor2在他的專業領域有神經病學。

如果我使用或代替,它會返回數據庫中的所有記錄。我相信我必須使用Nz()函數,但我不確定如何。

回答

1

您可以使用Nz將空文本框的值轉換爲永不匹配存儲在dbo_Contact.Expertise中的任何值的字符串。例如,說「BOGUS」永遠不會匹配。然後Like '*BOGUS*'也將永遠不會匹配。

所以,你可以OR那些Nz條件在一起。任何非空文本框將選擇匹配的行。空文本框不會選擇任何文本框。 (並且查詢結果集是由這些條件中的每一個選擇的行的組合)。

SELECT c.* 
FROM dbo_Contact AS c 
WHERE 
    c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise1, 'BOGUS') & '*' 
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise2, 'BOGUS') & '*' 
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise3, 'BOGUS') & '*' 
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise4, 'BOGUS') & '*' 
+0

空字段上的優秀點。我仍然認爲他有一個布爾問題。事實上,他在約束開始時具有「AND」,並表示當他將其改爲「OR」時,他獲得了整個數據庫,這使我確信這一點。但是,如果沒有Nz方法,這不是一個完整的答案。 +1給你! – paqogomez

+0

是的,那個'AND'在開始的時候讓我懷疑還有其他條件我們還沒有看到。但我不知道該怎麼做,所以決定給他們一個完整的WHERE條款以適應需要。 – HansUp

+0

我同意,你處理得很好。你值得在這一個答案檢查。 OP是新用戶的地方,我想確定他爲什麼能得到他的結果。 – paqogomez

1

我認爲你的問題只是在你的布爾邏輯的組織。

您的查詢工作,現在的方式,如果存在於所有4場dbo_Contact.Expertise你只會得到一個結果。

不過你想要什麼,如果存在於場1或場或場3或字段4 Expertise是。

爲什麼你正在獲得整個數據庫的原因是因爲你有這個組你這裏不包括上述的幾個標準。它的意思是「所有這些東西以上」或「檢查這個專業知識」

相反,你需要包括它作爲一個組,並將其與上述其他人。

AND ((dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise1] & "*" 
    OR (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise2] & "*" 
    OR (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise3] & "*" 
    OR (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise4] & "*") 

請注意我是如何將所有的約束條件都放在parens中,並將它們與前面的約束條件「結合」在一起的。

+0

謝謝你的回覆我明天會檢查這個第一件事!非常感激。 –

+0

@ user1360011很高興你能解決問題! – paqogomez