数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

VB求数据表记录总数的最佳方法


发布日期:2021年03月01日
 
VB求数据表记录总数的最佳方法

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的第一笔记录是由零算起故要+

上一篇:ASP.NET中防止Access数据库下载

下一篇:完成数据访问层