VB主要处理的是MDB格式的数据库但就在这方面它就偏偏出了差错先看看下例
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase(AppPath & \zzrmdb)
Set rs = dbOpenRecordset(test)
DebugPrint rsRecordCount
此例假设在应用程序目录下有一个名为zzrmdb的数据库而且它里边有一个名为test的表此程序的目的就是求出该表中的记录的总数此处用到的是表对象的RecordCount属性这样用在一般性况下是正确的但并不能保证在所有的情况下都能得出正确的结果比如说表中的数据量很大或者是数据库受到过什么损害等等如果碰到这种情况我们可以换一个角度来处理请看下面的程序
Dim db As Database
Dim rs As Recordset
Dim Num As Long
Set db = OpenDatabase(AppPath & \zzrmdb)
Set rs = dbOpenRecordset(test)
Num =
rsMoveFirst
Do While Not rsEOF()
Num = Num +
rsMoveNext
Loop
DebugPrint Num
这样最后得到的Num即为正解结果这种方法的思路是从表的开始处一直顺序走到结尾就可以数出表中到底有多少条记录这种方法看起来很笨但是它却是一个相当准确的方法大家不防可以试一下
再看笔者的说法
先看上面一行程序DebugPrint rsRecordCountVB在读取数据表时并非一次性将全部记录均读入内存(想想看如果有一个表里面有一百万个记录甚至一亿个或更多要想全部读入内存你的机器能承受得了吗?)只是先读入一部分(在下认为这是VB的优异这处)recordset对象并非表的全部记录只是已读入内存的部分故用rsrecordcount得到的不是表的记录总数
再看上面程序的改良部份
Do While Not rsEOF()
Num = Num +
rsMoveNext
Loop
DebugPrint Num
在下用十万个记录的表对上面这段程序做了个测试结果花了六分半钟(intel M内存)如此的等待阁下有耐心无?请看在下的对策
假设数据表已打开用
rsRecordsetMoveLast 将指针移到表的最后一笔记录
debugprint rsRecordsetRecordCount
即可得出正确结果
或者用下一种方法亦可
rsRecordsetMoveLast
debugprint rsRecordsetAbsolutePosition+
调用绝对位置因vb的第一笔记录是由零算起故要+