我正在编写一些VBA来在我的MS Acccess数据库中创建一个搜索页面,并在DoCmd.ApplyFilter
sub中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,然后就会退出。
知道为什么吗?
答案 0 :(得分:1)
尝试使用IsEmpty()
代替IsNull()
区别对待,即
"(IsEmpty([Forms]![SWP Search]![txtSite]) " & _
" Or [site] Like [Forms]![SWP Search]![txtSite] )" & _
"AND" & _
"( IsEmpty([Forms]![SWP Search]![txtAsset])" & _
" Or [asset] Like [Forms]![SWP Search]![txtAsset] )"
因为空的txtbox可能会返回空字符串,而不是您期望的NULL。或者将文本框值与空字符串进行比较,可能首先使用trim()
。