Skip to main content

Urutan Event Procedure Untuk Form atau Report di MS Access

Urutan event procedure untuk form atau report di MS Access mempunyai urutan tertentu. Bila kita melakukan sesuatu kegiatan, seperti memindahkan kursor dari satu control (misal: mengisi text box) ke control yang lain (misal: text box, list box, atau button) , dapat memicu beberapa event yang berbeda. Event ini terjadi menurut urutan tertentu. Urutan event ini perlu dipahami, karena akan mempengaruhi bagaimana dan kapan suatu macro atau kode VBA harus dieksekusi. Misalnya, apa yang harus dilakukan bila: sebuah form mulai dibuka, sebuah control baru saja berubah dan di-update, dan sebagainya.

Pada posting berikut ini, kita membahas urutan event yang ada di form dan report:
  1. Urutan event pada form dan subform
  2. Urutan event pada control yang ada di form
  3. Urutan event pada record yang ada di form
  4. Urutan event pada keystroke dan mouse click
  5. Urutan event pada report dam report section
MS Access menampilkan nama event dengan istilah yang berbeda antara apa yang tertulis di tab Event pada property sheet dan di VB Editor. Sebagai contoh, event On Change ada di property sheet dan Macro Builder. Sedangkan di VB Editor, event itu bernama Change. Pada postingan ini, kita menggunakan istilah yang tertulis di VB Editor.

Urutan event pada form dan subform

Event untuk form terjadi bila kita membuka atau menutup sebuah form, berpindah dari satu form ke form yang lain, atau bekerja dengan data yang ada dalam form atau subform.

Membuka dan menutup sebuah form

Urutan event saat kita membuka sebuah form adalah sebagai berikut:

Open ⇨ Load ⇨ Resize ⇨ Activate ⇨ [GotFocus (form)] ⇨ Current

Event Open tidak terjadi saat kita berpindah focus ke sebuah form yang sudah terbuka. Artinya, event Open ini hanya terjadi saat sebuah form pertama kalinya terbuka.

Bila tidak ada control yang aktif (misalkan: sebuah text box, button, combo box, dsb), maka event GotFocus pada form akan terjadi setelah event Activate dan sebelum event Current.
Urutan event saat kita menutup sebuah form adalah sebagai berikut:
Unload ⇨ [LostFocus (form)] ⇨ Deactivate ⇨ Close

Bila tidak ada control yang aktif (misalkan: sebuah text box, button, combo box, dsb), maka event LostFocus akan berlaku setelah event Unload dan sebelum event Deactivate.

Berpindah form

Urutan event saat kita berpindah dari satu form ke form yang lain yang semuanya dalam keadaan terbuka adalah sebagai berikut:
Deactivate (form1) ⇨ Activate (form2)

Event Deactivate pada sebuah form juga terjadi bila kita berpindah dari satu form ke sebuah objek di Access. Namun demikian, event Deactivate ini tidak terjadi saat kita membuka form yang berupa dialog box, form yang mempunyai properti PopUp= Yes dan Modal= Yes, atau berpindah ke jendela program yang lain.

Bekerja dengan data pada sebuah form

Event pada control dan form dapat terjadi saat kita berpindah antar record dalam form dan saat kita mengubah data pada record yang aktif. Sebagai misal, saat kita pertama kali membuka form, urutan event berikut ini akan terjadi:
Open (form) ⇨ Load (form) ⇨ Resize (form) ⇨ Activate (form) ⇨ Current (form) ⇨ Enter (control) ⇨ GotFocus (control)

Demikian juga, saat kita menutup form, urutan event berikut ini akan terjadi:

Exit (control) ⇨ LostFocus (control) ⇨ Unload (form) ⇨ Deactivate (form) ⇨ Close (form)

Jika kita sudah mengubah data dalam suatu control, event BeforeUpdate dan AfterUpdate baik yang ada di control dan form terjadi sebelum event Exit yang ada di control.

Event pada form yang berisi subform

Bila kita membuka form (disebut juga form utama) yang berisi subform, subform dan record di dalam subform itu dimuat (load) terlebih dahulu sebelum form utama. Jadi, kecuali Activate, event untuk subform dan control di dalam subform (seperti misalnya Open, Current, Enter, dan GotFocus) diproses sebelum event yang ada di dalam form utama. Sedangkan event Activate hanya diproses di form utama saja, yaitu pada saat form utama dibuka.

Demikian juga bila kita menutup form yang berisi subform. Subform dan record di dalamnya akan dibongkar (unload) setelah form utama. Kecuali Deactivate, event untuk control, form utama, dan subform di dalammnya diproses dengan urutan sebagai berikut:
  1. Events pada control yang ada di subform (seperti misalnya Exit dan LostFocus)
  2. Events pada control yang ada di form (termasuk control yang berupa subform)
  3. Events yang ada di form (seperti misalnya Deactivate dan Close)
  4. Events yang ada di subform
Event Deactivate hanya terjadi di form utama saja, yaitu pada saat form ini ditutup.

Urutan event pada control yang ada di form

Control adalah bagian dari form (atau report) pada MS Access yang digunakan untuk memasukkan, mengedit, atau menampilkan data. Sebagai misal, text box adalah bentuk control yang umum dipakai untuk menampilkan dan memasukkan data di form. Contoh lain bentuk control yang sering dipakai di form adalah tombol perintah (command button), combo box, list box, subform/subreport, dan check box.

Event yang ada di control dalam sebuah form terjadi bila kita memindahkan focus ke control lain, mengubah, atau memperbaharui (update) data di control itu.

Memindahkan focus ke sebuah control

Bila kita memindahkan focus ke sebuah control yang ada di sebuah form (misalnya pada saat membuka form yang berisi satu atau lebih control yang aktif, atau memindahkan focus ke control lain dalam form yang sama), maka urutan event Enter dan GotFocus adalah sbb:
Enter ⇨ GotFocus

Pada saat membuka form, event Enter dan GotFocus terjadi sesudah event yang ada dalam properti form dijalankan, seperti telah dijelaskan di bagian "Bekerja dengan data pada sebuah form" di atas
Bila kita meninggalkan atau melepaskan focus dari sebuah control yang ada di sebuah form (misalnya pada saat menutup form yang berisi satu atau lebih control yang aktif, atau memindahkan focus ke control lain dalam form yang sama), maka urutan event Exit dan LostFocus adalah sbb:
Exit ⇨ LostFocus

Pada saat menutup form, event Exit dan LostFocus terjadi sebelum event yang ada dalam properti form dijalankan, seperti telah dijelaskan di bagian "Bekerja dengan data pada sebuah form" di atas

Mengubah dan memperbaharui data pada sebuah control

Pada saat kita memasukkan atau mengubah data dalam sebuah control yang ada di form dan kemudian berpindah ke control lain, maka event BeforeUpdate dan AfterUpdate akan terjadi dengan urutan sbb:

BeforeUpdate ⇨ Afte rUpdate

Event Exit and LostFocus untuk control yang nilainya berubah terjadi setelah event BeforeUpdate dan AfterUpdate. urutannya sbb:
BeforeUpdate ⇨ AfterUpdate ⇨ Exit ⇨ LostFocus

Saat kita mengubah isi sebuah control yang berupa text box atau combo box, event Change terjadi. Event Change terjadi bila isi dari control tersebut berubah, tetapi sebelum kita berpindah focus ke control atau record yang lain.

Urutan event pada record yang ada di form

Event untuk record di form terjadi bila kita memindahkan focus ke record yang berbeda, memperbaharui record, menghapus record, atau menambah record baru.

Memindahkan focus ke record lain dan memperbaharui data dalam record

Bila kita memindahkan focus pada record yang sedang aktif, memasukkan atau mengubah data dalam record, dan kemudian memindahkan focus ke record lain, urutan event yang terjadi pada form adalah sebagai berikut:

Current (form) ⇨ BeforeUpdate (form) ⇨ AfterUpdate (form) ⇨ Current (form)

Saat meninggalkan record yang telah kita ubah datanya, tetapi belum masuk ke record berikutnya (atau sebelumnya), event Exit dan LostFocus terjadi untuk control yang mempunyai focus. Event Exit dan LostFocus ini terjadi setelah event BeforeUpdate dan AfterUpdate pada form. Urutannya adalah sebagai berikut:
BeforeUpdate (form) ⇨ AfterUpdate (form) ⇨ Exit (control) ⇨ LostFocus (control) ⇨ RecordExit (form) ⇨ Current (form)

Saat kita memindahkan focus antar berbagai macam control di sebuah form, maka event procedure untuk berbagai macam control juga muncul mengikuti jenis control itu. Sebagai misal, urutan event berikut ini akan muncul bila kita melakukan kegiatan:
  1. Membuka form dan mengubah data dalam sebuah control yang ada di form itu:

    Current (form) ⇨ Enter (control) ⇨ GotFocus (control) ⇨ BeforeUpdate (control) ⇨ AfterUpdate (control)
  2. Memindahkan focus ke control lain:

    Exit (control1) ⇨ LostFocus (control1) ⇨ Enter (control2) ⇨ GotFocus (control2)
  3. Mengubah record yang sedang aktif dan kemudian memindahkan focus ke record lain (sebelum atau sesudah record yang aktif):

    BeforeUpdate (form) ⇨ AfterUpdate (form) ⇨ Exit (control) ⇨ LostFocus (control) ⇨ Current (form)

Menghapus record

Bila kita menghapus sebuah record, event berikut ini akan muncul, dan MS Access menampilkan kotak dialog yang meminta konfirmasi untuk melakukan atau membatalkan penghapusan record:
Delete ⇨ BeforeDelConfirm ⇨ AfterDelConfirm

Bila kita membatalkan event Delete, maka event BeforeDelConfirm dan AfterDelConfirm tidak akan terjadi, dan kotak dialog tidak akan ditampilkan.

Menambah record baru

Saat kita mengarahkan focus pada sebuah record yang masih kosong dan kemudian menambahkan record baru dalam sebuah control, urutan eventnya adalah sebagai berikut:

Current (form) ⇨ Enter (control) ⇨ GotFocus (control) ⇨ BeforeInsert (form) ⇨ AfterInsert (form)

Event BeforeUpdate dan AfterUpdate untuk control terjadi setelah event BeforeInsert dan sebelum event AfterInsert.

Urutan event untuk tombol keyboard dan mouse yang ditekan

Pada form atau control, event untuk tombol keyboard terjadi bila kita menekan tombol keyboard di form atau control yang sedang focus. Untuk mouse, event terjadi di form, form section, dan control saat kita menekan tombol mouse atau menggerakan mouse pointer di tempat itu.

Event yang berhubungan dengan keyboard

Saat kita menekan dan melepaskan tombol keyboard di sebuah control yang sedang focus, urutan event yang terjadi adalah sbb:
KeyDown ⇨ KeyPress ⇨ KeyUp
Event KeyDown, KeyPress, dan KeyUp terjadi saat kita menekan dan melepaskan sebuah tombol atau mengirimkan keystroke dalam bentuk karakter ANSI. Jika kita menekan dan menahan tombol ANSI, Event KeyDown dan KeyPress terjadi saling bergantian (KeyDown, KeyPress, KeyDown, KeyPress, dan seterusnya) sampai tombol ANSI dilepaskan. Setelah itu, event KeyUp terjadi. Bila tombol non-ANSI ditekan dan dilepas kembali, event KeyDown dan KeyUp terjadi. Bila tombol non-ANSI ditekan untuk kemudian ditahan, event KeyDown terjadi berulang kali sampai tombol itu dilepaskan. Setelah itu, event KeyUp terjadi.
Jika tombol keyboard yang ditekan dapat memicu event lain dari sebuah kontrol, maka event lain itu terjadi setelah event KeyPress tetapi sebelum event KeyUp. Sebagai misal, jika sebuah tombol tertentu ditekan dapat mengubah teks yang ada di text box control dan memicu event Change, maka urutan eventnya adalah sebagai berikut:

KeyDown ⇨ KeyPress ⇨ Change ⇨ KeyUp

Jika sebuah tombol yang ditekan menyebabkan focus berpindah dari satu control ke control lain, event KeyDown terjadi pada control yang pertama, sedangkan event KeyPress and KeyUp terjadi pada control yang kedua. Sebagai misal, jika kita mengubah data pada sebuah text box control dan menekan tombol Tab untuk berpindah ke control lain, urutan event-nya adalah sebagai berikut:
Control yang pertama:
KeyDown ⇨ BeforeUpdate ⇨ AfterUpdate ⇨ Exit ⇨ LostFocus

Control yang kedua:
Enter ⇨ GotFocus ⇨ KeyPress ⇨ KeyUp


Event yang berhubungan dengan mouse

Saat kita mengeklik dan melepaskan tombol mouse yang berada di sebuah control dalam form, urutan event yang terjadi di control itu adalah sebagai berikut:
MouseDown ⇨ MouseUp ⇨ Click

Jika sebuah control sedan dalam posisi focus dan kita kemudian mengeklik control lain untuk memindahkan focus ke control lain itu, urutan event yang terjadi adalah sebagai berikut:
Control pertama:
Exit ⇨ LostFocus

Control kedua:
Enter ⇨ GotFocus ⇨ MouseDown ⇨ MouseUp ⇨ Click

Saat berpindah dari record satu ke record berikutnya/sebelumnya dan kemudian mengeklik sebuah control, akan terjadi juga event Current sebelum event Enter untuk control itu.
Mengeklik ganda sebuah control dan mengakibatkan event Click dan DblClick terjadi. Sebagai misal, saat kita mengeklik ganda sebuah control selain tombol perintah (command button), urutan event untuk control itu adalah sebagai berikut:
MouseDown ⇨ MouseUp ⇨ Click ⇨ DblClick ⇨ MouseUp

Saat kita mengeklik ganda sebuah tombol perintah, urutan event di atas juga terjadi, tetapi diikuti oleh event Click yang kedua.
Event MouseMove untuk sebuah form, form section, atau control terjadi bila mouse pointer digerakkan di atas form, form section, atau control. Event ini terjadi secara independen, tidak tergantung pada event mouse lain.

Urutan event untuk report dan report section


Event dapat terjadi di report dan report section bila kita membuka sebuah report untuk dicetak atau di-pratinjau (preview), atau menutup sebuah report.

Event untuk report

Saat kita membuka sebuah report untuk tujuan cetak atau pratinjau dan kemudian menutup report yang bersangkutan atau berpindah ke object lain (form, table, query, dan sebagainya), urutan event yang terjadi pada report itu adalah sebagai berikut:
Open ⇨ Activate ⇨ Close ⇨ Deactivate

Saat berpindah dari satu report ke report lainnya, event Deactivate terjadi untuk report yang pertama dan event Activate terjadi untuk report yang kedua:
Deactivate (report1) ⇨ Activate (report2)

Event Deactivate di atas juga terjadi saat kita berganti objek, misalnya dari report ke form, table, query, dan sebagainya. Event Deactivate ini tidak terjadi bila kita berpindah dari report ke sebuah kotak dialog, sebuah form yang mempunyai properti PopUp=Yes , atau jendela program lain.
Saat kita membuka sebuah report yang record sourcenya berupa query, Access menjalankan event Open sebelum menjalankan query yang dimaksud. Dengan demikian, kita dapat mengatur kriteria untuk report itu dengan menggunakan sebuah macro atau event procedure yang dijalankan saat event Open. Sebagai misal, macro atau event procedure dapat membuka kotak dialog buatan sendiri yang berisi kriteria yang akan dimasukkan dalam report itu.

Event untuk report sections

Saat kita mencetak atau preview sebuah laporan, event Format dan Print pada report section terjadi setelah event Open dan Activate untuk report dan sebelum event Close dan Deactivate untuk report, sebagai berikut:
Open (report) ⇨ Activate (report) ⇨ Format (report section) ⇨ Print (report section) ⇨ Close (report) ⇨ Deactivate (report)

Selain itu, event berikut ini dapat terjadi selama atau setelah event Format dan sebelum event Print:
  1. Event Retreat terjadi bila Access kembali ke section sebelumnya selama format report berlangsung.
  2. Event NoData terjadi bila tidak ada record yang ditampilkan pada sebuah report.
  3. Event Page terjadi setelah proses format dan sebelum proses cetak. Kita dapat menggunakan event Page untuk mengatur tampilan report yang dicetak.

Contoh urutan event procedure di Form

Untuk memudahkan kita mengetahui urutan event procedure yang ada di form, kita bisa membuat simulasi dengan membuat form baru yang menggunakan record source tabel yang sudag terisi. Sebagai misal kita bisa menggunakan tblRekUtama sebagai record source untuk form yang akan kita buat berikut ini.
  1. Buatlah form dengan menggunakan Form Design dengan mengeklik ribbon Create >> grup Forms >> Form Design. Form kosong terbuka dalam format Design View. Simpanlah form (tekan Ctrl S untuk menyimpan form) dengan nama Form1.
  2. Pada properti form, isikan properti berikut ini: Record Source= tblRekUtama
  3. Pilih Add Existing Fields dengan mengeklik ribbon Design >> grup Tools >> Add Existing Fields.
  4. Drag semua field yang ada di tblRekUtama ke dalam Form1. Hasil akhir Design View Form1 tampak seperti Gambar 1 di bawah.
    Gambar 1. Design View Form1 dengan Field List pane di bagian bawah
  5. Isikan kode VBA berikut ini ke dalam class module form Form1 (kita dapat meng-copy dan paste semua kode di bawah ini ke dalam class module Form_Form1):
    Option Compare Database
    Private Sub Form_Activate()
      MsgBox "Form: " & Me.Name & ", Event: Form_Activate"
    End Sub
    Private Sub Form_AfterUpdate()
      MsgBox "Form: " & Me.Name & ", Event: Form_AfterUpdate"
    End Sub
    Private Sub Form_BeforeUpdate(Cancel As Integer)
      MsgBox "Form: " & Me.Name & ", Event: Form_BeforeUpdate"
    End Sub
    Private Sub Form_Close()
      MsgBox "Form: " & Me.Name & ", Event: Form_Close"
    End Sub
    Private Sub Form_Current()
      MsgBox "Form: " & Me.Name & ", Event: Form_Current"
    End Sub
    Private Sub Form_Deactivate()
      MsgBox "Form: " & Me.Name & ", Event: Form_Deactivate"
    End Sub
    Private Sub Form_GotFocus()
      MsgBox "Form: " & Me.Name & ", Event: Form_GotFocus"
    End Sub
    Private Sub Form_Load()
      MsgBox "Form: " & Me.Name & ", Event: Form_Load"
    End Sub
    Private Sub Form_LostFocus()
      MsgBox "Form: " & Me.Name & ", Event: Form_LostFocus"
    End Sub
    Private Sub Form_Open(Cancel As Integer)
      MsgBox "Form: " & Me.Name & ", Event: Form_Open"
    End Sub
    Private Sub Form_Resize()
      MsgBox "Form: " & Me.Name & ", Event: Form_Resize"
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
      MsgBox "Form: " & Me.Name & ", Event: Form_Unload"
    End Sub
    Private Sub KodeRek_AfterUpdate()
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_AfterUpdate"
    End Sub
    Private Sub KodeRek_BeforeUpdate(Cancel As Integer)
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_BeforeUpdate"
    End Sub
    Private Sub KodeRek_Change()
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_Change"
    End Sub
    Private Sub KodeRek_Enter()
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_Enter"
    End Sub
    Private Sub KodeRek_Exit(Cancel As Integer)
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_Exit"
    End Sub
    Private Sub KodeRek_GotFocus()
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_GotFocus"
    End Sub
    Private Sub KodeRek_LostFocus()
      MsgBox "Form: " & Me.Name & ", Event: KodeRek_LostFocus"
    End Sub
        
    Kita dapat mengganti perintah MsgBox dengan Debug.Print, misalnya MsgBox "Form: " & Me.Name & ", Event: Form_Open" menjadi Debug.Print "Form: " & Me.Name & ", Event: Form_Open". Jangan lupa untuk menampilkan Immediate Window. Dengan cara ini Form1 akan ditampilkan lebih cepat.
  6. Simpan form Form1
  7. Cobalah buka Form1 dalam format Form View dan perhatikan urutan event procedure yang terjadi
Urutan event procedure bila tidak ada control yang aktif dalam form
  1. Ubah kembali tampilan Form1 dalam format Design View
  2. Sebagai uji coba, kita bisa mematikan properti Enabled dari ketiga field di atas, yaitu dengan mengatur properti Enabled=No, lalu simpan Form1. Lihat Gambar 2 di bawah.
    Gambar 2. Mematikan properti Enabled di semua control dalam Form1
  3. Ulangi kembali untuk membuka Form1 dalam format Form View dan perhatikan urutan event procedure yang terjadi, pasti berbeda dengan no 7.
Urutan event procedure antar form yang terbuka
  1. Aktifkan kembali properti Enabled dari ketiga field di atas, yaitu dengan mengatur properti Enabled= Yes, lalu simpan Form1.
  2. Untuk memudahkan pemahaman antar form, kita dapat meng-copy form Form1 dan paste dengan nama Form2 melalui Access Navigation pane. Dengan demikian, kita akan mempunyai dua buah form, yaitu Form1 dan Form2. Kedua form ini identik, hanya berbeda nama saja. Lihat Gambar 3 di bawah.
    Gambar 3. Form View Form1 dan Form2, dengan Form2 berada pada posisi Focus
  3. Bukalah kedua form di atas dalam format Form View, lalu alihkan focus ke masing-masing form secara bergantian, Form1 dan Form2. Tujuannya, untuk memperoleh pemahaman mengenai event procedure bila berpindah form
Kita dapat mencoba berbagai cara seperti di atas, dengan menyisipkan berbagai macam event procedure untuk mengetahui urutannya, seperti event Delete, KeyPress, KeyDown, KeyUp, dan sebagainya.

Comments

Posting Terpopuler

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

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access