2013-10-02 2 views
3

4 개의 텍스트 필드, 이름, 성, 전화 번호 및 프로모션 코드를 기반으로 내 액세스 데이터베이스를 검색하기위한 검색 양식을 디자인하고 있습니다. 모든 필드가 비어있는 경우 검색은 모든 레코드를 반환해야합니다쿼리 결과에 null 값이있는 레코드가 표시되지 않습니다.

Like "*" & [Forms]![SearchF]![txtFirstName] & "*" 
Like "*" & [Forms]![SearchF]![txtSurnameName] & "*" 
Like "*" & [Forms]![SearchF]![txtPhone] & "*" 
Like "*" & [Forms]![SearchF]![txtPromo] & "*" 

: 같은

쿼리는 본다. 텍스트 상자에 일부 값을 입력하면 결과가 일치 항목으로 좁혀집니다.

거의 정상적으로 작동하지만 특정 필드에 값이없는 경우 문제가 발생합니다. 예를 들어 프로모션 코드가없는 사람은 비워 두어도 기록을 항상 건너 뛸 수 있습니다. 나는 액세스 쿼리가 빈 필드를 좋아하지 않는다고 가정합니다.

이 문제를 해결하는 가장 쉬운 방법은 무엇입니까?

답변

5

텍스트 상자가 약간 혼란 스러울 수 있습니다. 왜냐하면이 문제는 더 기본적인 문제이기 때문입니다. some_text어떤 NULL이 아닌 값, 심지어 빈 문자열을 포함하는 경우 그것은 행을 반환

SELECT f.id, f.some_text 
FROM tblFoo AS f 
WHERE f.some_text Like "*"; 

...이 쿼리를 고려하십시오. 그러나 some_text이 Null 인 행은 반환되지 않습니다.

이유는 Like의 Null이 True로 평가되지 않기 때문입니다. ... 직접 실행 창에서 Like 비교를 위해

? "foo" Like "*" 
True 
? Null Like "*" 
Null 

이 예제를 고려, 난 당신이 타겟 필드는 텍스트 상자의 텍스트가 포함 된 행을 원한다고 생각. 그러나 텍스트 상자가 Null이면 모든 행을 반환하십시오. 이 두 조건을 OR과 결합하여이를 수행 할 수 있습니다. 텍스트 상자가 null의 경우

WHERE 
    [Promo Code] Like "*" & Forms!SearchF!txtPromo & "*" 
    OR 
    Forms!SearchF!txtPromo Is Null 

OR의 두 번째 부분은 그래서 모든 행 반환되는 모든 행 마찬가지입니다.

텍스트 상자가 Null이 아닌 경우 Like 비교를 만족하는 행만 반환됩니다.

관련 문제