我正在编写一些 VBA 来在我的 MS Access 数据库中创建一个搜索页面,并DoCmd.ApplyFilter
在Search_Click()
sub 中遇到了一些麻烦。
我的代码看起来像这样
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 ,然后事情就退出了。
知道为什么吗?