Minggu, 13 September 2009

Menampilkan data dari database MS Access

Pada contoh berikut, Anda dapat mengetahui bagaimana caranya mengambil data dari database dan menampilkannya ke control ListView. Data juga dapat diurutkan berdasarkan kolom tertentu dengan mengklik header ListView yang bertalian.

Code::

'Deskripsi: Menampilkan data dari database MS Access ke
'           dalam control ListView dan memungkinkan untuk
'           penyortiran data pada setiap field atau kolom di
'           ListView jika header ybt diklik. Menggunakan
'           reference "Microsoft ActiveX Data Objects 2.0 
'           Library" untuk coding database, dan control
'           "Microsoft Windows Common Control 6.0"
'           untuk control ListView.
'Pembuat  : Masino Sinaga (admin@masinosinaga.com)
'Diupload : Senin, 22 Juli 2002
'Persiapan: 1. Buat 1 Project baru dengan 1 Form.
'           2. Tambahkan reference dan component sesuai dengan
'              yang disebutkan di atas.
'           3. Tambahkan satu ListView ke dalam form, beri nama
'              ListView ini dengan LV.
'           4. Copy-kan coding berikut ke dalam editor form ybt.
'---------------------------------------------------------------
 
Private Sub Form_Load()
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    'Buka koneksi ke database...
    cn.Open "Provider=Microsoft.Jet.OLEDB.3.51;" _
       & "Data Source=" & _
       App.Path & "\Data.mdb"
    'Buka tabel "Orders"
    rs.Open "Orders", cn, adOpenForwardOnly, adLockReadOnly
    'Tentukan tampilan ListView...
    LV.View = lvwReport  'Jangan lupa yang ini...!
    'Ambil data dari recordset...
    LoadListViewFromRecordset LV, rs
    'Atur ukuran/lebar kolom di setiap listview...
    ListViewAdjustColumnWidth LV, True
End Sub
 
Sub LoadListViewFromRecordset(LV As ListView, _
    rs As ADODB.Recordset, Optional MaxRecords As Long)
'Prosedur mengambil data dari Recordset (tabel database)
    Dim fld As ADODB.Field, alignment As Integer
    Dim recCount As Long, i As Long, fldName As String
    Dim li As ListItem
    'Bersihkan isi dari ListView.
    LV.ListItems.Clear
    LV.ColumnHeaders.Clear
    'Buat kumpulan ColumnHeader.
    For Each fld In rs.Fields
        'Menyaring tipe field untuk keperluan
        'perataan tampilan teks di ListView
        Select Case fld.Type
            Case adBoolean, adCurrency, adDate, adDecimal, adDouble
                alignment = lvwColumnRight
            Case adInteger, adNumeric, adSingle, adSmallInt, adVarNumeric
                alignment = lvwColumnRight
            Case adBSTR, adChar, adVarChar, adVariant
                alignment = lvwColumnLeft
            Case Else
                alignment = -1  'Berarti: "Unsupported field type".
                                'atau tipe field tdk mendukung
        End Select
        'Jika tipe field OK, buat sebuah kolom
        'dengan perataan (alignment) yang benar.
        If alignment <> -1 Then
            'Kolom pertama haruslah rata kiri.
            If LV.ColumnHeaders.Count = 0 Then alignment = lvwColumnLeft
            LV.ColumnHeaders.Add , , fld.Name, fld.DefinedSize * 200, _
                alignment
        End If
    Next
    'Keluar jika tidak ada field yg dapat ditampilkan.
    If LV.ColumnHeaders.Count = 0 Then Exit Sub
 
    'Tambahkan semua records dalam recordset.
    rs.MoveFirst
    Do Until rs.EOF
        recCount = recCount + 1
        'Tambahkan object utama ListItem.
        fldName = LV.ColumnHeaders(1).Text
        Set li = LV.ListItems.Add(, , rs.Fields(fldName) & "")
        'Tambahkan semua sub (ListSubItems.Add).
        For i = 2 To LV.ColumnHeaders.Count
            fldName = LV.ColumnHeaders(i)
            li.ListSubItems.Add , , rs.Fields(fldName) & ""
        Next
        If recCount = MaxRecords Then Exit Do
        rs.MoveNext
    Loop
End Sub
 
Sub ListViewAdjustColumnWidth(LV As ListView, _
    Optional AccountForHeaders As Boolean)
'Prosedur untuk menyesuaikan ukuran/lebar kolom ListView
    Dim row As Long, col As Long
    Dim width As Single, maxWidth As Single
    Dim saveFont As StdFont, saveScaleMode As Integer, cellText As String
    'Langsung keluar dari prosedur jika tidak ada
    'items yang akan ditampilkan.
    If LV.ListItems.Count = 0 Then Exit Sub
    'Simpan huruf yang digunakan oleh form,
    'dan sesuaikan ke huruf di ListView.
    'Kita membutuhkan ini dengan tujuan untuk
    'menggunakan metode dari TextWidth milik form.
    Set saveFont = LV.Parent.Font
    Set LV.Parent.Font = LV.Font
    'Sesuaikan ScaleMode = vbTwips untuk form (parent).
    saveScaleMode = LV.Parent.ScaleMode
    LV.Parent.ScaleMode = vbTwips
    
    For col = 1 To LV.ColumnHeaders.Count
        maxWidth = 0
        If AccountForHeaders Then
            maxWidth = LV.Parent.TextWidth(LV.ColumnHeaders(col).Text) + 200
        End If
        For row = 1 To LV.ListItems.Count
            'Ambil teks dari ListItems atau ListSubItems.
            If col = 1 Then
                cellText = LV.ListItems(row).Text
            Else
                cellText = LV.ListItems(row).ListSubItems(col - 1).Text
            End If
            'Hitung lebarnya, dan tetapkan untuk batas.
            'Catatan: Tidak berlaku untuk "multiple-line text fields"
            'atau teks yang fieldnya mengandung dari banyak baris.
            width = LV.Parent.TextWidth(cellText) + 200
            'Update lebar maksimum jika kita menemukan
            'sebuah string yang lebih lebar.
            If width > maxWidth Then maxWidth = width
        Next
        'Ubah lebar kolom sekarang...
        LV.ColumnHeaders(col).width = maxWidth
    Next
    'Ganti property parent milik ListView
    Set LV.Parent.Font = saveFont
    LV.Parent.ScaleMode = saveScaleMode
End Sub
 
Private Sub Form_Resize()
  On Error Resume Next
  LV.Move 0, 0
  LV.Height = Me.ScaleHeight - 250
  LV.width = Me.ScaleWidth - 20
End Sub
 
'Menyortir data di ListView jika header kolom ybt
'diklik
Private Sub LV_ColumnClick(ByVal ColumnHeader As _
    MSComctlLib.ColumnHeader)
    'Urutkan data berdasarkan di kolom ybt...
    If LV.Sorted And _
        ColumnHeader.Index - 1 = LV.SortKey Then
        'Telah diurutkan di kolom ini,
        'balikkan urutan sortir.
        LV.SortOrder = 1 - LV.SortOrder
    Else
        LV.SortOrder = lvwAscending
        LV.SortKey = ColumnHeader.Index - 1
    End If
    LV.Sorted = True
End Sub

Tidak ada komentar:

Posting Komentar