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:
rs!field1=nilai1
rs!field2=nilai2
rs!field3=nilai3
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.

Function memperbaharuiData(frm As Form, strSql As String)
  Dim rs As Recordset
  Dim fld As Field
  Dim ctl As Control
  
On Error GoTo Err_Msg
  If Not cekDbsTerbuka Then membukaDbs  
  Set rs = membukaRecordset(strSql, True)
  If rs.RecordCount = 0 Then
    rs.AddNew
    With frm
      For Each fld In rs.Fields
        For Each ctl In .Controls
          If fld.Name = ctl.Name And fld.Type <> DB_OLE Then
            fld.Value = ctl.Value
          End If
        Next ctl
      Next fld
    End With
  Else
    rs.Edit
    With frm
      For Each fld In rs.Fields
        For Each ctl In .Controls
          If fld.Name = ctl.Name And fld.Type <> DB_OLE Then
            If fld.Value <> ctl.Value Or (IsNull(fld.Value) And Not IsNull(ctl.Value)) Then
              fld.Value = ctl.Value
            End If
          End If
        Next ctl
      Next fld
    End With
  End If
  rs.Update

Exit_Function:
  rs.Close
  Set rs = Nothing
  Exit Function
Err_Msg:
  MsgBox "Function memperbaharuiData, Error # " & str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.description
  Resume Exit_Function  
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
'Abaikan 3 baris di bawah ini, bila sudah ada di modul form
Option Compare Database
Private Const strNamaTabel = "tblRekUtama"
Private Const strPrimaryKey = "KodeRek"

Private Sub cmdSimpan_Click()
Private Sub cmdSimpan_Click()
  Dim strKriteria As Variant
  Dim strSql As String
  
  If IsNull(Me.KodeRek) Or Me.KodeRek = vbNullString Then
    MsgBox "Anda tidak bisa menyimpan record ini karena tidak ada primary key.", vbExclamation
    Cancel = True
    Exit Sub
  End If
  
  strKriteria = membuatKriteriaString(strPrimaryKey, strNamaTabel, Me.KodeRek)
  strSql = "SELECT * FROM " & strNamaTabel & " WHERE " & strKriteria
  memperbaharuiData Me, strSql
  Me.txtInfo = "Record sudah disimpan, Kode Rekening: " & Me.KodeRek
End Sub

Private Sub cmdTambahBaru_Click()
  Dim ctl As Control
  Dim prp As Property
  For Each ctl In Me.Controls
    For Each prp In ctl.Properties
      If prp.Name = "ControlSource" Then ctl.Value = ctl.Properties("DefaultValue").Value
    Next prp
  Next ctl
  Me.KodeRek.SetFocus
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:
field1='a'
field2=2
field3=#12/10/2017#
saat akan disimpan, nilai field di form (antar muka pengguna) adalah sebagai berikut:
field1='a'
field2=22
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

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access