Skip to main content

Client-Server Dengan Menggunakan Microsoft Access

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.
Gambar 1 Diagram client-server pada database Access,
misal: menempatkan akunting_be.accdb di back-end server dan
akunting.accdb di front-end client.
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:
  1. 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).
  2. 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.
  3. Menggunakan  recordset tabel atau query dari database eksternal. Recordset berguna jika kita hanya menginginkan gambaran ringkas data eksternal.
Cara manakah yang akan kita pakai tergantung pada situasi. Jika hanya menginginkan data yang ringkas dan cepat, seperti membuat sebuah laporan, maka kita dapat mengimpor tabel. Jika situasi memaksa untuk memperbaharui data, maka kita dapat menggunakan linked table atau recordset.

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:
  1. Tabel dari database back-end tidak banyak berubah.
  2. Tabel dari database back-end digunakan hanya untuk sementara waktu.
Dengan menggunakan kode VBA, kita bisa mengimpor tabel atau query seperti fungsi berikut ini:
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 Function
Di 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
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.
Gambar 4 Security Notice
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:
Dim strStringKoneksi As ADODB.Connection
Dim rsRecordSet As New ADODB.Recordset
Set strStringKoneksi = CurrentProject.Connection
rsRecordSet.ActiveConnection = strStringKoneksi
dan seterusnya
Bila 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 seterusnya
Di 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.

Comments

  1. Pakai fungsi connection string yg ada di buku, yang pernah saya ajari.... itu dulu dicoba, bisa nggak?

    ReplyDelete
  2. Untuk Master Detail ADODB bagaimana yah.🙏

    ReplyDelete

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access