熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VB求數據表記錄總數的最佳方法

2013-11-13 10:31:29  來源: .NET編程 

   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的第一筆記錄是由零算起故要+


From:http://tw.wingwit.com/Article/program/net/201311/13905.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.