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:
Function cariDbsIni() As String
On Error GoTo Err_Msg
cariDbsIni = "[Database=" & CurrentProject.Path & "\" & CurrentProject.name & ";MS ACCESS]"
Exit_Function:
Exit Function
Err_Msg:
MsgBox "Function cariDbsIni, Error # " & str(Err.Number) & ", source: " & Err.Source & _
Chr(13) & Err.description
Resume Exit_Function
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:
?cariDbsIni
[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.
Function contohCariDbsIni()
Dim rs As DAO.Recordset
Dim strSql As String
membukaDbs
strSql = "SELECT * FROM qryVoucherTemp as q3 " & _
"INNER JOIN (SELECT vouchId as vouchIds, chkSelected FROM " & cariDbsIni & ".tblTempVoucherTemp AS q2) as q1 ON q1.vouchIds = q3.vouchId " & _
"WHERE q1.chkSelected = True"
Debug.Print strSql
Set rs = daoDbs.OpenRecordset(strSql)
rs.Close
Set rs = Nothing
menutupDbs
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:
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:
- Menggunakan fungsi cariDbsIni, kita membuat query berdasarkan tabel temporer yang disimpan di database front-end, lihat Gambar 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:
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
Post a Comment