Skip to main content

Fungsi Untuk Mendapatkan Database yang Sedang Terbuka (Current Database)

Di lingkungan front-end dan back-end, kita hampir tidak pernah membuat tabel atau query di database Access yang dijalankan sebagai aplikasi yang sedang dibuka (di current database). Database Access yang dijalankan sebagai aplikasi yang sedang terbuka, dalam pengertian ini dinamakan database front-end, jarang digunakan untuk menyimpan tabel atau query yang sifatnya permanen. Dalam banyak hal, tabel atau query yang disimpan di front-end sifatnya temporer, karena kelak, bila tidak dibutuhkan, mereka akan dihapus.
Gambar A

Dalam situasi tertentu, kita masih memerlukan tabel atau query yang disimpan di database front-end, terutama saat bekerja dengan data yang melibatkan dua database, back-end dan front-end. Dalam situasi ini, kita memerlukan nama database lokal (yaitu database front-end), yang mengharuskan kita membuat query yang melibatkan database back-end.

Untuk mendapatkan nama database local, kita menggunakan fungsi yang diberi nama cariDbsIni, sebagai berikut:
  1. Function cariDbsIni() As String  
  2. On Error GoTo Err_Msg  
  3.   cariDbsIni = "[Database=" & CurrentProject.Path & "\" & CurrentProject.name & ";MS ACCESS]"  
  4. Exit_Function:  
  5.   Exit Function  
  6. Err_Msg:  
  7.   MsgBox "Function cariDbsIni, Error # " & str(Err.Number) & ", source: " & Err.Source & _  
  8.   Chr(13) & Err.description  
  9.   Resume Exit_Function  
  10. End Function  
Fungsi di atas menggunakan object CurrentProject dengan properti Path sebagai nama path dari folder database dan properti Name sebagai nama database yang sedang dibuka. Selain itu, parameter string koneksi mempunyai diberi nilai sebagai "MS Access" yang merupakan nama provider dari aplikasi yang sedang terbuka, yaitu MS Access.

Nilai string dari fungsi cariDbsIni hampir sama dengan fungsi cariDbsEksternal. Kedua fungsi ini terdiri dari nama path file database dan string koneksinya. Perbedaannya, fungsi cariDbsIni menggunakan database yang terbuka pada front-end sebagai nilai keluarannya. Sementara itu, cariDbsEksternal menggunakan database back-end sebagai nilai keluarannya.

Implementasi:

Jika fungsi cariDbsIni dijalankan di Immediate Window, hasilnya seperti ini:
  1. ?cariDbsIni  
  2. [Database=D:\Access\Database_fe.accdb;MS ACCESS]  
Database_fe.accdb adalah database yang sedang dibuka.

Contoh di bawah ini bisa menjelaskan lebih jauh. Bila biasanya kita menarik tabel dan query yang ada di database back-end ke front end, maka pada contoh ini, kita akan melibatkan tabel temporer yang ada di database front-end ke back-end untuk melakukan proses pembuatan report berupa Print View yang ada di gambar 4 paling bawah.
  1. Function contohCariDbsIni()  
  2.   Dim rs As DAO.Recordset  
  3.   Dim strSql As String  
  4.       
  5.   membukaDbs  
  6.     
  7.   strSql = "SELECT * FROM qryVoucherTemp as q3 " & _  
  8.                  "INNER JOIN  (SELECT vouchId as vouchIds, chkSelected FROM " & cariDbsIni & ".tblTempVoucherTemp AS q2) as q1 ON q1.vouchIds = q3.vouchId " & _  
  9.                  "WHERE q1.chkSelected = True"  
  10.   Debug.Print strSql  
  11.     
  12.   Set rs = daoDbs.OpenRecordset(strSql)  
  13.   rs.Close  
  14.   Set rs = Nothing  
  15.   menutupDbs  
  16. End Function  
Ada dua fungsi lain yang terlibat di atas, membukaDbs dan menutupDbs. Silakan baca di link yang tersedia untuk petunjuk penggunaannya. Fungsi di atas menggabungkan query yang bernama qryVoucherTemp (Query qryVoucherTemp disimpan di database eksternal, yang merupakan back-end) dengan tabel temporer yang bernama tblTempVoucherTemp (tabel tblTempVoucherTemp disimpan di database yang sedang terbuka, atau current database, yang merupakan front-end), menggunakan pernyataan SQL yang diatur melalui variabel string strSql. Variabel string ini kemudian ditetapkan sebagai recordset melalui pernyataan set rs, sebagai berikut:
  1. Set rs = daoDbs.OpenRecordset(strSql)  
Misalkan, datasheet dari query qryVoucherTemp yang berada di database back-end adalah sebagai berikut:

Gambar 1. Query qryVoucherTemp yang berada di database back-end

sedangkan datasheet dari tabel tblTempVoucherTemp yang berada di database front-end adalah sebagai berikut (perhatikan field chkSelected yang bertanda -1 atau true pada gambar di bawah ini):

Gambar 2. tabel tblTempVoucherTemp yang berada di database front-end
Tabel tblTempVoucherTemp adalah tabel yang digunakan untuk membuat report dalam bentuk form seperti pada Gambar A di awal posting ini. Pada Gambar A itu, kita hanya memilih Voucher Id nomor 23 dan 29.

Pada fungsi contohCariDbsIni, ada dua database yang terlibat:
  1. Menggunakan fungsi cariDbsIni, kita membuat query berdasarkan tabel temporer yang disimpan di database front-end, lihat Gambar 2.
  2. Menggunakan pengaturan object daoDbs, kita membuat query yang berasal dari query yang disimpan di database back-end, lihat Gambar 1.
Hasil dari fungsi contohCariDbsIni melalui Debug.Print strSql adalah sebagai berikut:
  1. SELECT * FROM qryVoucherTemp as q3 INNER JOIN  (SELECT vouchId as vouchIds, chkSelected FROM [Database=D:\Access\MeAccess.accdb;MS ACCESS].tblTempVoucherTemp AS q2) as q1 ON q1.vouchIds = q3.vouchId WHERE q1.chkSelected = True   
Gambar 3. Hasil query yang dieksekusi di database back-end, digunakan sebagai record source untuk membuat laporan
Pada strSql di atas, output dari fungsi cariDbsIni sama dengan [Database=D:\Access\Database_fe.accdb;MS ACCESS]. Dalam strSql itu kita menggunakan field yang bernama chkSelected. Field ini terdapat di tabel tblTempVoucherTemp yang disimpan di database front-end. Query strSql ini dieksekusi di database back-end yang datasheet view-nya tampak pada Gambar 3 di atas.
Gambar 4. Hasil Print View Report dari query1 di Gambar 3

Bila query1 pada Gambar 3 digunakan sebagai record source untuk menampilkan report dalam format Print View, maka hasilnya seperti Gambar 4 di atas. Pada Gambar 4 itu, field chkSelected tidak ditampilkan, diganti dengan setiap nomor vouchId (Voucher Id) yang telah diseleksi di query1 (nomor 23 dan 29).

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Memahami Referential Integrity Saat Membuat Relasi di Access

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