如何在Access中使用VBA查找字段值为空的记录?
解决VBA Recordset.FindFirst查找空字段(Null值)失败的问题
我之前也踩过这个一模一样的坑!在Access/VBA里处理数据表的空字段(也就是Null值)时,不能用咱们直觉里的等于判断,这也是你找不到那条FieldTwo为空的记录的原因。
问题根源
在Jet SQL(Access/VBA用的查询语法)里,Null不等于任何值,包括它自己。如果你像下面这样写,肯定找不到目标记录:
' 错误写法1:用空字符串匹配Null myDatasheet.Recordset.FindFirst "FieldTwo = ''" ' 错误写法2:直接等于Null myDatasheet.Recordset.FindFirst "FieldTwo = Null"
正确的写法
要匹配Null值,必须用Is Null这个专门的判断语法:
' 查找所有FieldTwo为空(Null)的记录 myDatasheet.Recordset.FindFirst "FieldTwo Is Null" ' 如果你要精准定位FieldOne为456且FieldTwo为空的记录 myDatasheet.Recordset.FindFirst "FieldOne = '456' AND FieldTwo Is Null"
额外提醒:区分Null和空字符串
这里要注意,短文本字段里的Null值和**空字符串("")**是两个不同的概念:
- 如果字段是Null,意味着这个字段没有任何值(没输入过内容)
- 空字符串是输入了但删除了内容,字段有一个长度为0的字符串
如果你的FieldTwo存的是空字符串而不是Null,那才用FieldTwo = ''来匹配,但根据你的描述,那条记录应该是Null值,所以用Is Null就对了。
验证是否找到记录
执行FindFirst之后,一定要检查Recordset的NoMatch属性来确认是否成功定位:
With myDatasheet.Recordset .FindFirst "FieldTwo Is Null" If .NoMatch Then MsgBox "没找到符合条件的记录哦" Else ' 定位到找到的记录 myDatasheet.Bookmark = .Bookmark End If End With
内容的提问来源于stack exchange,提问作者Pangu
相关产品推荐
相关产品推荐

