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.
  1. Option Compare Database  
  2. Function ResArray(arrSatu, arrDua As VariantAs Variant  
  3. 'arrSatu adalah array yg lengkap  
  4. 'arrDua adalah array yg ada di arrSatu  
  5. Dim i, x, n, pos As Long  
  6. Dim intpos() As String  
  7. ReDim intpos(25)  
  8. Dim adaKodeSama As Boolean  
  9.   pos = 0  
  10.   For i = LBound(arrSatu) To UBound(arrSatu)  
  11.     For n = LBound(arrDua) To UBound(arrDua)  
  12.       adaKodeSama = False  
  13.       If arrDua(n) = arrSatu(i) Then  
  14.         adaKodeSama = True  
  15.         Exit For  
  16.       End If  
  17.     Next n  
  18.     If Not adaKodeSama Then  
  19.       intpos(pos) = arrSatu(i)  
  20.       pos = pos + 1  
  21.     End If  
  22.   Next i  
  23.   ReDim Preserve intpos(pos - 1)  
  24.   ResArray = intpos  
  25. End Function  
  26. Private Sub Batalkan_Click()  
  27.     DoCmd.Close  
  28. End Sub  
  29. Private Sub Form_Open(Cancel As Integer)  
  30.   Dim tdf As DAO.TableDef  
  31.   Dim fld As DAO.Field2  
  32.   Dim strp() As String  
  33.   ReDim strp(30)  
  34.   Dim x, i, n As Integer  
  35.   Dim strNamaIjin, strSymbol, strSplit As String  
  36. 'menampilkan row source pada kotak list yang dipilih  
  37.   strNamaIjin = Nz(Forms("frmMenuPengaturan").NamaIjin, "")  
  38.   For n = 1 To Len(strNamaIjin)  
  39.     strSymbol = Mid(strNamaIjin, n, 1)  
  40.     If strSymbol = "," Or strSymbol = "|" Then  
  41.     strSplit = strSymbol  
  42.     Me.logikaIjin = strSplit  
  43.     Exit For  
  44.     End If  
  45.   Next n  
  46.   Me.listSeleksi.RowSource = Join(Split(strNamaIjin, Me.logikaIjin), ";")  
  47. 'menampilkan row source pada kotak list lengkap yang diambil dari tblAdminPengguna  
  48.   Set dbs = CurrentDb()  
  49.   Set tdf = dbs.TableDefs("tblAdminPengguna")  
  50.   i = 0  
  51.   For Each fld In tdf.Fields  
  52.     If Left(fld.Name, 2) = "p_" Then  
  53.       i = i + 1  
  54.     End If  
  55.   Next fld  
  56.   ReDim strp(i - 1)  
  57.   n = 0  
  58.   For Each fld In tdf.Fields  
  59.     If Left(fld.Name, 2) = "p_" Then  
  60.       strp(n) = fld.Name  
  61.       n = n + 1  
  62.     End If  
  63.   Next fld  
  64.   strSymbol = ResArray(strp, Split(strNamaIjin, Me.logikaIjin))  
  65.   If strSplit = "" Then strSplit = Me.logikaIjin  
  66.   Me.ijinAdminPengguna.RowSource = Join(strSymbol, ";")  
  67.   Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)  
  68. End Sub  
  69. Private Sub Kurangkan_Click()  
  70.   Dim i, p, n As Integer  
  71.   Dim pstring As String  
  72.   Dim strp() As String  
  73.   ReDim strp(20)  
  74.   Dim strv() As String  
  75.   ReDim strv(20)  
  76.   Dim strLista As Variant  
  77.    
  78.   If IsNull(Me.listSeleksi) Then Exit Sub  
  79.   If IsNull(Me.listSeleksi.ItemsSelected) Then Exit Sub  
  80.   If Me.listSeleksi.RowSource = "" Then Exit Sub  
  81.   p = Me.listSeleksi.ItemsSelected(0)  
  82.   If Me.ijinAdminPengguna.RowSource <> "" Then  
  83.     Me.ijinAdminPengguna.RowSource = Me.ijinAdminPengguna. RowSource & ";" & Me.listSeleksi  
  84.   Else  
  85.       Me.ijinAdminPengguna.RowSource = Me.listSeleksi  
  86.   End If  
  87.   strLista = Split(Me.listSeleksi.RowSource, ";")  
  88.   If UBound(strLista) - 1 = -1 Then  
  89.     Me.listSeleksi.RowSource = ""  
  90.     Me.daftarIjin = ""  
  91.     Exit Sub  
  92.   End If  
  93.   i = 0  
  94.   For n = LBound(strLista) To UBound(strLista)  
  95.     If n <> p Then  
  96.       strp(i) = strLista(n)  
  97.       i = i + 1  
  98.     End If  
  99.   Next n  
  100.   ReDim Preserve strp(UBound(strLista) - 1)  
  101.   Me.listSeleksi.RowSource = Join(strp, ";")  
  102.   If p < Me.listSeleksi.ListCount Then  
  103.     Me.listSeleksi = Me.listSeleksi.ItemData(p)  
  104.   Else  
  105.     Me.listSeleksi = Me.listSeleksi.ItemData(Me.listSeleksi. ListCount - 1)  
  106.   End If  
  107.   Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)  
  108. End Sub  
  109. Private Sub logikaIjin_Change()  
  110.   Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)  
  111. End Sub  
  112. Private Sub OKTambah_Click()  
  113.   Forms("frmMenuPengaturan").NamaIjin = Me.daftarIjin  
  114.   DoCmd.Close  
  115. End Sub  
  116. Private Sub Tambahkan_Click()  
  117.   Dim i, p, n As Integer  
  118.   Dim pstring As String  
  119.   Dim strp() As String  
  120.   ReDim strp(20)  
  121.   Dim strv() As String  
  122.   ReDim strv(20)  
  123.   Dim strLista  As Variant  
  124.   If IsNull(Me.ijinAdminPengguna) Then Exit Sub  
  125.   If Me.ijinAdminPengguna.RowSource = "" Then Exit Sub  
  126.   strLista = Split(Me.ijinAdminPengguna.RowSource, ";")  
  127.   p = Me.ijinAdminPengguna.ItemsSelected(0)  
  128.   If Me.listSeleksi.RowSource <> "" Then  
  129.     Me.listSeleksi.RowSource = Me.listSeleksi.RowSource & ";" & Me.ijinAdminPengguna  
  130.   Else  
  131.     Me.listSeleksi.RowSource = Me.ijinAdminPengguna  
  132.   End If  
  133.   If UBound(strLista) - 1 = -1 Then  
  134.     Me.ijinAdminPengguna.RowSource = ""  
  135.     Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)  
  136.     Exit Sub  
  137.   End If  
  138.   ReDim strp(UBound(strLista) - 1)  
  139.   i = 0  
  140.   For n = LBound(strLista) To UBound(strLista)  
  141.     If strLista(n) <> Me.ijinAdminPengguna Then  
  142.       strp(i) = strLista(n)  
  143.       i = i + 1  
  144.     End If  
  145.   Next n  
  146.   Me.ijinAdminPengguna.RowSource = Join(strp, ";")  
  147.   ReDim strLista(i)  
  148.   strLista = strp  
  149.   If p < Me.ijinAdminPengguna.ListCount Then  
  150.     Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(p)  
  151.   Else  
  152.     Me.ijinAdminPengguna = Me.ijinAdminPengguna.ItemData(Me. ijinAdminPengguna.ListCount - 1)  
  153.   End If  
  154.   Me.daftarIjin = Join(Split(Me.listSeleksi.RowSource, ";"), Me.logikaIjin)  
  155. End Sub  

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

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