Skip to main content

Membuat Form untuk Mengatur Menu di Access

Kali ini, kita akan membuat form dengan tblMenus sebagai record source. Tampilan Design view tampak seperti Gambar 1, sedangkan tampilan dalam bentuk Form view ada di Gambar 2 sebelah kanan. Simpanlah form itu dengan nama frmMenuPengaturan. Selanjutnya, hilangkan properti Record Selectors dan Navigation Buttons agar form lebih enak dilihat.

Gambar 1
Penjelasan dari masing-masing field/form control adalah sebagai berikut:
  1. Text box Id adalah nomor identitas menu yang merupakan kunci utama (primary key).
  2. Combo box IdForm adalah form control yang properti Row Source-nya diambil dari sistem yang dimiliki oleh Access. Fungsinya untuk menampilkan nama form seperti yang ada pada Navigation pane. Row source IdForm itu adalah query dari tabel sistem, bernama MsysObjects, yang tersembunyi. Query lengkapnya seperti ini:

    SELECT Name FROM MsysObjects WHERE Left$([Name],1)<>"~" AND Type=-32768 ORDER BY MsysObjects.Name;

    Ada banyak tipe object di tabel MsysObjects  dan -32768 adalah tipe form pada tabel MsysObjects. Tipe lain tidak diperlukan karena kita hanya ingin mengelola menu melalui form yang ada di Navigation pane.
  3. Text box NamaForm digunakan untuk menampilkan nama yang akan ditampilkan di menu sebagai antar muka pengguna. Tujuannya, untuk memudahkan pengguna mengingat menu.
  4. Text box NamaIjin adalah form control yang nilainya, benar (diijinkan) atau salah (ditolak), diambil dari tblAdminPengguna. Field ini digunakan sebagai variabel syarat yang menentukan hak akses seorang pengguna terhadap form atau tombol. Seorang pengguna yang ingin mengakses form tertentu atau melakukan tindakan tertentu harus mempunyai paling tidak satu ijin akses yang tercantum di tblAdminPengguna. Bila ijin itu tidak ada, maka form tidak akan ditampilkan di menu atau form tidak bisa dibuka. Isi dari NamaIjin ini mempunyai ciri yang unik, yaitu diawai dengan “p_” dan hanya terdiri dari tanda “,” (koma) atau “|” (pipa)  sebagai pemisah.
    Text box NamaIjin ini tidak bisa kita edit secara manual, tetapi harus melalui form dialog. Jadi, untuk mengedit, menambahkan, atau mengurangkan ijin apa saja yang diperbolehkan, buatlah tombol perintah seperti pada gambar di atas (dengan tanda “+/-“ pada Caption) dengan properti Name = LihatDaftar dan Event On Click = =BukaForm("frmMenu Permisi"). Bila tombol perintah “+/-“ diklik, maka akan muncul form yang berisi daftar ijin yang bisa diaplikasikan ke dalam form. Tampilan form itu sendiri tampak seperti pada Gambar 4.

    Ijin yang akan diisikan ke dalam field NamaIjin minimal terdiri dari satu. Bila berisi dua atau lebih, maka pemisahan harus menggunakan tanda pisah seperti telah disebutkan di atas. Bila ada dua atau lebih ijin yang dipisahkan dengan tanda koma, berarti, untuk membuka sebuah form, dua atau lebih ijin itu harus dipenuhi. Bila ada dua atau lebih ijin yang dipisahkan dengan tanda pipa, berarti, untuk membuka sebuah form, minimal harus memenuhi salah satu ijin yang ada. Contohnya seperti Gambar 2:
    Gambar 2
    Untuk membuka form dengan IdForm=frmPermTransJournal_Parent,  administrator akan mengatur syarat perijinan yang diperlukan, yaitu NamaIjin= p_JurnalEdit,p_Posting. Artinya, pengguna yang mempunyai hak akses untuk mengedit dan memproses jurnal sajalah yang diperbolehkan membuka form Jurnal Transaksi Permanen.
  5. Combo box Induk digunakan bila sebuah form akan ditampilkan di submenu. Pada gambar di atas, tampak bahwa Menu Induk Jurnal Permanen adalah submenu Jurnal (gambar sebelah kiri), yang terdiri dari beberapa menu.
  6. Text box No Urut digunakan untuk mengurutkan menu/submenu. Seperti tampak pada gambar, Jurnal Permanen berada pada nomor 2.

Id

IdForm

NamaForm

NamaIjin

Induk

No Urut

1

Rekening

p_RekUtama|p_RekDeriv1|
p_RekDeriv2

0

1

2

frmRekUtama

Kode Rekening Utama

p_RekUtama

1

1

3

frmRekDerivatif1

Kode Rekening Derivatif 1

p_RekDeriv1

1

2

4

frmRekDerivatif2

Kode Rekening Derivatif 2

p_RekDeriv2

1

3

5

Administrasi Sistem

p_IdPerusahaan|
p_AdminPengguna|
p_Periode|p_SistemPreferens

0

2

6

frmAdminPengguna

Admin Pengguna

p_AdminPengguna

5

1

7

frmIdentitasPerusahaan

Identitas Perusahaan

p_IdPerusahaan

5

2

8

frmPeriode

Periode Akuntansi

p_Periode

5

3

9

frmSistemPref

Sistem Preferens

p_SistemPreferens

5

4

10

Jurnal

p_JurnalTempEdit|
p_JurnalTempLihat|
p_JurnalTempPosting|
p_JurnalPermEdit|
p_JurnalPermLihat

0

3

11

frmTempTransJournal_
Parent

Jurnal Transaksi Temporer

p_JurnalTempEdit|
p_JurnalTempLihat|
p_JurnalTempPosting

10

1

12

frmPermTransJournal_
Parent

Jurnal Transaksi Permanen

p_JurnalPermEdit|
p_JurnalPermLihat

10

2

13

frmPosting

Posting Batch

p_JurnalTempPosting

10

3

14

frmJurnalPenutup

Jurna Penutup

p_JurnalTempEdit|
p_JurnalTempPosting

10

4

15

Budget

p_BudgetLihat|p_BudgetEdit|
p_BudgetImpor

0

4

16

frmBudget

Pemasukkan Data Budget

p_BudgetEdit

15

1

17

frmBudgetReport

Laporan Budget Trend Bulanan

p_BudgetLihat|p_BudgetEdit

15

2

18

frmImporBudget

Impor Data Budget

p_BudgetImpor

15

3

19

Laporan

p_NeracaLajur|p_BukuBesar|
p_ResponBiaya

0

5

20

frmNeracaLajur

Neraca Lajur

p_NeracaLajur

19

1

21

frmBukuBesar

Buku Besar

p_BukuBesar

19

2

22

frmResponBiaya

Laporan Pertanggung
jawaban

p_ResponBiaya

19

4

23

frmTrenLapRLAktual

Trend Bulanan Laporan

p_BukuBesar

19

3

Untuk memudahkan pemahaman, kita dapat memasukkan data pada Tabel di atas ke dalam form frmMenuPengaturan. Kolom IdForm berisi nama-nama form yang sudah kita buat. Kecuali nilai Null (kosong), IdForm ini tidak boleh ada duplikasi nama, karena akan mengacaukan menu yang akan dibuka. Kolom NamaForm adalah antarmuka yang digunakan untuk memudahkan kita membuka form. Kolom NamaIjin adalah persyaratan yang diperlukan untuk membuka form pada IdForm. Tanda “,” berarti semua persyaratan harus dipenuhi, sedangkan tanda “|” berarti salah satu persyaratan bisa dipenuhi. Kolom Induk menunjukkan pada Id nomor berapakah sebuah form/menu/submenu itu menjadi bagian dari menu lainnya. Sebagai contoh, nilai 0 berarti suatu menu berada di Menu Utama, sedangkan nilai 1 berarti menu itu merupakan bagian dari menu Id 1 yang bernama Rekening. Kolom NoUrut adalah urutan yang akan ditampilkan pada menu/submenu.

Membuat Form Dialog Daftar Ijin

Form dialog daftar ijin berisi field yang berasal dari tblAdminPengguna dengan dua huruf pertama berawalan “p_”. Kode “p_” ini merupakan tanda bahwa field itu adalah sebuah syarat untuk memperoleh ijin mengakses form tertentu atau melakukan tindakan tertentu. Seperti telah dijelaskan melalui posting dengan judul Membuat Form Admintrasi Pengguna dan tabel di atas, pengguna yang membuka form tertentu harus memperoleh ijin akses tertentu dari administrator. Field-field dengan tanda “p_” itulah yang akan ditampilkan.
Gambar 3
Buatlah form kosong dengan Design view seperti Gambar 3 di atas. Form control yang diperlukan adalah:
  1. List box kosong, properti:
    1. Name=ijinAdminPengguna
    2. Row Source Type=Value List
    3. Row Source kosong.
    Caption label untuk list box ini=Daftar ijin pada admin pengguna.
  2. List box kosong, properti:
    1. Name= listSeleksi
    2. Row Source Type=Value List
    3. Row Source kosong.
    Caption label untuk list box ini= Ijin pada pengaturan menu.
  3. Di antara dua list box itu, sisipkan dua buah tombol perintah untuk menambahkan ke dan mengurangkan dari listSeleksi. Properti untuk tombol pertama:
    1. Name=Tambahkan
    2. Caption=> (tanda lebih besar)
    Properti untuk tombol kedua:
    1. Name=Kurangkan
    2. Caption=< (tanda lebih kecil)
    Lihat gambar di atas.
  4. Di bawah list box ijinAdminPengguna, sisipkan text box dengan properti:
    1. Control Source= =TampilkanDataIjin(Nz([ijinAdminPengguna],""))
    2. Enabled=No
    3. Locked=Yes
  5. Di bawah text box di atas, sisipkan combo box, dengan properti:
    1. Name= logikaIjin
    2. Row Source Type=Value List
    3. Row source= ",";dan;|;atau, column count=2, bound column=1. ​
    Caption label untuk combo box= Logika.
  6. Di bawah list box listSeleksi, sisipkan text box dengan properti:
    1. Control Source= =TampilkanDataIjin(Nz([listSeleksi],""))
    2. Enabled=No
    3. Locked=Yes
  7. Di bawah combo box logikaIjin, sisipkan text box untuk menampung sementara, hasil seleksi yang ada di listSeleksi. Properti:
    1. Name=daftarIjin
    2. Enabled=no
    3. Locked=yes
    4. berilah warna yang berbeda.
  8. Di bawah text box daftarIjin, sisipkan dua buah tombol perintah untuk persetujuan dan pembatalan. Properti untuk tombol pertama:
    1. Name= OKTambah
    2. Caption=OK
    Properti untuk tombol kedua:
    1. Name= Batalkan
    2. Caption= Batalkan
Gambar 4
Simpanlah form itu dengan nama frmMenuPermisi. Setelah itu, salinlah kode VBA di bawah ini ke dalam modul form yang barus saja disimpan. Form view dari frmMenuPermisi tampak pada Gambar 4.
Option Compare Database
Function ResArray(arrSatu, arrDua As Variant) As Variant
'arrSatu adalah array yg lengkap
'arrDua adalah array yg ada di arrSatu
Dim i, x, n, pos As Long
Dim intpos() As String
ReDim intpos(25)
Dim adaKodeSama As Boolean
  pos = 0
  For i = LBound(arrSatu) To UBound(arrSatu)
    For n = LBound(arrDua) To UBound(arrDua)
      adaKodeSama = False
      If arrDua(n) = arrSatu(i) Then
        adaKodeSama = True
        Exit For
      End If
    Next n
    If Not adaKodeSama Then
      intpos(pos) = arrSatu(i)
      pos = pos + 1
    End If
  Next i
  ReDim Preserve intpos(pos - 1)
  ResArray = intpos
End Function
Private Sub Batalkan_Click()
    DoCmd.Close
End Sub
Private Sub Form_Open(Cancel As Integer)
  Dim tdf As DAO.TableDef
  Dim fld As DAO.Field2
  Dim strp() As String
  ReDim strp(30)
  Dim x, i, n As Integer
  Dim strNamaIjin, strSymbol, strSplit As String
'menampilkan row source pada kotak list yang dipilih
  strNamaIjin = Nz(Forms("frmMenuPengaturan").NamaIjin, "")
  For n = 1 To Len(strNamaIjin)
    strSymbol = Mid(strNamaIjin, n, 1)
    If strSymbol = "," Or strSymbol = "|" Then
    strSplit = strSymbol
    Me.logikaIjin = strSplit
    Exit For
    End If
  Next n
  Me.listSeleksi.RowSource = Join(Split(strNamaIjin, Me.logikaIjin), ";")
'menampilkan row source pada kotak list lengkap yang diambil dari tblAdminPengguna
  Set dbs = CurrentDb()
  Set tdf = dbs.TableDefs("tblAdminPengguna")
  i = 0
  For Each fld In tdf.Fields
    If Left(fld.Name, 2) = "p_" Then
      i = i + 1
    End If
  Next fld
  ReDim strp(i - 1)
  n = 0
  For Each fld In tdf.Fields
    If Left(fld.Name, 2) = "p_" Then
      strp(n) = fld.Name
      n = n + 1
    End If
  Next fld
  strSymbol = ResArray(strp, Split(strNamaIjin, Me.logikaIjin))
  If strSplit = "" Then strSplit = Me.logikaIjin
  Me.ijinAdminPengguna.RowSource = Join(strSymbol, ";")
  Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)
End Sub
Private Sub Kurangkan_Click()
  Dim i, p, n As Integer
  Dim pstring As String
  Dim strp() As String
  ReDim strp(20)
  Dim strv() As String
  ReDim strv(20)
  Dim strLista As Variant
 
  If IsNull(Me.listSeleksi) Then Exit Sub
  If IsNull(Me.listSeleksi.ItemsSelected) Then Exit Sub
  If Me.listSeleksi.RowSource = "" Then Exit Sub
  p = Me.listSeleksi.ItemsSelected(0)
  If Me.ijinAdminPengguna.RowSource <> "" Then
    Me.ijinAdminPengguna.RowSource = Me.ijinAdminPengguna. RowSource & ";" & Me.listSeleksi
  Else
      Me.ijinAdminPengguna.RowSource = Me.listSeleksi
  End If
  strLista = Split(Me.listSeleksi.RowSource, ";")
  If UBound(strLista) - 1 = -1 Then
    Me.listSeleksi.RowSource = ""
    Me.daftarIjin = ""
    Exit Sub
  End If
  i = 0
  For n = LBound(strLista) To UBound(strLista)
    If n <> p Then
      strp(i) = strLista(n)
      i = i + 1
    End If
  Next n
  ReDim Preserve strp(UBound(strLista) - 1)
  Me.listSeleksi.RowSource = Join(strp, ";")
  If p < Me.listSeleksi.ListCount Then
    Me.listSeleksi = Me.listSeleksi.ItemData(p)
  Else
    Me.listSeleksi = Me.listSeleksi.ItemData(Me.listSeleksi. ListCount - 1)
  End If
  Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)
End Sub
Private Sub logikaIjin_Change()
  Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)
End Sub
Private Sub OKTambah_Click()
  Forms("frmMenuPengaturan").NamaIjin = Me.daftarIjin
  DoCmd.Close
End Sub
Private Sub Tambahkan_Click()
  Dim i, p, n As Integer
  Dim pstring As String
  Dim strp() As String
  ReDim strp(20)
  Dim strv() As String
  ReDim strv(20)
  Dim strLista  As Variant
  If IsNull(Me.ijinAdminPengguna) Then Exit Sub
  If Me.ijinAdminPengguna.RowSource = "" Then Exit Sub
  strLista = Split(Me.ijinAdminPengguna.RowSource, ";")
  p = Me.ijinAdminPengguna.ItemsSelected(0)
  If Me.listSeleksi.RowSource <> "" Then
    Me.listSeleksi.RowSource = Me.listSeleksi.RowSource & ";" & Me.ijinAdminPengguna
  Else
    Me.listSeleksi.RowSource = Me.ijinAdminPengguna
  End If
  If UBound(strLista) - 1 = -1 Then
    Me.ijinAdminPengguna.RowSource = ""
    Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)
    Exit Sub
  End If
  ReDim strp(UBound(strLista) - 1)
  i = 0
  For n = LBound(strLista) To UBound(strLista)
    If strLista(n) <> Me.ijinAdminPengguna Then
      strp(i) = strLista(n)
      i = i + 1
    End If
  Next n
  Me.ijinAdminPengguna.RowSource = Join(strp, ";")
  ReDim strLista(i)
  strLista = strp
  If p < Me.ijinAdminPengguna.ListCount Then
    Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(p)
  Else
    Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(Me. ijinAdminPengguna.ListCount - 1)
  End If
  Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)
End Sub

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access