![]() |
![]() |
1. Buatlah Project Baru, dan Form Entri data untuk tabel Anggota dan tabel CD
Catatan : Limit mesti Numerik, Daftar mesti Tanggal, serta memperhatikan NOT NULL pada tabel
Catatan : Harga mesti Numerik, Daftar mesti Tanggal, serta memperhatikan NOT NULL pada tabel
2. Buatlah User Interface untuk Transaksi Peminjaman CD berikut, sehingga dapat menampilkan nama dan alamat sesuai dengan KodeAnggota dan Judul untuk KodeCD.
Kontrol | Properti | Nilai |
Data1 | Nama DatabaseName Recordset RecordsetType |
RsTransaksi C:\Rental\Rental.Mdb Transaksi Table |
Data2 | Nama DatabaseName Recordset RecordsetType Visible |
RsAnggota C:\Rental\Rental.Mdb Transaksi Table False |
Data3 | Nama DatabaseName Recordset RecordsetType Visible |
RsCD C:\Rental\Rental.Mdb Transaksi Table False |
Untuk kontrol lainnya atur sendiri sesuai dengan tampilan diatas
Lakukan koding pada bagian General Declaration
'Deklarasi Enumerated type untuk aksi oleh pemakai Private Enum Aksi flNone = 0 flAdd = 1 'Tambah data flEdit = 2 'Perbaiki data End Enum 'Deklarasi Variabel Flag adalah Aksi Dim Flag As Aksi Private Sub AturTombol(Add, Update, Cancel) cmdAdd.Enabled = Add 'Atur keaktifan cmdUpdate.Enabled = Update cmdCancel.Enabled = Cancel End Sub Private Sub Kunci(x) txtTanggal.Locked = x 'Kunci textbox dari txtKodeAnggota.Locked = x 'perubahan oleh pemakai txtKodeCD.Locked = x End Sub
Lakukan koding pada Form Load untuk mengatur Index masing-masing Data Kontrol
Private Sub Form_Load() RsCD.Refresh 'Refresh Data Kontrol RSCD RsCD.Recordset.Index = "P_KEY" 'Tentukan Index yang digunakan RsAnggota.Refresh RsAnggota.Recordset.Index = "P_KEY" RsTransaksi.Refresh RsTransaksi.Recordset.LockEdits = False End Sub
Lakukan koding pada Kontrol RsTransaksi
Private Sub RsTransaksi_Error(DataErr As Integer, Response As Integer) Select Case DataErr Case 3163 MsgBox "Panjang data melebihi ukuran field" Response = vbDataErrContinue Case Else Response = vbDataErrDisplay End Select End Sub
Private Sub RsTransaksi_Reposition() RsAnggota.Recordset.Seek "=", txtKodeAnggota.Text If Not RsAnggota.Recordset.NoMatch Then lblNama = RsAnggota.Recordset("Nama") lblAlamat = RsAnggota.Recordset("Alamat") End If RsCD.Recordset.Seek "=", txtKodeCD.Text If Not RsCD.Recordset.NoMatch Then lblJudul = RsCD.Recordset("Judul") End If If Flag = flNone Then If RsTransaksi.Recordset.EOF Then 'Jika tabel kosong Call AturTombol(True, False, False) cmdFirst.Enabled = False cmdPrev.Enabled = False cmdNext.Enabled = False cmdLast.Enabled = False Else Call AturTombol(True, False, False) cmdFirst.Enabled = True cmdPrev.Enabled = True cmdNext.Enabled = True cmdLast.Enabled = True End If Call Kunci(True) End If End Sub
Lakukan koding pada Command Add Click untuk mengatur data tanggal dan membuka penguncian
Private Sub cmdAdd_Click() Flag = flAdd 'Tandai sebagai tambah data RsTransaksi.Recordset.AddNew Call Kunci(False) 'Buka penguncian Call AturTombol(False, True, True) txtTanggal.Text = Format(Date, "dd-mmm-yyyy") txtTanggal.SetFocus End Sub
Lakukan koding pada txtKodeAnggota LostFocus untuk mencari data anggota pada RsAnggota
Private Sub txtKodeAnggota_LostFocus() If txtKodeAnggota.Text <> "" Then RsAnggota.Recordset.Seek "=", txtKodeAnggota.Text If Not RsAnggota.Recordset.NoMatch Then lblNama = RsAnggota.Recordset("Nama") lblAlamat = RsAnggota.Recordset("Alamat") Else MsgBox "Kode Anggota belum terdaftar !", vbCritical, "Warning" txtKodeAnggota.SetFocus End If End If End Sub
Lakukan hal yang sama untuk txtKodeCD
Private Sub txtKodeCD_LostFocus() If txtKodeCD.Text <> "" Then RsCD.Recordset.Seek "=", txtKodeCD.Text If Not RsCD.Recordset.NoMatch Then lblJudul = RsCD.Recordset("Judul") Else MsgBox "Judul CD belum terdaftar !", vbCritical, "Warning" txtKodeCD.SetFocus End If End If End Sub
Lakukan Koding pada Command Update
Private Sub cmdUpdate_Click() On Error GoTo ErrcmdUpdate_click If txtKodeAnggota.Text = "" Then MsgBox "Kode Anggota tidak boleh kosong", vbCritical, "Warning" Exit Sub End If If txtKodeCD.Text = "" Then MsgBox "Kode CD tidak boleh kosong", vbCritical, "Warning" Exit Sub End If If Not IsDate(txtTanggal.Text) Then MsgBox "Periksa tanggal Peminjaman", vbCritical, "Warning" End If RsTransaksi.Recordset.Update Flag = flNone Call Kunci(True) Call AturTombol(True, False, False) RsTransaksi.Recordset.Bookmark = RsTransaksi.Recordset.LastModified CancelcmdUpdate: Exit Sub ErrcmdUpdate_click: Select Case Err.Number Case 3022 MsgBox "Telah terjadi duplikasi pada Transaksi", vbOKOnly + vbInformation, "Warning" Case 3167 MsgBox "Data telah dihapus pemakai lain" & vbCrLf & _ "Lakukan refresh data anda !", vbOKOnly + vbInformation Case 3197 'Data pada recordset telah berubah 'sejak ditampilkan. MsgBox "Data telah diubah oleh pemakai lain !", vbOKOnly + vbInformation 'Hal ini secara otomatis akan menyegarkan 'kembali recordset untuk menampilkan data terakhir RsTransaksi.Recordset.Move 0 Resume CancelcmdUpdate Case 3260 'Record dikunci pemakai lain nHitung = nHitung + 1 'Mencoba mengunci dua kali 'Memungkinkan pemakai membuat keputusan ulangi, batal If nHitung > 2 Then nPilih = MsgBox("Data sedang dikunci pemakai lain" & vbCrLf & _ "Ulangi penguncian ?", vbYesNo + _ vbQuestion) If nPilih = vbYes Then nHitung = 1 Else Resume CancelcmdUpdate End If End If DoEvents 'menjalankan event windows 'menunda sejumlah waktu random nTunda = nHitung ^ 2 * Int(Rnd * 3000 + 1000) For i = 1 To nTunda: Next i Resume Case Else MsgBox "Error " & Err & ":" & Error, vbOKOnly Resume CancelcmdUpdate End Select End Sub
Dan Akhirnya koding untuk tombol Cancel
Private Sub cmdCancel_Click() RsTransaksi.Recordset.CancelUpdate Call Kunci(True) Flag = flNone Call AturTombol(True, False, False) End Sub
Catatan :
Untuk Tombol Navigasi lakukan koding sendiri.