【发布时间】:2011-09-19 01:39:30
【问题描述】:
我正在编写一些 VBA 来在我的 MS Acccess 数据库中创建一个搜索页面,但在 Search_Click() 子中的 DoCmd.ApplyFilter 遇到了一些问题。
我的代码是这样的
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,然后事情就退出了。
知道为什么吗?
【问题讨论】:
标签: ms-access vba ms-access-2010