Satu kelemahan utama memisahkan database menjadi dua bagian adalah trafik jaringan. Bila kita menempatkan tabel di database back-end, maka akan butuh waktu bagi front-end yang ada di komputer client untuk memuat data melalui linked table. Dalam prakteknya, tidak semua tabel yang ada di back-end sering diakses. Tabel yang berisi data induk/master, misalnya, mungkin jarang dibuka. Tabel master mungkin hanya digunakan untuk membantu memberikan keterangan seperlunya saat kita memasukkan data transaksi. Pada kasus seperti ini, kita bisa menggunakan kode VBA untuk membuka dan menutup (atau membuang) link tabel master pada saat mereka diperlukan atau tidak. Kode VBA itu bisa dieksekusi pada saat sebuah form diload atau diunload.
Untuk lebih jelasnya, kita buat contoh berikut ini. Pada postingan terdahulu, kita sudah memisahkan database akunting.accdb menjadi dua, yaitu akunting.accdb sebagai front-end database dan akunting_be.accdb sebagai back-end database. File akunting_be.accdb ditempatkan di folder D:\SoftwareAkuntansi\ElexMedia2\BonusCD\Final dan komputer bernama PC1. Bila PC1 merupakan komputer di sebuah jaringan lokal, maka path dari back-end database itu akan menjadi \\PC1\SoftwareAkuntansi\ElexMedia2\BonusCD\Final\akunting_be.accdb. Dengan demikian, front-end database akan diarahkan ke path itu untuk membaca tabel yang ada di akunting_be.accdb. Komputer di client dapat mengakses tabel yang ada di \\PC1\SoftwareAkuntansi\ElexMedia2\BonusCD\Final\akunting_be.accdb dengan tiga cara:
Mengimpor Tabel dari Back-end Database dan Menjadikannya Sebagai Tabel Lokal (Local Table)
Dengan menggunakan contoh di atas, kita bisa mengimpor tabel yang dibutuhkan dari back-end database ke front-end database. Mengimpor tabel ke front-end berarti membuat tabel baru di front-end yang isinya sama persis dengan sumber tabel yang ada di back-end. Tabel yang diimpor disimpan sebagai tabel lokal, bukan merupakan linked table. Setelah semua tabel yang dibutuhkan selesai diimpor, maka objek Access lainnya yang tergantung pada tabel lokal dapat berfungsi normal, tidak perlu penanganan khusus.
Menggunakan tabel lokal yang merupakan hasil impor tabel di front-end database mempunyai satu kelemahan. Mengubah data pada tabel lokal di front-end tidak akan ter-update sampai ke sumber data aslinya yang berada di back-end. Oleh karena itu, memasukkan atau mengubah data pada tabel hasil impor yang ada di table lokal tidak disarankan untuk dilakukan.
Hal ini juga berlaku sebaliknya, pada saat data dari sumber tabel berubah, maka data pada tabel lokal tidak ikut berubah. Bila ingin memperbarui data pada tabel impor di front-end, maka kita harus mereload/merefresh data baru yang berarti mengimpor kembali tabel di front-end.
Mengimpor data dari database back-end bisa dilakukan bila:
Sebagai ilustrasi, perhatikan Gambar 2 di atas. Parameter sumberDatabase adalah D:\SoftwareAkuntansi\ElexMedia2\BonusCD\Final\akunting_be.accdb, backEndNamaTabelQuery adalah tblAdminPengguna, frontEndNamaTabel adalah Impor_tblAdminPengguna, dan blLinkedTable tidak dicentang yang berarti hasil impor bukan linked table. Saat kita menekan tombol Import/Link Tabel, maka fungsi impor tabel dijalankan. Hasilnya berupa tabel normal yang merupakan tabel lokal, bukan linked table, yang bernama Impor_tblAdminPengguna seperti ditunjukkan oleh tanda panah di Navigation pane object Tables.
Mengimpor Tabel dengan Menggunakan Linked Table
Pada dasarnya, impor tabel dengan menggunakan linked table ini sama dengan Database Splitter seperti sudah dibahas di posting yang berjudul Membuat Database Back-end dan Front-end di Microsoft Access.. Perbedaan utama, Database Splitter memisahkan seluruh tabel menjadi linked table, sedangkan cara ini hanya digunakan untuk satu tabel tertentu saja.
Keuntungan mengimpor tabel dengan cara ini adalah linked table menampilkan data real time dari tabel aktual, yaitu tabel dari back-end database. Dengan demikian, bila seseorang melakukan pembaharuan data pada linked table, maka pembaharuan itu akan langsung terlihat.
Kelemahan utama terletak dari penggunaan trafik jaringan yang mungkin akan menjadi lambat, karena ada transmisi data dari back-end ke front-end maupun sebaliknya. Selain itu, linked table juga tidak bisa mengimpor query. Query harus dibuat sendiri di front-end database.
Cara membaca tabel seperti ini cocok diterapkan bila kita ingin memperbarui data ke tabel seperti menambah, mengedit, dan menyimpan data yang memerlukan koneksi secara real, baik dari front-end ke back-end maupun sebaliknya.
Dengan menggunakan kode VBA pada fungsi ImporTabel di atas, kita bisa mengimpor tabel yang diinginkan. Bila parameter blLinkedTable diberi tanda centang (yang berarti true/yes) seperti gambar di bawah, maka hasil impor akan berupa linked table seperti ditunjukkan oleh tanda panah.
Pada saat mengimpor tabel, Access mungkin akan menampilkan pesan peringatan seperti gambar di bawah ini, yang menyatakan bahwa sumber database yang diimpor mungkin berisi kode macro/vba yang berbahaya. Jika bisa mengandalkan sumber database itu, maka kita diminta menekan tombol Open. Jika sumber database tidak bisa dipercaya, maka kita sebaiknya menekan tombol Cancel.
Pesan peringatan semacam ini bisa kita hilangkan dengan menempatkan folder/path dari database sumber ke dalam trusted location
Membuat Recordset untuk Mengimpor Tabel
Dari ketiga cara mengakses tabel seperti di atas, mungkin cara ketiga ini adalah cara yang paling tepat sekaligus tersulit. Ada dua macam recordset yang sering digunakan di Access, yaitu DAO dam ADO. Untuk DAO, kita bisa mempelajarinya pada posting yang berjudul Memasukkan Data ke Tabel Menggunakan Class Module di Form Periode. sedangkan ADO akan disinggung di sini secara sekilas. Selain itu, untuk ADO, kita dapat juga membaca Contoh Sederhana Menggunakan Database ADO di MS Access.
Kita dapat menggunakan VBA untuk membuat recordset ADODB dari tabel Access, bahkan dari luar database, yaitu dengan menarik tabel yang diinginkan. Untuk menarik tabel dari suatu database, maka kita perlu melakukan koneksi ke tabel yang bersangkutan. Jika tabel yang ingin ditarik berada di dalam database, maka kita bisa menggunakan perintah sbb:
Dari sisi pengguna yang awam, penggunaan ADO memang tidak sepraktis linked table di mana si pengguna tidak bisa memperbarui record secara otomatis. Sebagai contoh, untuk menyimpan sebuah record, pengguna harus menekan tombol yang berfungsi untuk menyimpan, tidak seperti linked table yang bisa langsung menyimpan. Demikian pula untuk mengedit, menambah, dan menghapus record.
Dari sisi pemrograman, penggunaan recordset adalah cara yang paling aman dan cepat dalam pemrosesan, terutama bila dilakukan dalam suatu jaringan.
Gambar 1 Diagram client-server pada database Access, misal: menempatkan akunting_be.accdb di back-end server dan akunting.accdb di front-end client. |
- Mengimpor tabel yang diperlukan dari back-end database ke front-end dan menjadikan tabel impor itu sebagai tabel lokal. Data dalam tabel lokal ini tidak mencerminkan perubahan yang mungkin terjadi pada data dalam sumber tabel (back-end) sejak tabel lokal dibuat (melalui impor tabel).
- Link table seperti yang kita lakukan dengan menggunakan Database Splitter. Perubahan yang terjadi pada data dalam sumber tabel akan tercermin pada data dalam linked table.
- Menggunakan recordset tabel atau query dari database eksternal. Recordset berguna jika kita hanya menginginkan gambaran ringkas data eksternal.
Mengimpor Tabel dari Back-end Database dan Menjadikannya Sebagai Tabel Lokal (Local Table)
Dengan menggunakan contoh di atas, kita bisa mengimpor tabel yang dibutuhkan dari back-end database ke front-end database. Mengimpor tabel ke front-end berarti membuat tabel baru di front-end yang isinya sama persis dengan sumber tabel yang ada di back-end. Tabel yang diimpor disimpan sebagai tabel lokal, bukan merupakan linked table. Setelah semua tabel yang dibutuhkan selesai diimpor, maka objek Access lainnya yang tergantung pada tabel lokal dapat berfungsi normal, tidak perlu penanganan khusus.
Menggunakan tabel lokal yang merupakan hasil impor tabel di front-end database mempunyai satu kelemahan. Mengubah data pada tabel lokal di front-end tidak akan ter-update sampai ke sumber data aslinya yang berada di back-end. Oleh karena itu, memasukkan atau mengubah data pada tabel hasil impor yang ada di table lokal tidak disarankan untuk dilakukan.
Hal ini juga berlaku sebaliknya, pada saat data dari sumber tabel berubah, maka data pada tabel lokal tidak ikut berubah. Bila ingin memperbarui data pada tabel impor di front-end, maka kita harus mereload/merefresh data baru yang berarti mengimpor kembali tabel di front-end.
Mengimpor data dari database back-end bisa dilakukan bila:
- Tabel dari database back-end tidak banyak berubah.
- Tabel dari database back-end digunakan hanya untuk sementara waktu.
Function ImporTabel(sumberDatabase, backEndNamaTabelQuery, frontEndNamaTabel As String, Optional blLinkedTable As Boolean) '------------------------------------------ ' Fungsi untuk mengimpor tabel/query '------------------------------------------ Dim obj As AccessObject, dbsObject As Object On Error GoTo Err_Msg Set dbsObject = Application.CurrentData For Each obj In dbsObject.AllTables If obj.Name = frontEndNamaTabel Then DoCmd.DeleteObject acTable, obj.Name End If Next obj If blLinkedTable Then DoCmd.TransferDatabase acLink, "Microsoft Access", sumberDatabase, acTable, backEndNamaTabelQuery, frontEndNamaTabel Else DoCmd.TransferDatabase acImport, "Microsoft Access", sumberDatabase, acTable, backEndNamaTabelQuery, frontEndNamaTabel End If Application.RefreshDatabaseWindow Exit_Function: Exit Function Err_Msg: MsgBox "Error # " & str(Err.Number) & ", source: " & Err.Source & Chr(13) & Err.Description Resume Exit_Function End FunctionDi mana:
- sumberDatabase adalah nama file dan path lengkap dari database yang berisi tabel atau query yang ingin diimpor.
- backEndNamaTabelQuery adalah nama tabel atau query yang ingin diimpor yang ada dalam sumberDatabase.
- frontEndNamaTabel adalah nama tabel hasil impor yang ada dalam Database yang sedang terbuka.
- blLinkedTable adalah logika true/false apakah tabel yang diimpor akan dijadikan linked table atau local table.
Gambar 2 Mengimpor tabel dari back-end dan menyimpannya sebagai tabel lokal |
Sebagai ilustrasi, perhatikan Gambar 2 di atas. Parameter sumberDatabase adalah D:\SoftwareAkuntansi\ElexMedia2\BonusCD\Final\akunting_be.accdb, backEndNamaTabelQuery adalah tblAdminPengguna, frontEndNamaTabel adalah Impor_tblAdminPengguna, dan blLinkedTable tidak dicentang yang berarti hasil impor bukan linked table. Saat kita menekan tombol Import/Link Tabel, maka fungsi impor tabel dijalankan. Hasilnya berupa tabel normal yang merupakan tabel lokal, bukan linked table, yang bernama Impor_tblAdminPengguna seperti ditunjukkan oleh tanda panah di Navigation pane object Tables.
Mengimpor Tabel dengan Menggunakan Linked Table
Pada dasarnya, impor tabel dengan menggunakan linked table ini sama dengan Database Splitter seperti sudah dibahas di posting yang berjudul Membuat Database Back-end dan Front-end di Microsoft Access.. Perbedaan utama, Database Splitter memisahkan seluruh tabel menjadi linked table, sedangkan cara ini hanya digunakan untuk satu tabel tertentu saja.
Keuntungan mengimpor tabel dengan cara ini adalah linked table menampilkan data real time dari tabel aktual, yaitu tabel dari back-end database. Dengan demikian, bila seseorang melakukan pembaharuan data pada linked table, maka pembaharuan itu akan langsung terlihat.
Kelemahan utama terletak dari penggunaan trafik jaringan yang mungkin akan menjadi lambat, karena ada transmisi data dari back-end ke front-end maupun sebaliknya. Selain itu, linked table juga tidak bisa mengimpor query. Query harus dibuat sendiri di front-end database.
Cara membaca tabel seperti ini cocok diterapkan bila kita ingin memperbarui data ke tabel seperti menambah, mengedit, dan menyimpan data yang memerlukan koneksi secara real, baik dari front-end ke back-end maupun sebaliknya.
Dengan menggunakan kode VBA pada fungsi ImporTabel di atas, kita bisa mengimpor tabel yang diinginkan. Bila parameter blLinkedTable diberi tanda centang (yang berarti true/yes) seperti gambar di bawah, maka hasil impor akan berupa linked table seperti ditunjukkan oleh tanda panah.
Gambar 3 Mengimpor tabel dari back-end dan menyimpannya sebagai linked table |
Gambar 4 Security Notice |
Membuat Recordset untuk Mengimpor Tabel
Dari ketiga cara mengakses tabel seperti di atas, mungkin cara ketiga ini adalah cara yang paling tepat sekaligus tersulit. Ada dua macam recordset yang sering digunakan di Access, yaitu DAO dam ADO. Untuk DAO, kita bisa mempelajarinya pada posting yang berjudul Memasukkan Data ke Tabel Menggunakan Class Module di Form Periode. sedangkan ADO akan disinggung di sini secara sekilas. Selain itu, untuk ADO, kita dapat juga membaca Contoh Sederhana Menggunakan Database ADO di MS Access.
Kita dapat menggunakan VBA untuk membuat recordset ADODB dari tabel Access, bahkan dari luar database, yaitu dengan menarik tabel yang diinginkan. Untuk menarik tabel dari suatu database, maka kita perlu melakukan koneksi ke tabel yang bersangkutan. Jika tabel yang ingin ditarik berada di dalam database, maka kita bisa menggunakan perintah sbb:
Dim strStringKoneksi As ADODB.Connection Dim rsRecordSet As New ADODB.Recordset Set strStringKoneksi = CurrentProject.Connection rsRecordSet.ActiveConnection = strStringKoneksi dan seterusnyaBila tabel yang ingin ditarik berada di luar database, maka kita harus menggunakan perintah koneksi yang berbeda. Bila tabel yang ingin ditarik berada database Access , maka kita akan menggunakan perintah sbb:
Dim StrStringKoneksi As String Dim RsRecordSet As New ADODB.Recordset StrStringKoneksi = “Provider=Microsoft.ACE.OLEDB.12.0;” StrStringKoneksi = StrStringKoneksi & “User ID=Admin;” StrStringKoneksi = StrStringKoneksi & “Data Source=path” RsRecordSet.ActiveConnection = StrStringKoneksi RsRecordSet.Open “Select * FROM [table/query]” dan seterusnyaDi mana path adalah nama file dan path lengkap dari file database luar. Kita dapat membaca tautan link pada Contoh Sederhana Menggunakan Database ADO di MS Access di atas.
Dari sisi pengguna yang awam, penggunaan ADO memang tidak sepraktis linked table di mana si pengguna tidak bisa memperbarui record secara otomatis. Sebagai contoh, untuk menyimpan sebuah record, pengguna harus menekan tombol yang berfungsi untuk menyimpan, tidak seperti linked table yang bisa langsung menyimpan. Demikian pula untuk mengedit, menambah, dan menghapus record.
Dari sisi pemrograman, penggunaan recordset adalah cara yang paling aman dan cepat dalam pemrosesan, terutama bila dilakukan dalam suatu jaringan.
Pakai fungsi connection string yg ada di buku, yang pernah saya ajari.... itu dulu dicoba, bisa nggak?
ReplyDeletegak bisa pak
ReplyDeleteUntuk Master Detail ADODB bagaimana yah.🙏
ReplyDelete