0
我正在写一些VBA在我的MS Acccess数据库中创建一个搜索页面,并跑入在Search_Click()
子一些麻烦DoCmd.ApplyFilter
。的MS Access VBA DoCmd.ApplyFilter ISNULL()评估假
我的代码看起来像这样
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))
显然,所需的功能如下...
- 网站选择,资产空白 - >仅在网站上过滤
- 网站选择,资产选择 - >既
- 网站的空白,对过滤资产空 - >返回所有行
- 网站的空白,资产选择 - 资产只有
>过滤但是,什么是实际发生的情况是。 ..
- 站点选择,资产空白 - >工作
- 站点选择,选择资产 - >工作
- 网站的空白,空白的资产 - >个没有行返回
- 网站的空白,资产选择 - >没有行返回
所以它看起来像当网站是空白的,ISNULL()是不是真正的评估等的第一部分过滤器是假的,只是在那里退出然后。
任何想法,为什么?
IsEmpty()仅适用于Variant类型的变量。 –
事实证明,我为组合框设置了默认值“'”'。我认为这将意味着NULL,但显然它不。我检查了调试器,当空的时候IsNull()没有被评估为true。所以我摆脱了默认值,'IsNull()'效果很好。问题解决了! –
如果您希望默认值为Null,请将默认值属性设置为“Null”(不带引号)。 –