Membuat Paging Pada MsFlexgrid Dengan Database Access di VB6

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

Tampilkan Gambar





Jika sudah silahkan klik menu Project pilih preferences maka akan muncul jendela baru seperti pada gambar berikut ini :

Tampilkan Gambar



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

3 comments:

  1. muantatap... izin di download gan..

    ReplyDelete
  2. kalau 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

    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

    ReplyDelete
    Replies
    1. memanggil 2 tabel dengan perintah query dengan memakai parameter where mas...

      Delete