MS Access データベースに検索ページを作成するための VBA を書いていますDoCmd.ApplyFilter
が、Search_Click()
サブで問題が発生しています。
私のコードは次のようになります
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
または擬似コードで...
Shows results where true...
([site column] = txtbox1 OR isnull(txtbox1))
AND
([asset col ] = txtbox2 OR isnull(txtbox2))
明らかに、望ましい機能は次のとおりです...
- サイトが選択され、アセットが空白 -> サイトのみでフィルター
- 選択されたサイト、選択されたアセット -> 両方でフィルター
- サイトが空白、アセットが空白 -> すべての行を返す
- サイトが空白、アセットが選択されている -> アセットのみでフィルタリング
しかし、実際に起こっていることは...
- サイトが選択され、アセットが空白 -> 作品
- 選択されたサイト、選択されたアセット -> 作品
- サイトが空白、アセットが空白 ->行が返されない
- サイトが空白、アセットが選択されている ->行が返されない
そのため、Site が空白の場合、IsNull() は true と評価されていないように見えるため、フィルターの最初の部分は FALSE であり、その場で終了します。
理由はありますか?