2010-08-06 96 views
0

如果用戶輸入了所有的域,它就會工作。我需要一個結合了所有sql命令的代碼。用戶可以輸入一個或兩個字段或全部三個字段。我需要用一個字段查詢或兩個feild查詢或三個feilds查詢來搜索數據庫。基於條件的SQL查詢

我已經試過在哪裏幫助是表&搜索測試是表格&合同號,用戶名&在數據庫和表單中的日期。

,其中幫助(表).cont_no(場)等於或不等於搜索測試(窗體名稱).cont_no(文本框字段)

SELECT * 
FROM help 
WHERE (forms ! [search-test] ! cont_no = '' 
      OR help.cont_no = forms ! [search-test] ! cont_no) 
     AND (forms ! [search-test] ! username = '' 
       OR help.username = forms ! [search-test] ! username) 
     AND (forms ! [search-test] ! cbo_date = '' 
       OR help.DATE = forms ! [search-test] ! cbo_date); 
+0

你的問題不是很清楚,你可以改一下?此外,您可以通過正確縮進(或使用編輯器上方的工具欄)在stackoverflow上格式化代碼 – jeroenh 2010-08-06 07:11:41

+0

結果如何使此代碼無法工作?邏輯看起來是正確的。 – 2010-08-07 02:13:34

回答

0

我想你的意思是你如果記錄字段包含與提供的參數匹配的記錄,則需要包含在結果集中的記錄。如果未提供特定參數,則始終應將相應字段視爲正匹配。

也就是說,如果沒有提供參數,應該返回整個表。

至於解決方案,只是一個猜測(我不是MS Access專家,這是爲MS Access?),但你可以使用iif函數來強制進行匹配嗎?再次,我不確定語法,但底層邏輯應該工作。

您的WHERE子句更改爲

WHERE 

(IIF(forms![search-test]!username is not null, forms![search-test]!username, help.cont_no) = help.cont_no 

AND 

(IIF(forms![search-test]!cont_no is not null, forms![search-test]!cont_no, help.username) = help.username 

AND 

(IIF(forms![search-test]!cbo_date is not null, forms![search-test]!cbo_date, help.dbo_date) = help.dbo_date