ADO雖然是發(fā)展的趨勢,微軟之前也準(zhǔn)備將DAO淘汰了,DAO 3.6之后就不再更新,但從Access2007開始又將DAO重新拾起來了,只不過改頭換面了一下,變成DAO2了而已,因此DAO短時(shí)間內(nèi)還是淘汰不了,尤其是在Access中,DAO在某些方面的優(yōu)勢依然是ADO比不上的。最近發(fā)現(xiàn)一些朋友在使用DAO記錄集時(shí),不管是向表中寫入數(shù)據(jù),還是只是讀取數(shù)據(jù),都是Set rst=CurrentDb.OpenRecordset("表1"),但實(shí)際上這樣用效率是很差的,尤其是在數(shù)據(jù)量比較大的時(shí)候,效率問題就顯示很重要了,下面整理了一些DAO記錄集的使用技巧,只需要稍微改動一下參數(shù)就可以實(shí)現(xiàn)的.
--------------------------------------------------------------------------------------------------------------------------
打開一個(gè)只用于添加記錄的記錄集(不能讀取已有記錄)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("表1", , dbAppendOnly)
--------------------------------------------------------------------------------------------------------------------------
打開一個(gè)只讀記錄集
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("表1", , dbReadOnly)
--------------------------------------------------------------------------------------------------------------------------
打開一個(gè)只能向前滾動記錄的只讀記錄集(效率最高,但不能使用MovePrevious和MoveFirst方法)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("表1", , dbForwardOnly)
--------------------------------------------------------------------------------------------------------------------------
''打開一個(gè)數(shù)據(jù)來源于SQL Server數(shù)據(jù)庫的記錄集時(shí)要記得用dbSeeChanges參數(shù),尤其是當(dāng)表中有自動編號字段時(shí)是必需的
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("表1", , dbSeeChanges)
--------------------------------------------------------------------------------------------------------------------------
''循環(huán)記錄集的時(shí)候,主要用的有兩種:
方式一:
Do Until rst.EOF
ListBox1.Add rst!字段1
rst.MoveNext
Loop
方式二:
Dim intI As Integer
If rst.RecordCount > 0 Then
rst.MoveLast
rst.MoveFirst
For intI = 1 To rst.RecordCount
ListBox1.Add rst!字段1
rst.MoveNext
Next
End If
很多人喜歡用第一種方式,因?yàn)槭褂煤唵危òㄎ易约海谝环N的效率要比第二種差些,如果需要大批量操作或者數(shù)據(jù)量很大的時(shí)候,建議大家還是用第二種。
至于在循環(huán)的開頭先移到記錄集結(jié)尾,再移到記錄集開頭的作用時(shí):DAO記錄集打開時(shí),如果數(shù)據(jù)量比較大的時(shí)候,存在打開記錄集時(shí)用RecordCount屬性不能正確讀取記錄數(shù)的問題,而要將指針移到最后一條時(shí)才能正確讀取,再有就是如果你對數(shù)據(jù)的排序不在意的話,可以不必再將指針移回記錄集開頭,直接在循環(huán)中用MovePrevious移動就行了