Skip to main content

Membuat Report di Database Front-end MS Access

Di aplikasi database Access, kita tidak bisa menampilkan report menggunakan recordset dalam lingkungan database front-end yang tidak mempunyai sumber tabel/query. Bila sumber tabel/query berada di database back-end, sedangkan di front-end tidak ada sama sekali, maka saat kita menggunakan recordset sebagai sumber datanya, Access akan menampilkan pesan kesalahan yang terjadi saat report dibuka.



Pesan kesalahan berupa run time error yang ditampilkan adalah sebagai berikut:

This feature is only available in an ADP

Yang artinya, recordset hanya bisa digunakan pada file database Access dengan ekstensi .adp. Pada gambar di atas, file database Access dengan nama Database_fe.accdb hanya berisi report tanpa Record Source pada propertinya dan tanpa Control Source pada reprot control. Pada gambar itu juga, tampak bahwa kita tidak menggunakan tabel atau query apa pun dalam database front-end itu. Saat report yang bernama rptRekUtama seperti tampak di Access Navigation Pane itu dibuka, muncul pesan kesalahan run time error.

Walaupun tanpa tabel atau query apa pun dalam database front-end, kita bisa membuat report seperti yang diinginkan.Salah satu prinsip dasar dalam sebuah database front-end adalah mengamankan data yang ada di dalam database back-end. Nah untuk mengamankan data pada database back-end, kita hanya akan memuat data saat dibutuhkan di layar front-end. Jadi, saat kita membuka report rptRekUtam, tabel atau query akan ditautkan ke record source dari report itu. Dengan tidak adalnya tabel atau query pada front-end, maka kita harus menggunakan database eksternal untuk mengaksesnya.

Contoh cara membuat report untuk database front-end


  1. Buat database back-end seperti pada halaman Download File (item yang harus di dowload adalah Download Database).
  2. Selanjutnya, kita akan membuat database front-end. Untuk itu, tutuplah file Database_be.accdb lalu buatlah file database Access dengan nama DatabaseReport_fe.accdb.
  3. Karena ingin mengambil properti field yang ada di tabel, maka kita harus membuat link database agar properti tabel bisa diaplikasikan di mana pun kita ingin membuat object selain  table (misalnya, form dan report). Untuk itu, buatlah link table dari satu tabel, misalnya: tabel tblRekUtama, seperti pada posting di tautan ini:
  4. Bila Link table sudah dimuat di bagian Tables dari Access Navigation Pane, arahkanlah kursor ke tabel tblRekUtama, seperti terlihat di bawah.
  5. Dari daftar link table seperti di atas, kita bisa membuat aplikasi front-end seperti yang dibahas di awal.
  6. Selanjutnya, kita akan membuat report kasar dari link table yang tersedia itu dengan menggunakan tabel tblRekUtama seperti di atas.
  7. Setelah memilih tabel, lalu buatlah sebuah report sederhana dengan menggunakan cara Membuat Laporan Menggunakan Tombol Report. Namailah report yang baru dibuat itu: rptRekUtama. Hasilnya tampak seperti gambar di bawah.
  8. Bukalah rptRekUtama dalam format Design View.
  9. Kosongkanlah properti Record Source dari report rptRekUtama (unbound record source)
  10. Kosongkanlah Control Source dari report control yang ada di dalam report rptRekUtama (unbound control source). Hal yang perlu diperhatikan di sini adalah: Nama control source harus sama dengan nama field tabel yang ada di tblRekUtama. Ini penting, karena akan digunakan dalam proses retrieving data yang sesuai dengan nama field tabel. Jadi, jangan mengubah nama control source yang menunjukkan nama field tabel.
  11. Hasil akhir Design View dari report akan terlihat di gambar bawah:
  12. Bukalah report module dari rptRekUtama. Kita dapat membukanya dengan menggunakan event procedure report On Open.
  13. Salinlah kode VBA di bawah (atau tab Kode VBA di sisi kanan) ke report module Report_rptRekUtama
Kode VBA pada report module Report_rptRekUtama
Option Compare Database
Private dbs As DAO.Database
Private Const constNamaTabel As String = "tblRekUtama"
Private strSQL As String, strNamaFolder As String
Private Enum intPerlakuan
  tampilkanData = 1
  tambahData = 2
  editData = 3
End Enum
Private Function bukaDatabaseBE()
  Dim strFolderName As String
  Dim strDbsName, strFileName As String
  Dim strProvider As String
  Dim strPassword As String
  Dim strConnection As String
  
  Const cnFolderSeparator As String = "\"

On Error GoTo Err_Msg

'Gantilah nilai "D:\SoftwareAkuntansi" yang ada pada variabel strFolderName sesuai dengan lokasi database back-end.
  strFolderName = "D:\SoftwareAkuntansi\ElexMedia3\BonusCD\Draft" & cnFolderSeparator
'Bila nama file database back-end berbeda, gantilah nilai "Database_be.accdb" yang ada pada variabel strFileName
  strFileName = "Database_be.accdb"
  strProvider = "MS ACCESS"
'Isikan password bila file database yang ada di strFileName diproteksi dengan password
  strPassword = ""
  If strPassword <> vbNullString Then strPassword = ";PWD=" & strPassword
  
  strConnection = strProvider & strPassword
  strDbsName = strFolderName & strFileName
  Set dbs = OpenDatabase(strDbsName, False, False, strConnection)
  strNamaFolder = "'" & strDbsName & "' " & "'" & strConnection & "' "
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function bukaDatabaseBE, Error # " & Str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Private Function bukaRecordset(strSQL As String, Optional boolForEdit As Boolean) As DAO.Recordset
  Dim rstRecordset As DAO.Recordset
On Error GoTo Err_Msg
  If boolForEdit Then
    Set rstRecordset = dbs.OpenRecordset(strSQL, dbOpenDynaset)
  Else
    Set rstRecordset = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
  End If
  Set bukaRecordset = rstRecordset
  
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function bukaRecordset, Error # " & Str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Private Function lakukanQuery()
  Dim rs As DAO.Recordset
  Dim fld As Field
  Dim ctl As Control
  Dim strSqlStat As String
  
On Error GoTo Err_Msg
  strSqlStat = strSQL
  Set rs = bukaRecordset(strSqlStat)
  For Each ctl In Me
    For Each fld In rs.Fields
      If ctl.Name = fld.Name Then
        Controls(ctl.Name).ControlSource = fld.Name
      End If
    Next fld
  Next ctl
  rs.Close
  Set rs = Nothing
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function lakukanQuery, Error # " & Str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Private Sub Report_Open(Cancel As Integer)
  bukaDatabaseBE
  strSQL = "SELECT * FROM " & constNamaTabel
  Me.RecordSource = strSQL & " IN " & strNamaFolder
  lakukanQuery
End Sub
Pembaca dapat memperoleh sample file Membuat Report di Database Front-end MS Access dengan cara sbb:

  1. Ikuti blog Access Terapan di Facebook dengan mem-follow atau me-like FB page di https://www.facebook.com/AccessTerapan atau follow Google Blog Follower. Bagi yang tidak memfollow, permintaan (request) akan diabaikan.
  2. Kirim email ke admin yanto.e.subroto@gmail.com untuk diikutsertakan menjadi anggota grup Access Terapan.
  3. Sebagai tanda bukti keanggotaan, admin grup Access Terapan akan mengirimkan email ke alamat yang dituju. 
  4. Selanjutnya, silakan download dengan mengklik link berikut ini:
    1. Database_be.zip yang merupakan Access Database back-end (nama file Database_be.accdb), dapat diinstall di server, PC desktop, dsb.
    2. DatabaseReport_fe.zip yang merupakan Access Database front-end (nama file DatabaseReport_be.accdb), dapat diinstall di client, PC desktop, dsb.
  5. Ikuti perintah yang ada dalam kode VBA di atas, pada baris komentar 'Gantilah nilai "D:\SoftwareAkuntansi" yang ada pada variabel strFolderName sesuai dengan lokasi database back-end.
  6. Bukalah report rptRekUtama dalam format Report View atau Print Preview.

Comments

Posting Terpopuler

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access