Skip to main content

Menampilkan Data MySQL dalam Form di Access

Pada posting artikel terdahulu, kita sudah memahami bagaimana cara melakukan koneksi data dari aplikasi client di MS Access ke database back-end yang ada di MySQL. Koneksi data itu dilakukan dengan menggunakan penulisan kode VBA yang berisi string koneksi MySQL. Kali ini, kita akan menampilkan data MySQL dalam form di Access.
Jika belum jelas, silakan baca di postingan yang berjudul String Koneksi MySQL di Access VBA. Pada postingan ini, kita sudah bisa melakukan koneksi data dari MS Access ke MySQL, tetapi belum bisa menampilkannya dalam bentuk report, baik report yang dibuat dari Form object maupun Report object di access.

Bagi yang belum mengenal MySQL atau MySQL Workbench, silakan gunakan bantuan Search yang ada di blog ini, dengan kata kunci "MySQL".

Kali ini kita mencoba membuat form yang dapat menampilkan data sebuah tabel yang berasal dari database back-end MySQL, murni back-end dengan tidak menggunakan linked table dari MySQL. Kita akan menggunakan contoh database MySQL yang telah dibuat di posting di atas. Dalam database MySQL itu, ada banyak tabel yang bisa digunakan. Dalam hal ini, tabel yang kita gunakan bernama tblRekUtama. Ada tiga nama field dalam tabel tblReUtama,yaitu: KodeRek (Caption= Kode Rekening), NamaRek (Caption= Nama Rekening), dan Grup (Caption= Nama Grup).

Selanjutnya, kita membuat control dalam sebuah form yang namanya persis seperti nama field di atas, seperti terlihat pada gambar di bawah ini:
Interaksi nama control dalam form frmRekUtama di MS Access dengan nama field pada tabel tblRekUtama di database MySQL
Gambar warna biru pada latar belakang adalah MySQL Workbench, sedangkan warna merah adalah MS Access

Buatlah sebuah form dengan menggunakan Blank Form dan namailah form itu frmRekUtama. Berikut ini adalah properti dari form:
  1. Default View= Datasheet.
  2. Allow Datasheet View= Yes
  3. Record Source= kosong (Unbound)
Pada bagian Detail dari form frmRekUtama itu, isikan control sebagai berikut:
  1. Sisipkan sebuah Text Box dengan properti sebagai berikut:
    1. Name=KodeRek,
    2. Control Source= Unbound
    3. Caption dari label Text Box ini: Kode Rekening
  2. Sisipkan sebuah Text Box dengan properti sebagai berikut:
    1. Name=NamaRek,
    2. Control Source= Unbound
    3. Caption dari label Text Box ini: Nama Rekening
  3. Sisipkan sebuah Combo Box dengan properti sebagai berikut:
    1. Name=Grup,
    2. Control Source= Unbound
    3. Row Source= Kode Grup;Nama Grup;1;Aktiva;2;Hutang;3;Ekuitas;4;Pendapatan;5;Biaya;6;Ringkasan Pendapatan
    4. Row Source Type= Value List
    5. Bound Column= 1
    6. Column Count= 2
    7. Column Widths= 0";1.5"
    8. Column Heads= Yes
    9. List Width= 1.5"
    10. Caption dari label Text Box ini: Nama Grup
Setelah merancang form frmRekUtama, kita memasukkan kode VBA yang diperlukan ke dalam form ini (form module). Ada pun kode VBA yang diperlukan adalah sebagai berikut:
Option Compare Database
Dim daoDatabase As DAO.Database
Dim rst As DAO.Recordset

Function strKoneksiMySQLs() As String
  strKoneksiMySQLs = "Driver={MySQL ODBC 5.3 ANSI Driver};" & _
    "Database=Akunting;" & _
    "UID=root;" & _
    "PWD=12421;" & _
    "SERVER=Localhost;" & _
    "Port=3306"
End Function
Function membukaDatabase()
On Error GoTo Err_Msg
    Set daoDatabase = OpenDatabase("", dbDriverNoPrompt, False, strKoneksiMySQLs)
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function membukaDatabase, Error # " & str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Function menutupDatabase()
On Error GoTo Err_Msg
  If Not (daoDatabase Is Nothing) Then
    daoDatabase.Close
    Set daoDatabase = Nothing
  End If
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function menutupDatabase, Error # " & str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Private Sub Form_Close()
  rst.Close
  Set rst = Nothing
  menutupDatabase
End Sub

Private Sub Form_Open(Cancel As Integer)
  Dim strSql As String
  Dim fld As DAO.Field
  Dim ctl As Control
  
  strSql = "SELECT * FROM tblRekUtama"
  membukaDatabase
  
  Set rst = daoDatabase.OpenRecordset(strSql, dbOpenDynaset)
  For Each ctl In Me.Controls
      For Each fld In rst.Fields
        If ctl.name = fld.name Then
          If ctl.ControlSource = vbNullString Then ctl.ControlSource = fld.name
        End If
      Next fld
  Next ctl
  Set Me.Recordset = rst
End Sub
Saat form dibuka, event procedure Form_Open (On Open) dijalankan. Kita dapat mengubah nilai variabel strSql sesuai dengan kriteria yang diinginkan, misalnya:
strSql = "SELECT * FROM tblRekUtama WHERE KodeRek between '101' AND '121'"
Daftar rekening antara 101 dan 121 (dalam hal ini 118 s/d 121 tidak ada, jadi hanya sampai 117)
atau
strSql = "SELECT * FROM tblRekUtama WHERE Grup='2'"
Daftar rekening dengan grup=2 (Hutang)
Pernyataan For Each ctl In Me.Controls digunakan untuk mengidentifikasi setiap control yang ada di form frmRekUtama. Sedangkan pernyataan For Each fld In rst.Fields digunakan untuk mengidentifikasi setiap field yang ada di recordset, dalam hal ini menggunakan tabel tblRekUtama. Jika nama field sama dengan nama control, maka kita mengatur properti Control Source dari control menjadi sama dengan nama field seperti dijelaskan pada kode ctl.ControlSource = fld.name. Dengan pernyataan ini, kita memberi nilai pada properti control source dari form menjadi sama dengan nama field.

Selanjutnya, untuk mengikat (bound) record source sesuai dengan tabel dari tblRekUtama di MySQL database, kita menggunakan pernyataan Set Me.Recordset = rst yang berarti mengatur agar record source form frmRekUtama berisi record dari strSql.

Comments

  1. Wah trimakasih banyak nih ke admin,
    ilmunya benar-benar terapan,
    semoga ilmunya berkah..

    ReplyDelete

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database