Skip to main content

Fungsi Untuk Menambah dan Memperbaharui Record Dalam Aplikasi Database Back-end dan Front-end

Ada berbagai macam cara (atau dalam istilah VBA di Access sering disebut metode) untuk menambah dan memperbaharui sebuah record. Secara umum, penggunaan VBA untuk menambah dan memperbaharui record dapat dilakukan dengan dua cara yaitu melalui pernyataan SQL dan recordset.
Pada posting berikut ini kita menggunakan recordset untuk menambah dan memperbaharui record. Kita tidak menggunakan cara yang umum dilakukan, yaitu menuliskan nama tiap field dalam recordset seperti di bawah ini misalnya:
  1. rs!field1=nilai1  
  2. rs!field2=nilai2  
  3. rs!field3=nilai3  
  4. dst.  
atau seperti yang MSDN lakukan di gambar berikut ini:

Cara di atas dalam penerapannya sangat tidak praktis, apalagi bila ada banyak field dari sebuah tabel yang ingin diperbaharui. Belum lagi satu tabel dengan tabel yang lain mempunyai field yang berbeda.

Jadi, kita akan sedikit memodifikasi cara umum di atas menjadi lebih sederhana dan bisa diaplikasikan ke berbagai macam tabel sebagai media penyimpanannya dan form sebagai antar mukanya. Untuk itu, kita membuat fungsi VBA yang dinamai memperbaharuiData seperti berikut ini. Dengan fungsi ini, kita hanya perlu menggunakan dua parameter saja, nama form yang aktif dan sumber tabel yang digunakan untuk memperbaharui record. Berikut ini adalah fungsi lengkapnya.

  1. Function memperbaharuiData(frm As Form, strSql As String)  
  2.   Dim rs As Recordset  
  3.   Dim fld As Field  
  4.   Dim ctl As Control  
  5.     
  6. On Error GoTo Err_Msg  
  7.   If Not cekDbsTerbuka Then membukaDbs    
  8.   Set rs = membukaRecordset(strSql, True)  
  9.   If rs.RecordCount = 0 Then  
  10.     rs.AddNew  
  11.     With frm  
  12.       For Each fld In rs.Fields  
  13.         For Each ctl In .Controls  
  14.           If fld.Name = ctl.Name And fld.Type <> DB_OLE Then  
  15.             fld.Value = ctl.Value  
  16.           End If  
  17.         Next ctl  
  18.       Next fld  
  19.     End With  
  20.   Else  
  21.     rs.Edit  
  22.     With frm  
  23.       For Each fld In rs.Fields  
  24.         For Each ctl In .Controls  
  25.           If fld.Name = ctl.Name And fld.Type <> DB_OLE Then  
  26.             If fld.Value <> ctl.Value Or (IsNull(fld.Value) And Not IsNull(ctl.Value)) Then  
  27.               fld.Value = ctl.Value  
  28.             End If  
  29.           End If  
  30.         Next ctl  
  31.       Next fld  
  32.     End With  
  33.   End If  
  34.   rs.Update  
  35.   
  36. Exit_Function:  
  37.   rs.Close  
  38.   Set rs = Nothing  
  39.   Exit Function  
  40. Err_Msg:  
  41.   MsgBox "Function memperbaharuiData, Error # " & str(Err.Number) & ", source: " & Err.Source & _  
  42.   Chr(13) & Err.description  
  43.   Resume Exit_Function    
  44. End Function  
Ada tiga fungsi lain yang terlibat dalam fungsi ini:
  1. cekDbsTerbuka, memeriksa apakah database back-end dalam keadaan sudah terbuka atau belum.
  2. membukaDbs, bila database back-end masih belum terbuka, maka fungsi ini akan membuka database back-end
  3. membukaRecordset, membuka recordset (yang sesuai dengan kriteria tertentu)
Untuk mengaplikasikan fungsi memperbaharuiData, ikuti cara di bawah ini:
  1. Buatlah form seperti dijelaskan di Fungsi Menampilkan Satu Record Dalam Aplikasi Database Back-end dan Front-end.
  2. Di bagian bawah dari control Kode Rekening, tambahkan dengan menyisipkan beberapa control berikut ini:
    1. Command Button (Form Control):
      1. Name=cmdSimpan
      2. Caption untuk label=Simpan
    2. Command Button (Form Control):
      1. Name=cmdTambahBaru
      2. Caption=Tambah
  3. Hasil akhir seperti gambar di bawah ini:
  4. Atur properti form untuk event Time Interval=3000 (sama dengan 3 detik)
  5. Berikut ini adalah kode VBA yang ada di modul form frmRekUtama
  1. 'Abaikan 3 baris di bawah ini, bila sudah ada di modul form  
  2. Option Compare Database  
  3. Private Const strNamaTabel = "tblRekUtama"  
  4. Private Const strPrimaryKey = "KodeRek"  
  5.   
  6. Private Sub cmdSimpan_Click()  
  7. Private Sub cmdSimpan_Click()  
  8.   Dim strKriteria As Variant  
  9.   Dim strSql As String  
  10.     
  11.   If IsNull(Me.KodeRek) Or Me.KodeRek = vbNullString Then  
  12.     MsgBox "Anda tidak bisa menyimpan record ini karena tidak ada primary key.", vbExclamation  
  13.     Cancel = True  
  14.     Exit Sub  
  15.   End If  
  16.     
  17.   strKriteria = membuatKriteriaString(strPrimaryKey, strNamaTabel, Me.KodeRek)  
  18.   strSql = "SELECT * FROM " & strNamaTabel & " WHERE " & strKriteria  
  19.   memperbaharuiData Me, strSql  
  20.   Me.txtInfo = "Record sudah disimpan, Kode Rekening: " & Me.KodeRek  
  21. End Sub  
  22.   
  23. Private Sub cmdTambahBaru_Click()  
  24.   Dim ctl As Control  
  25.   Dim prp As Property  
  26.   For Each ctl In Me.Controls  
  27.     For Each prp In ctl.Properties  
  28.       If prp.Name = "ControlSource" Then ctl.Value = ctl.Properties("DefaultValue").Value  
  29.     Next prp  
  30.   Next ctl  
  31.   Me.KodeRek.SetFocus  
  32. End Sub  

Satu kelebihan lain dari fungsi ini, tidak semua nilai field yang dismpan di tabel akan diperbaharui. Bila nilai field yang ditampilkan di form sama dengan nilai field yang disimpan di tabel, kita bisa melewatkannya. Hanya field yang mempunyai nilai yang berbeda saja yang disimpan. Dengan demikian, waktu yang diperlukan untuk menyimpan menjadi lebih singkat.
 Misalnya seperti ini:

Nilai awal field saat masih tersimpan di tabel:
  1. field1='a'  
  2. field2=2  
  3. field3=#12/10/2017#  
saat akan disimpan, nilai field di form (antar muka pengguna) adalah sebagai berikut:
  1. field1='a'  
  2. field2=22  
  3. field3=#12/10/2017#  
Mengingat nilai field1 dan field3 tidak berubah, maka hanya nilai field2 saja yang akan disimpan. Nilai field2 berubah dari 2 menjadi 22. Jadi, supaya mencerminkan data terbaru, maka nilai field2 harus disimpan di tabel. Nah, fungsi di atas hanya menyimpan nilai field yang berbeda dengan nilai awal field saat masih tersimpan di tabel.

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

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

Memahami Properti Validation Rule dan Validation Text pada Tabel di Access