Pada kesempatan kali ini saya akan memberikan sebuah tutorial mengenai paging, yang berfungsi untuk meringankan pada proses load data pada sebuah grid. Disini saya menggunakan MsFlexgrid untuk menampilkan datanya.
MsFlexgrid hanya bisa menampilkan data sekitar 300.000 an data saja, jika anda memiliki data lebih dari 300 ribu dan anda tampilkan ke dalam msflexgrid maka akan terjadi error. Lalu bagimana cara mengatasi data yang terlalu banyak supaya tidak terjadi error di vb? Salah satu cara untuk mengatasi error tersebut  adalah dengan cara pembuatan paging untuk menampilkan datanya. Paging juga bisa meringankan query dalam menampilkan data sehingga aplikasi yang kita buat tidak terlalu berat atau lemot.
Pada kesempatan yang lain saya telah menulis tutorial 
Cara Membuat Paging Menggunakan Database MySQL
Lalu bagaimana cara membuat pagingnya? ikutilah langkah-langkah sebagai berikut :
Sebagai contoh buatlah sebuah form seperti gambar berikut ini
Jika sudah silahkan klik menu Project pilih preferences maka akan muncul jendela baru seperti pada gambar berikut ini :
Lalu cari dan centang tulisan yang dilingkari garis merah seperti pada gambar di atas, jika sudah lalu klik OK. Selanjutkan tambahkan sebuah modul, dengan cara klik menu project lalu pilih Add Modul kemudian ketikan koding berikut ini pada modul tersebut.
 
 
Public Conn As New ADODB.Connection
Public RsMhs As ADODB.Recordset
Public Sub KonekDB()
Set Conn = New ADODB.Connection
Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB_MHS.mdb"
Conn.CursorLocation = adUseClient
End Sub
 
Selanjutnya  buka formnya kemudian silahkan ketikkan koding berikut ini di bagian General Deklaration
Dim Baris As Double
Dim x As Integer, y As Integer, hal As Integer
Dim nilai As Integer
Dim hasil As Integer
Sub AktifGrid()
    MSFlexGrid.Clear
    MSFlexGrid.Rows = 2
    
    MSFlexGrid.Cols = 5
    MSFlexGrid.RowHeightMin = 300
    '-------------------------------------------------
    MSFlexGrid.Col = 0
    MSFlexGrid.Row = 0
    MSFlexGrid.Text = "NO"
    MSFlexGrid.CellFontBold = True
    MSFlexGrid.ColWidth(0) = 500
    MSFlexGrid.AllowUserResizing = flexResizeColumns
    MSFlexGrid.CellAlignment = flexAlignCenterCenter
    '-------------------------------------------------
    MSFlexGrid.Col = 1
    MSFlexGrid.Row = 0
    MSFlexGrid.Text = "NIM"
    MSFlexGrid.CellFontBold = True
    MSFlexGrid.ColWidth(1) = 700
    MSFlexGrid.AllowUserResizing = flexResizeColumns
    MSFlexGrid.CellAlignment = flexAlignCenterCenter
    '-------------------------------------------------
    MSFlexGrid.Col = 2
    MSFlexGrid.Row = 0
    MSFlexGrid.Text = "NAMA MHS"
    MSFlexGrid.CellFontBold = True
    MSFlexGrid.ColWidth(2) = 2000
    MSFlexGrid.AllowUserResizing = flexResizeColumns
    MSFlexGrid.CellAlignment = flexAlignCenterCenter
    '-------------------------------------------------
    MSFlexGrid.Col = 3
    MSFlexGrid.Row = 0
    MSFlexGrid.Text = "ALAMAT"
    MSFlexGrid.CellFontBold = True
    MSFlexGrid.ColWidth(3) = 2000
    MSFlexGrid.AllowUserResizing = flexResizeColumns
    MSFlexGrid.CellAlignment = flexAlignCenterCenter
    '---------------------------------------------------
    MSFlexGrid.Col = 4
    MSFlexGrid.Row = 0
    MSFlexGrid.Text = "JURUSAN"
    MSFlexGrid.CellFontBold = True
    MSFlexGrid.ColWidth(4) = 2300
    MSFlexGrid.AllowUserResizing = flexResizeColumns
    MSFlexGrid.CellAlignment = flexAlignCenterCenter
End Sub
Private Sub TampilanAwal()
    x = 10   'Dalam satu hal menampilkan 5 buah data
    y = 10
    hal = 1
    Set RsMhs = New ADODB.Recordset '" & a & "
    RsMhs.Open "SELECT nim,nama,alamat,jurusan FROM " _
             & "(SELECT TOP " & x & " nim,nama,alamat,jurusan FROM " _
                     & "(SELECT TOP " & y & " nim,nama,alamat,jurusan FROM TBL_MHS ORDER BY NIM ASC) " _
             & "ORDER BY NIM DESC) ORDER BY NIM ASC", Conn
    
    Call TampilGrid
    
    'Menetukan jumlah halaman
    Set RsMhs = New ADODB.Recordset
    RsMhs.Open "SELECT * FROM Tbl_Mhs ORDER BY nim", Conn
    nilai = RsMhs.RecordCount / x
    
    hasil = Int(nilai) + IIf(CDbl(CStr(nilai - Int(nilai))) > 0.1, 1, 0)
    If hasil = 0 Then hasil = 1
    
    txtHal.Text = "Hal " & hal & " dari " & hasil & " Hal"
End Sub
Sub TampilGrid()
    MSFlexGrid.Clear
    Call AktifGrid
    MSFlexGrid.Rows = 2
    Baris = 0
    
    If RsMhs.BOF Then
        Exit Sub
    Else
        With RsMhs
            .MoveFirst
            Do While Not .EOF
                Baris = Baris + 1
                MSFlexGrid.Rows = Baris + 1
                MSFlexGrid.TextMatrix(Baris, 0) = Baris
                MSFlexGrid.TextMatrix(Baris, 1) = !nim
                MSFlexGrid.TextMatrix(Baris, 2) = !nama
                MSFlexGrid.TextMatrix(Baris, 3) = !alamat
                MSFlexGrid.TextMatrix(Baris, 4) = !jurusan
                .MoveNext
            Loop
        End With
    End If
    RsMhs.Close
End Sub
Kemudian ketikan koding berikut ini pada tombol cmdFirst
Private Sub cmdFirst_Click()
    If hal = 1 Then
        MsgBox "Ini udah pada halaman pertama", vbInformation, "Informasi++"
        Exit Sub
    Else
        Call TampilanAwal
    End If
End Sub
Selanjutnya ketikan koding berikut pada tombol cmdLast
Private Sub CmdLast_Click()
    If hal = hasil Then
        MsgBox "Ini halaman terakhir, sudah tidak ada halaman berikutnya...", vbInformation, "Informasi++"
        Exit Sub
    Else
        'Menentukan Hal Terakhir
        hal = hasil
        txtHal.Text = "Hal " & hal & " dari " & hasil & " Hal"
        
        'Menampilkan data di halaman selanjutnya
        'Akhir = x
        Set RsMhs = New ADODB.Recordset
        RsMhs.Open "SELECT NIM FROM TBL_MHS", Conn
        y = RsMhs.RecordCount
        
        Set RsMhs = New ADODB.Recordset
        RsMhs.Open "SELECT nim,nama,alamat,jurusan FROM " _
                 & "(SELECT TOP " & x & " nim,nama,alamat,jurusan FROM " _
                         & "(SELECT TOP " & y & " nim,nama,alamat,jurusan FROM TBL_MHS ORDER BY NIM ASC) " _
                 & "ORDER BY NIM DESC) ORDER BY NIM ASC", Conn
        Call TampilGrid
        
    End If
End Sub
Selanjutnya tuliskan koding berikut ini pada tombol cmdPrevious
Private Sub cmdPrevious_Click()
    If hal = 1 Then
        MsgBox "Sudah pada halaman pertama...!", vbInformation, "Informasi++"
        Exit Sub
    Else
        'Untuk Mengganti halaman sebelumnya
        hal = hal - 1
        txtHal.Text = "Hal " & hal & " dari " & hasil & " Hal"
        
        'Menampilkan data di halaman sebelumnya
        y = y - x
        Set RsMhs = New ADODB.Recordset
        RsMhs.Open "SELECT nim,nama,alamat,jurusan FROM " _
                 & "(SELECT TOP " & x & " nim,nama,alamat,jurusan FROM " _
                         & "(SELECT TOP " & y & " nim,nama,alamat,jurusan FROM TBL_MHS ORDER BY NIM ASC) " _
                 & "ORDER BY NIM DESC) ORDER BY NIM ASC", Conn
        Call TampilGrid
    End If
End Sub
Kemudian ketikan koding berikut ini untuk tombol cmdNext
Private Sub cmdNext_Click()
    If hal = hasil Then
        MsgBox "Ini halaman terakhir, sudah tidak ada halaman berikutnya", vbInformation, "Informasi++"
        Exit Sub
    Else
        'Untuk Mengganti halaman berikutnya
        hal = hal + 1
        txtHal.Text = "Hal " & hal & " dari " & hasil & " Hal"
        
        'Menampilkan data di halaman selanjutnya
        y = y + x
        Set RsMhs = New ADODB.Recordset
        RsMhs.Open "SELECT nim,nama,alamat,jurusan FROM " _
                 & "(SELECT TOP " & x & " nim,nama,alamat,jurusan FROM " _
                        & "(SELECT TOP " & y & " nim,nama,alamat,jurusan FROM TBL_MHS ORDER BY NIM ASC) " _
                 & "ORDER BY NIM DESC) ORDER BY NIM ASC", Conn
        Call TampilGrid
    End If
End Sub
Selanjutnya tulis koding berikut ini di form load
Private Sub Form_Load()
    Call KonekDB
    Call TampilanAwal
End Sub
Jika sudah tuliskan koding berikut ini pada txtcari change
Private Sub txtCari_Change()
    Call AktifGrid
    
    Baris = 0
    'memmanggil koneksi database
    Call KonekDB
    Set RsMhs = New ADODB.Recordset
    
    'Pencarian berdasarkan nim,nama,alamat dan jurusan
    RsMhs.Open "SELECT TOP " & x & " nim,nama,alamat,Jurusan  FROM Tbl_Mhs " _
             & "WHERE nim LIKE '%" & txtCari.Text & "%' " _
             & "OR nama LIKE '%" & txtCari.Text & "%' " _
             & "OR alamat LIKE '%" & txtCari.Text & "%' " _
             & "OR jurusan LIKE '%" & txtCari.Text & "%'", _
    Conn, adOpenDynamic, adLockOptimistic
    '---------------------
    If RsMhs.BOF Then
        Exit Sub
    Else
        With RsMhs
            .MoveFirst
            Do While Not .EOF
                Baris = Baris + 1           'no urut
                MSFlexGrid.Rows = Baris + 1
                MSFlexGrid.TextMatrix(Baris, 0) = Baris
                MSFlexGrid.TextMatrix(Baris, 1) = !nim
                MSFlexGrid.TextMatrix(Baris, 2) = !nama
                MSFlexGrid.TextMatrix(Baris, 3) = !alamat
                MSFlexGrid.TextMatrix(Baris, 4) = !jurusan
                .MoveNext
            Loop
        End With
    End If
    RsMhs.Close
End Sub
Jika sudah lalu simpan, lalu silahkan di jalankan. Tutorial ini juga dapat diterapkan pada komponen ListView, tinggal disesuaikan cara menampilkan datanya ke ListView.
Demikian tutorial dari saya, semoga dapat bermanfaat. Jika anda berhasil maka akan nampak seperti gambar animasi berikut ini. Silahkan baca juga artikel saya mengenai 
Menyimpan Data Dalam Listview Ke Database
Jika anda menginginkan source codenya silahkan download pada link yang sudah disediakan berikut ini.
Link Download
Tags:
Cara Membuat Paging, Tutorial Membuat Paging, Mengatasi load data banyak supaya tidak lemot/berat/lamban, Mempercepat load data pada grid, cara membuat halaman pada grid, membuat halaman pada msflexgrid, source code paging, download source code paging,Membuat Paging di vb6, Cara melakukan Paging, Cara Membuat Paging Data, Paging Data Dengan Visual Basic 6, Tutuorial membuat paging, Bagaimana caranya melakukan paging
 
muantatap... izin di download gan..
ReplyDeletekalau ini menggunakan satu tabel kalau lebih dari satu tabel gimana yah? misalnya tabel mahasiswa dan tabel dosen yang akan di tampilkan kedalam pagingnya,? terima kasih
ReplyDeleteSet RsMhs = New ADODB.Recordset '" & a & "
RsMhs.Open "SELECT nim,nama,alamat,jurusan FROM " _
& "(SELECT TOP " & x & " nim,nama,alamat,jurusan FROM " _
& "(SELECT TOP " & y & " nim,nama,alamat,jurusan FROM TBL_MHS ORDER BY NIM ASC) " _
& "ORDER BY NIM DESC) ORDER BY NIM ASC", Conn
memanggil 2 tabel dengan perintah query dengan memakai parameter where mas...
Delete