VB求数据表记录总数的方法
VB主要是处理MDB格式的数据库,但是在这方面,它就是出了问题。让我们看看下面的例子:
Dim db As Database
Dim RS As Recordset
Set db = open Database(App。path & " \ zzr . MDB ")
设置rs = db。open recordset(" test ")
Debug。打印rs。记录计数
本例假设应用程序目录中有一个名为“zzr.mdb”的数据库,其中有一个名为“test”的表。这个程序的目的是找出这个表中记录的总数。这里使用了“table”对象的RecordCount属性,这在一般情况下是正确的,但不能保证在所有情况下都是正确的结果,比如表中有大量数据或者数据库有任何损坏。如果出现这种情况,我们可以从另一个角度来处理。请看下面的节目:
Dim db As Database
Dim RS As Recordset
Dim Num As Long
Set db = open Database(App。path & " \ zzr . MDB ")
设置rs = db。open recordset(" test ")
Num = 0
RS。move first
做而不做。EOF()
Num = Num + 1
rs。MoveNext
Loop
debug . print Num
这样,最后得到的num就是正结果。这种方法的思想是从头到尾“数”表中有多少条记录。这个方法看起来很蠢,但是还挺准的。不想的话可以试试。
再看看作者的说法:
先看上面那行程序:调试。打印rs。RecordCount,VB5在读取数据表时并没有一次性将所有记录读入内存(你想想,如果有一个表有一百万条记录甚至一亿条以上,你的机器能承受得了全部读入内存吗?),先看一部分就好了(我觉得这是VB的优势)。recordset对象并不是表的所有记录,只是已经读入内存的那部分,所以rs.recordcount并不是表的记录总数。
看上面程序的改进部分:
做而不做。EOF()
Num = Num + 1
rs。MoveNext
循环
调试。打印编号
接下来我用10万条记录的表测试了上面的程序,结果用了6分半钟(intel 166,32M内存)。你对这样的等待有耐心吗?请看以下对策:
假设数据表已经打开,使用
卢比“Recordset.MoveLast”将指针移动到表
debug . printrs . recordset . record count
的最后一条记录,以获得正确的结果。
或者可以使用下一种方法。
“RS . recordset . movelast
debug . printrs . recordset . absolute position+1
”调用绝对位置。因为vb的第一条记录是从零开始计数的,所以需要+1。
0条评论