2016-11-16 95 views
1

我有一個表訪問(簡化)字段的性別,名字,姓氏和電話號碼。在空白字段的Access中的多字段搜索

Sex  First Last  Phone 
F  Alice Smith 
M  Bob    111-111-1111 
F    Smithe 111-111-1112 
M  Charlie Smith  
F  Eve  Drop  111-111-1113 

我創建了一個形式的查詢搜索的記錄一起,使用

Is Null Or Like "*" & [Forms]![Search]![Criteria] & "*" 

,其中搜索是我的表單的名稱,和標準的標準是個人的名字我的表單上的條目。

現在,如果我搜索性別F和姓氏史密斯,並將名字和姓氏字段留空,我希望能夠查看「Alice Smith」和「Smithe」的記錄。但是,我只拿到了「愛麗絲史密斯」的紀錄。此外,如果我搜索性別F和電話號碼111,我會得到Alice,Smithe和Eve的結果。同樣,如果我只是單獨搜索電話號碼,我將獲得全部五條記錄。

我假設我在這裏做錯了什麼,但我不知道它是什麼。根據or的條件邏輯,結果應該是Null或111(對其他字段也是類似的),所以我猜它的行爲和預期的一樣。然而,我嘗試過xor,並且我得到了相同的結果(即使它以我認爲的方式工作,它看起來很糟糕,因爲空白條目將被解釋爲null而不是「搜索每個條目」。我試過使用iif,它應該是正確的方法來做到這一點,但它放置在條件字段時似乎不起作用。我在這裏丟失了什麼?

回答

1

Null是特殊值(含義not-known ),它是同一個空白文本字段,其值爲""(空字符串)。

所以調整自己的標準接受該值""

+0

不喜歡*「&[Forms]![Search]![Criteria]&」*「'cover'」「''? 無論如何,在用'「」替換'Null'後,我仍然有同樣的問題。 – tempguest

+0

Scratch that: 例如,如果我在姓氏字段中搜索「Smith」,我現在將擁有Alice和Charlie的記錄,但是我不會有Smith的記錄,這是我的問題之前有過。 – tempguest

1

對於多字段搜索使用標準這樣的每個字段:

WHERE  
([Sex] Like "*" & [Forms]![Search]![CriteriaSex] & "*" 
    OR Nz([Forms]![Search]![CriteriaSex],"")="") 
AND ([First] Like "*" & [Forms]![Search]![CriteriaFirst] & "*" 
    OR Nz([Forms]![Search]![CriteriaLast],"")="") 
AND ([Last] Like "*" & [Forms]![Search]![CriteriaLast] & "*" 
    OR Nz([Forms]![Search]![CriteriaLast],"")="") 
AND ([Phone] Like "*" & [Forms]![Search]![CriteriaPhone] & "*" 
    OR Nz([Forms]![Search]![CriteriaPhone],"")="") 

在這種情況下每一個條件將是TRUE,如果相應的標準字段爲空。

+0

什麼是MySearchField1和MySearchField2? (我很新的訪問。我一直在使用'Criteria'作爲字段名稱的佔位符,所以我沒有看到上面兩個不同於'Criteria'。 這也意味着如果我有八個我需要7'和'? – tempguest

+0

我編輯了答案,現在應該更清楚了。'MySearchField *'是表字段名稱,'Criteria *' - 文本框控件名稱 –

+0

我會稍微嘗試一下看看,要清楚,我會把它放在SQL視圖中嗎?我一直在使用設計視圖,但SQL視圖看起來真的很簡單 – tempguest

0

構建此查詢的另一種方法是根據填充哪些字段來構建字符串。

q = "SELECT * FROM table " 
w = "" 
IF(nz([Forms]![Search]![Criteria1],"")<> "") THEN 
    w = "WHERE [table]![field] like '*" & [Forms]![Search]![Criteria1] & "*'" 
END IF 
IF(nz([Forms]![Search]![Criteria2],"")<> "") THEN 
    IF (w="") THEN 
      w=" WHERE " 
    ELSE 
      w=w & " AND " 
    END 
    w = w & " [table]![field] like '*" & [Forms]![Search]![Criteria2] & "*'" 
END IF 
IF(nz([Forms]![Search]![Criteria3],"")<> "") THEN 
    IF (w="") THEN 
      w=" WHERE " 
    ELSE 
      w=w & " AND " 
    END 
    w = w & " [table]![field] like '*" & [Forms]![Search]![Criteria3] & "*'" 
END IF 
q = q & w