VB处理数据库时求数据表记录总数的最佳方法

来源:百度文库 编辑:神马文学网 时间:2024/04/27 17:21:09

VB处理数据库时求数据表记录总数的最佳方法    
  作者:深圳宝安原来电子有限公司    
  倪坚明    
   
  ----   ----   VB主要处理的是MDB格式的数据库,但就在这方面,它就偏偏出了差错,先看看下例:    
   
  Dim   db   As   Database  
  Dim   rs   As   Recordset  
  Set   db   =   OpenDatabase(App.Path   &   "\zzr.mdb")  
  Set   rs   =   db.OpenRecordset("test")  
  Debug.Print   rs.RecordCount  
   
  ----   ----   此例假设在应用程序目录下有一个名为"zzr.mdb"的数据库,而且它里边有一个名为"test"的表,此程序的目的就是求出该表中的记录的总数。此处用到的是"表"对象的RecordCount属性,这样用在一般性况下是正确的,但并不能保证在所有的情况下都能得出正确的结果,比如说表中的数据量很大,或者是数据库受到过什么损害等等。如果碰到这种情况,我们可以换一个角度来处理。请看下面的程序:    
  Dim   db   As   Database  
  Dim   rs   As   Recordset  
  Dim   Num   As   Long  
  Set   db   =   OpenDatabase(App.Path   &   "\zzr.mdb")  
  Set   rs   =   db.OpenRecordset("test")  
  Num   =   0  
  rs.MoveFirst  
  Do   While   Not   rs.EOF()  
  Num   =   Num   +   1  
  rs.MoveNext  
  Loop  
  Debug.Print   Num  
   
  ----   ----   这样,最后得到的Num即为正解结果,这种方法的思路是从表的开始处一直顺序走到结尾,就可以"数"出表中到底有多少条记录。这种方法看起来很笨,但是它却是一个相当准确的方法,大家不防可以试一下。    
  ----   再看笔者的说法:    
   
  ----   先看上面一行程序:Debug.Print   rs.RecordCount,VB5在读取数据表时并非一次性将全部记录均读入内存(想想看如果有一个表,里面有一百万个记录甚至一亿个或更多,要想全部读入内存,你的机器能承受得了吗?),只是先读入一部分(在下认为这是VB的优异这处),recordset对象并非表的全部记录,只是已读入内存的部分,故用rs.recordcount得到的不是表的记录总数。   “页“ Pagesize
   
  ----   再看上面程序的改良部份:    
   
   
  Do   While   Not   rs.EOF()  
  Num   =   Num   +   1  
  rs.MoveNext  
  Loop  
  Debug.Print   Num  
   
  ----   在下用十万个记录的表对上面这段程序做了个测试,结果花了六分半钟(intel   166,32M内存),如此的等待,阁下有耐心无?请看在下的对策:    
  ----   假设数据表已打开,用    
   
  rs.Recordset.MoveLast   '将指针移到表的最后一笔记录  
  debug.print   rs.Recordset.RecordCount    
  即可得出正确结果。  
   
  或者用下一种方法亦可  
   
  rs.Recordset.MoveLast  
  debug.print   rs.Recordset.AbsolutePosition+1  
  '调用绝对位置,因vb的第一笔记录是由零算起,故要+1。