Thursday, October 20, 2011

ListBox Load Table - 10 s/d 20 X Lebih Cepat - Tips dan Trik VB6


Tentu Anda sudah tidak asing lagi dengan potongan kode di bawah:
Do While Recordset.EOF = False 
    ListBox.AddItem Recordset!Field 
    Recordset.MoveNext 
Loop 

Atau kode di bawah ini:
For i = 1 To Recordset.RecordCount 
    ListBox.AddItem Recordset!Field 
    Recordset.MoveNext 
Next 

Kedua kode di atas digunakan untuk mem-populate (mengisi) ListBox atau ComboBox dengan Field dari sebuah database. Kode di atas bisa menjadi 10 s/d 20 kali lebih cepat dengan sedikit memodifikasi kodenya yakni dengan membuat satu variable yang diperlakukan sebagai buffer.

Coba Anda bandingkan dua kode di bawah ini:
Private Sub Command2_Click() 
 
    Dim L As Long 
    Dim v As Variant 
    Dim t As Double 
     
    t = GetTickCount 
    Set adoPrimaryRS = New Recordset 
    adoPrimaryRS.Open "SELECT isbn FROM [Title Author] ORDER BY isbn", db, adOpenStatic, adLockOptimistic 
     
    List1.Clear 
    List1.Visible = False 
     
    For L = 0 To adoPrimaryRS.RecordCount - 1 
        List1.AddItem adoPrimaryRS!isbn 
         adoPrimaryRS.MoveNext 
    Next 
     
    List1.Visible = True 
    Me.Caption = GetTickCount - t & " milliseconds" 
     
End Sub 

Dengan kode di bawah ini:
Private Sub Command1_Click() 
 
    Dim L As Long 
    Dim v As Variant 
    Dim t As Double 
     
    t = GetTickCount 
    Set adoPrimaryRS = New Recordset 
    adoPrimaryRS.Open "SELECT isbn FROM [Title Author] ORDER BY isbn", db, adOpenStatic, adLockOptimistic 
     
    List1.Clear  
    List1.Visible = False 
    v = adoPrimaryRS.GetRows 
     
    For L = 0 To adoPrimaryRS.RecordCount - 1 
        List1.AddItem v(0, L) 
    Next 
     
    v = Empty 
     
    List1.Visible = True 
    Me.Caption = GetTickCount - t & " milliseconds" 
     
End Sub 

Kode di atas itu, asumsinya Anda telah melakukan koneksi terlebih dahulu.

Catatan: Dua kode di atas digunakan untuk mengakses database BIBLIO.MDB.