0
나는 내 MS Acccess 데이터베이스에서 검색 페이지를 만들고 Search_Click()
하위의 DoCmd.ApplyFilter
과 관련된 문제로 실행되는 일부 VBA를 작성하고 있습니다.MS 액세스 VBA DoCmd.ApplyFilter 거짓을 평가하는 IsNull()
내 코드는 ...
는Shows results where true...
([site column] = txtbox1 OR isnull(txtbox1))
AND
([asset col ] = txtbox2 OR isnull(txtbox2))
물론, 원하는 기능은 다음과 같다 ...이
Private Sub Search_Click()
DoCmd.ApplyFilter "", _
"([site] = [Forms]![SWP Search]![txtSite] " & _
" Or IsNull([Forms]![SWP Search]![txtSite])) " & _
"AND " & _
"([asset] = [Forms]![SWP Search]![txtAsset] " & _
" Or IsNull([Forms]![SWP Search]![txtAsset]))"
End Sub
같은 또는 의사 코드에
- 사이트를 찾습니다 선택된 자산 블랭크 -> 사이트 내 필터에만 적용
- 사이트 선택, 자산 선택 -> 빈 모두
- 사이트에 필터 자산 빈 - 자산에만
에> 필터 그러나 실제로 일어나는 것은 -> 모든
- 사이트 선택, 자산 빈 - 자산이 빈>
- 사이트 빈 작동 - ->는
- 사이트 자산 선택, 선택 작동>개 행이
- 사이트 빈, 자산이 선택한 반환 ->행이 사이트는 비어있는 경우, ISNULL()가 true와 그렇게 첫 번째 부분은 평가되지 같은
그래서 보인다 반환 필터는 FALSE이며, 그저 거기에서 종료됩니다.
왜 그런가?
IsEmpty()는 Variant 유형의 변수에만 적용됩니다. –
콤보 상자에 대해 "" "기본값으로 설정되어 있습니다. 나는 그것이 NULL을 의미 할 것이라고 생각했지만 분명히 그렇지 않다. 나는 디버거에서 체크하고'IsNull()'이 비어있을 때 true로 평가하지 않았다. 그래서 나는 기본값을 없애고'IsNull()'이 훌륭하게 작동했다. 문제 해결됨! –
기본값을 Null로하려면 기본 값 속성을 "Null"(따옴표 제외)로 설정하십시오. –