rst.RecordCount 是返回rst(DAO记录集)中已被存取(操作)过的记录数。对于动态记录集、 快照记录集, 或只向前记录集其工作机制是通过游标遍历一遍记录集中所有记录后,才能获得正确的记录数。当你刚打开记录集时,如果记录集中无数据,则rst.RecordCount返回值为0,这是正确的。但如果记录集中有多条数据,因此时游标默认指向第一条记录,所以此时无论记录集中有多少条记录,均返回值为1。
解决的办法是:打开记录集后,先用rst.MoveLast方法将游标移到最后一条记录,然后再用rst.RecordCount获得记录集中的记录数,此时就能返回正确的结果了。然而,有时当你不确定记录集中是否有数据时,在打开DAO记录集后直接rst.MoveLast,会产生错误,这是因为如果记录集中无数据,游标指针指向文件尾,rst.eof属性为真,不允许rst.MoveLast操作。因此为获取准确的记录数,编写代码时,在打开DAO记录集后,较为保险的做法是:先用rst.RecordCount判断记录集中是否有数据,如有再用rst.MoveLast 将游标指向记录集最后一条记录,最后再用rst.RecordCount获得正确的记录数。
动画演示图:
源码:
Sub 测试()
Dim SQL As String
Dim rst As Object
Dim lngNumber As Integer
SQL = "select * from 供应商信息表 where 供应商类别='其它供应商'"
Set rst = CurrentDb.OpenRecordset(SQL)
'先判断rst 中有无数据,如果为0则无数据
If rst.RecordCount > 0 Then
'如有数据则将游标指针移到最后一条记录
rst.MoveLast
'获取记录集中的记录数
lngNumber = rst.RecordCount
MsgBox "符合条件的记录数有 " & lngNumber & " 条", vbInformation, "提示"
End If
End Sub