Access
 sql >> Teknologi Basis Data >  >> RDS >> Access

Membuat Menu Akses dengan Kontrol Tampilan Pohon

Menu Proyek Microsoft Access, setelah selesai dengan Kontrol Tampilan Pohon, akan terlihat seperti Gambar di bawah ini.

Gambar di atas menunjukkan Opsi ketiga Grup Laporan Laporan Kustom dipilih dan disorot, dengan Formulir Parameter Filter Laporan terbuka, tumpang tindih dengan Layar Menu, untuk input Pengguna.

Sebelum membahasnya, dalam Pelajaran Minggu lalu, kita telah mempelajari cara mengatur item terkait dalam urutan hierarkis, menggunakan Kontrol Tampilan Pohon Microsoft, berdasarkan Contoh tabel data.

Saya telah menegaskan minggu lalu, bahwa item terkait dalam data kontrol Tree View tidak harus bersebelahan. Setelah ini, Anda akan lebih jelas tentang cara memperbarui Relative Kunci dari Node Anak, terlepas dari posisi fisik catatan dalam Tabel, tetapi berdasarkan hubungan dengan ID Node Induknya.

Ini adalah Tabel Data yang telah kami gunakan dan selesaikan dengan latihan minggu lalu:

Dapatkah Anda menambahkan daftar item berikut di akhir tabel di atas dan memperbarui nilai bidang ParentID-nya sehingga tampilan TreeView terlihat seperti contoh gambar di bawah ini:

Rekor baru untuk Tabel catatan item terkait bidang :

  1. Bidang Teks.
  2. Bidang Angka.
  3. Bidang Tanggal/Waktu.
  4. Bidang Hyperlink.

Formulir Kontrol terkait:

  1. Kotak Teks.
  2. Tombol Perintah.
  3. Kotak Kombo.
  4. Kotak Daftar.

Laporkan Kontrol terkait:

  1. Kotak Teks.
  2. Label.
  3. Bagan Grafik.

Tetapkan Nilai ParentID ke item ini sehingga Tampilan Tree View terlihat seperti Gambar berikut:

Sekarang, kita akan melanjutkan dengan pembuatan Menu Proyek MS-Access dan mempelajari apa yang diperlukan untuk membuatnya. Gambar Menu sederhana diberikan di bawah ini:


Ini adalah Menu sederhana dengan hanya tiga grup opsi:Formulir, Tampilan Laporan, dan Makro.

Di bawah Formulir Grup dua opsi diberikan, yang pertama menampilkan catatan tabel Menu kontrol Tree View. Opsi kedua menampilkan record yang sama dalam mode continuous form.

Opsi pertama di bawah Tampilan Laporan menampilkan Laporan produk Kategori catatan, dari Tabel Kategori NorthWind.accdb basis data.

Opsi kedua menampilkan Laporan Daftar Harga Produk.

ketiga opsi membuka Parameter Formulir agar Pengguna dapat mengatur Min maksimum dan Maks rentang nilai Daftar-Harga minimum, untuk memfilter data untuk Laporan Harga-Daftar Produk.

Di bawah Proses Makro Grup, kedua opsi menjalankan Makro1 dan Makro2 masing-masing dan menampilkan pesan yang berbeda.

Kami membutuhkan Tabel Menu dengan catatan opsi di atas dengan beberapa bidang tambahan, selain bidang data ID Unik, Deskripsi, dan ParentID TreeView yang biasa. Gambar Tabel Menu diberikan di bawah ini:

Buat Tabel dengan struktur di atas, tambahkan record di atas, dan simpan dengan nama Menu . ID bidangnya adalah AutoNumber, PID, dan Ketik bidang adalah bidang Numerik, yang lain adalah Bidang Teks.

Kami akrab dengan tiga Bidang Data pertama:ID Unik , Deskripsi, dan ID Orang Tua bidang. Di sini, saya telah mempersingkat nama bidang ParentID menjadi PID .

Kami membutuhkan empat bidang lagi di Tabel Menu, satu bidang Jenis untuk kode jenis objek, dan tiga bidang Formulir , Laporkan, dan Makro .

Jenis Bidang berisi Kode Numerik Jenis Objek Akses untuk mengidentifikasi Opsi yang diklik Pengguna.

  • Bidang Formulir adalah untuk Nama Formulir, Kode jenis objek 1,
  • Bidang Laporan berisi Nama Laporan, Kode jenis objek 2,
  • Bidang Makro adalah untuk Nama Makro, kode jenis objek 3.

Catatan: Semua nama objek dapat dimasukkan ke dalam satu Kolom. Kami telah menggunakan bidang terpisah untuk kejelasan saja. Jika Anda melakukannya, buat perubahan dalam Kode VBA, di mana pun kode tersebut merujuk pada nama bidang yang berbeda.

Berdasarkan nomor kode, kita dapat mengambil Nama Objek, dari bidangnya masing-masing dan memanggil DoCmd.Openform atau Docmd.OpenReport atau Docmd.RunMacro untuk menjalankan tindakan pada Klik Node Anak.

Sekarang, kita perlu menyimpan Kode Tipe dan Nama Objek pada Node Anak. Kita akan membahas topik itu saat kita mulai Menambahkan Node ke kontrol Tree View.

Kami membutuhkan dua Tabel data lagi untuk Contoh Formulir dan Laporan. Kategori Tabel dan Produk Tabel, dari NorthWind.accdb contoh Basis Data. Untuk menghemat waktu Anda, saya telah melampirkan Basis Data Demo dengan semua Objek dan Program di akhir Halaman ini untuk Mengunduh dan mencobanya.

Buat dua Form menggunakan Tabel Menu dengan nama Data Entry dan Formulir lain Tampilan Data terus menerus Mode formulir.

Buat dua laporan, satu di Tabel Kategori dengan nama laporan:Kategori, laporan lain pada Tabel Produk dengan nama Cantuman Produk . Tambahkan Label yang panjang kontrol di bawah judul utama pada Laporan Cantuman Produk dan ubah Nilai Properti Nama menjadi Rentang .

Buat formulir kecil dengan dua Kotak Teks yang tidak terikat dan ubah namanya Nilai Properti menjadi Min &Maks, seperti desain yang diberikan di bawah ini:

Tambahkan dua Tombol Perintah seperti yang ditunjukkan di atas. Ubah Teks Nilai Properti Tombol pertama untuk Membuka Laporan t dan Nama Nilai Properti ke cmdReport .

Ubah Keterangan Tombol Perintah Kedua menjadi Batal dan Nama Nilai properti menjadi cmdCancel .

Tampilkan Modul Kode Formulir. Salin dan Tempel Kode berikut ke dalam Modul Formulir dan simpan Formulir:

Private Sub cmdOpen_Click()
Dim mn, mx, fltr As String
mn = Nz(Me![Min], 0)
mx = Nz(Me![Max], 9999)
If (mn + mx) > 0 Then
    fltr = "[List Price] > " & mn & " And " & "[List Price] <= " & mx
    DoCmd.OpenReport "Products Listing", acViewReport, , fltr, , fltr
Else
    DoCmd.OpenReport "Products Listing", acViewReport
End If

End Sub

Private Sub cmdCancel_Click()
DoCmd.Close
End Sub

Ketika Pengguna menetapkan Rentang Nilai dengan memasukkan rentang Harga Daftar Minimum dan Maksimum di masing-masing Kotak Teks, String kriteria Filter Laporan dibuat. Filter Laporan Nilai string diteruskan ke Cantuman Produk Laporkan sebagai Parameter perintah Buka Laporan. Nilai Filter String juga diteruskan sebagai OpenArgs (Argumen Terbuka) Parameter.

Parameter Filter memfilter Data Laporan, berdasarkan Kriteria, yang ditentukan dalam bidang Min &Maks, dan nilai argumen terbuka disalin ke Rentang Label Caption saat Laporan dibuka.

Salin dan Tempel Kode berikut ke dalam Cantuman Produk Modul VBA Laporan:

Private Sub Report_Open(Cancel As Integer)
    DoCmd.Close acForm, "Parameter"
    Me.Range.Caption = Nz(Me.OpenArgs, "")
End Sub
  1. Buat formulir baru, dengan nama frmMenu, dan tambahkan Microsoft TreeView Control dari Daftar Kontrol Activex. Ubah ukuran Control seperti yang ditunjukkan pada Design View di bawah ini:

  2. Ubah nama Kontrol Tampilan Pohon menjadi TreeView0 di Lembar Properti normal.

  3. Tambahkan Tombol Perintah di bawah kontrol Tampilan Pohon. Ubah Nama its Nilai Properti ke cmdExit dan Teks Nilai properti untuk Keluar .

  4. Klik kanan pada Kontrol Tampilan Pohon dan sorot TreeCtrl_Object opsi dan pilih Properti untuk menampilkan Lembar Properti.

  5. Ubah Nilai Properti berikut seperti yang diberikan di bawah ini:

  • Gaya =7 (tvwTreeLinesPlusMinusPictureText)
  • Gaya Garis =1 (tvwRootLines)
  • LabelEdit =1 (tvwManual)

Minggu lalu kami telah mengubah dua Nilai Properti pertama. Saat LabelEdit Nilai default properti adalah 0 - tvwOtomatis, Mengklik pada Node dua kali (bukan klik dua kali) Node-Text akan masuk ke Edit Mode dan Anda dapat mengubah Teks. Tapi itu tidak akan langsung memperbarui bidang sumber data. Dengan mengubahnya menjadi 1 – tvwManual akan mencegahnya masuk ke mode edit.

Kita dapat mengubah ini melalui Kode dengan menambahkan baris berikut di Form_Load() Event Procedure:

With Me.TreeView0.Object
    .Style = tvwTreelinesPlusMinusPictureText
    .LineStyle = tvwRootLines	
    .LabelEdit = tvwManual
End With

Minggu lalu kami telah menggunakan Form_Load() Event Procedure untuk membaca nilai Tree View Node untuk membuat Root-level dan Child Node. Kami membutuhkan Prosedur yang sama di sini juga dengan beberapa baris Kode tambahan.

Selain itu, kita perlu menjebak Node_Click() Peristiwa Node untuk memeriksa Opsi mana yang telah dipilih Pengguna.

Salin dan Tempel Kode VBA berikut ke dalam Modul Formulir dan simpan Formulir.

Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim nodKey As String Dim PKey As String Dim strText As String Dim strSQL As String Dim tmpNod As MSComctlLib.Node Dim Typ As Variant Set tv = Me.TreeView0.Object tv.Nodes.Clear

‘Change the TreeView Control Properties

With tv
    .Style = tvwTreelinesPlusMinusPictureText
    .LineStyle = tvwRootLines
    .LabelEdit = tvwManual
    .Font.Name = "Verdana"
End With

strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!PID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc Set tmpNod = tv.Nodes.Add(, , nodKey, strText) 'Root-Level Node Description in Bold letters With tmpNod .Bold = True End With Else PKey = KeyPrfx & CStr(rst!PID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc Set tmpNod = tv.Nodes.Add(PKey, tvwChild, nodKey, strText) 'Check for the presense of Type Code If Nz(rst!Type, 0) > 0 Then Typ = rst!Type Select Case Typ Case 1 'save type Code & Form Name in Node Tag Property tmpNod.Tag = Typ & rst!Form Case 2 'save type Code & Report Name in Node Tag Property tmpNod.Tag = Typ & rst!Report Case 3 'save type Code & Macro Name in Node Tag Property tmpNod.Tag = Typ & rst!Macro End Select End If End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub Private Sub cmdExit_Click() If MsgBox("Close Menu Form? ", vbYesNo, "cmdExit_Click()") = vbYes Then DoCmd.Close End If End Sub Private Sub TreeView0_NodeClick(ByVal Node As Object) Dim varTag, typeid As Integer Dim objName As String, nodOn as MSComctlLib.Node If Node.Expanded = False Then Node.Expanded = True Else Node.Expanded = False End If

‘Reset the earlier lighlight to normal

For Each nodOn In tv.Nodes
    nodOn.BackColor = vbWhite
    nodOn.ForeColor = vbBlack
Next

‘changes BackColor to light Blue and ForeColor White

tv.Nodes.Item(Node.Key).BackColor = RGB(0, 143, 255)
tv.Nodes.Item(Node.Key).ForeColor = vbWhite

‘—Highlight code ends-

varTag = Nz(Node.Tag, "") If Len(varTag) > 0 Then typeid = Val(varTag) objName = Mid(varTag, 2) End If Select Case typeid Case 1 DoCmd.OpenForm objName, acNormal Case 2 DoCmd.OpenReport objName, acViewPreview Case 3 DoCmd.RunMacro objName End Select End Sub

Pada Area Deklarasi Global Modul, Objek Tree View dideklarasikan. Variabel konstan KeyPrfx dideklarasikan dengan nilai “X”.

Form_Load() Prosedur Acara dari Artikel minggu lalu telah kami modifikasi dengan Kode tambahan. Saya telah mengomentari segmen Kode baru untuk memberikan indikasi tentang fungsinya, tetapi akan menjelaskan fungsinya.

Prosedur mendeklarasikan Database, Recordset, dan empat Variabel String. Dua baris berikutnya mendeklarasikan Objek Node sementara:tmpNod dan Ketik Variabel Varian dideklarasikan.

Selanjutnya, Obyek TreeView tv ditetapkan dengan TreeView0 Objek pada Formulir. Node TreeView0 yang ada, jika ada, dibersihkan dengan pernyataan:tv.Nodes.Clear , sebagai persiapan untuk memuat semua Node lagi.

Kami telah menerapkan Kode berikut untuk mengubah Properti kontrol Tree View melalui Kode, bukan melalui Lembar Properti.

With tv
    .Style = tvwTreelinesPlusMinusPictureText
    .LineStyle = tvwRootLines
    .LabelEdit = tvwManual
    .Font.Name = "Verdana"
End With 

Font Tampilan Pohon diubah menjadi Verdana. Selain itu, kami akan menghadirkan lebih banyak fungsi seperti memperluas atau menciutkan semua Grup Menu dengan satu klik, daripada memperluas atau menciutkan satu grup secara manual.

SQL String baru dimodifikasi untuk menambahkan Fields Type, Form, Report, dan Macro Fields baru dari Tabel Menu.

Catatan pertama Tabel Menu diperiksa untuk keberadaan nilai apa pun di PID bidang, jika kosong maka itu adalah catatan Node tingkat Root. Itu ditambahkan ke Objek Tampilan Pohon sebagai Node tingkat Root dan referensinya disimpan di tmpNod Objek.

Node memiliki beberapa properti seperti Forecolor, Bold, dan beberapa lainnya dari itu kami telah mengambil Bold Properti dan ditetapkan Benar untuk membuat level Root Node terlihat berbeda dari Child Node-nya.

Jika bukan entri Root Node maka memiliki nilai PID, program mengambil Else klausa dan catatan ditambahkan sebagai Node Anak. Di sini, kami memeriksa Jenis nilai bidang. Jika berisi salah satu dari tiga nilai 1, 2, atau 3 maka kita harus mengambil nilai dari Form, Report, atau Macro Name beserta Type Codenya dan menggabungkannya (seperti ”1Data Entry” , “Daftar 2Kategori” dll.) dan simpan di Tag Properti Node Anak. Kami akrab dengan Properti Tag di kontrol Akses, seperti Kotak Teks, Label, Tombol Perintah, dan lainnya, tetapi kami jarang menggunakannya.

cmdExit_Click() Prosedur menutup Formulir Menu jika respon dari Pengguna setuju.

Saat pengguna mengklik Node Anak, nilai yang telah kita simpan di Tag Properti harus diekstraksi dan diperiksa untuk menentukan apa yang harus dilakukan selanjutnya. Untuk ini, kita memerlukan TreeView0_NodeClick() Prosedur Acara.

Private Sub TreeView0_NodeClick(ByVal Node As Object) Dim varTag, typeid As Integer Dim objName As String, nodOn as MSComctlLib.Node If Node.Expanded = False Then Node.Expanded = True Else Node.Expanded = False End If

‘Reset the earlier lighlight to normal

For Each nodOn In tv.Nodes nodOn.BackColor = vbWhite nodOn.ForeColor = vbBlack Next nodOn

‘changes BackColor to light Blue and ForeColor White tv.Nodes.Item(Node.Key).BackColor = RGB(0, 143, 255) tv.Nodes.Item(Node.Key).ForeColor = vbWhite ‘—Highlight code ends- varTag = Nz(Node.Tag, "") If Len(varTag) > 0 Then typeid = Val(varTag) objName = Mid(varTag, 2) End If Select Case typeid Case 1 DoCmd.OpenForm objName, acNormal Case 2 DoCmd.OpenReport objName, acViewPreview Case 3 DoCmd.RunMacro objName End Select End Sub

Prosedur Acara Click() menerima Referensi Node yang diklik sebagai Parameter dalam objek Node . Pada awal prosedur ini, kami telah mendeklarasikan beberapa Variabel.

Beberapa baris berikutnya memeriksa apakah Node yang diklik dalam keadaan diperluas atau diciutkan.

Biasanya, untuk memperluas Node, untuk menampilkan Node turunannya yang tersembunyi, kita bisa mengklik + (simbol plus) di sisi kiri Node atau klik dua kali pada Node itu sendiri. Mengklik dua kali pada Node lagi atau mengklik – (simbol minus) akan menyembunyikan Child Node.

Dengan segmen Kode berikut, kita dapat memperluas atau menciutkan Child-Nodes dengan sekali klik:

If Node.Expanded = False Then
    Node.Expanded = True
Else
    Node.Expanded = False
End If 

Enam baris berikutnya yang dapat dieksekusi memastikan bahwa Node yang menerima Klik tetap disorot.

‘Reset the earlier Highlight to Normal

For Each nodOn In tv.Nodes nodOn.BackColor = vbWhite nodOn.ForeColor = vbBlack Next nodOn

‘Changes BackColor to light Blue and ForeColor White tv.Nodes.Item(Node.Key).BackColor = RGB(0, 143, 255) tv.Nodes.Item(Node.Key).ForeColor = vbWhite ‘—Highlight code ends-

Selanjutnya, nilai Properti Tag dibacakan ke dalam varTag Variabel. Jika tidak kosong maka nilainya dibagi menjadi dua bagian. Nilai Numerik diekstraksi dan disimpan di Typid variabel dan bagian Nama Objek disimpan dalam variabel objName .

Bergantung pada nilai dalam variabel Typid, Docmd dijalankan untuk membuka Formulir, Laporan, atau Menjalankan Makro.

Kami akan menambahkan dua Tombol Perintah lagi di bagian atas Menu. Satu untuk memperluas semua Node dengan satu Klik dan yang kedua untuk menutup semua Node.

  1. Tambahkan dua Tombol Perintah lagi di area atas Kontrol Tampilan Pohon seperti yang ditunjukkan pada desain di bawah ini.
  2. Ubah Nama Nilai Properti dari Tombol Perintah kiri ke cmdExpand dan Teks untuk Luaskan Semua .
  3. Demikian pula, ubah Nama Tombol Perintah sisi kanan Properti untuk cmdCollapse dan Teks untuk Ciutkan Semua.
  4. Copy dan Paste Kode VBA berikut di bawah Kode yang ada di frmMenu Modul Formulir dan simpan Formulir.
Private Sub cmdExpand_Click()
Dim Nodexp As MSComctlLib.Node

For Each Nodexp In tv.Nodes
    If Nodexp.Expanded = False Then
        Nodexp.Expanded = True
    End If
Next Nodexp
End Sub


Private Sub cmdCollapse_Click()
Dim Nodexp As MSComctlLib.Node

For Each Nodexp In tv.Nodes
    If Nodexp.Expanded = True Then
        Nodexp.Expanded = False
    End If
Next Nodexp
End Sub

Di awal cmdExpand_Click() Acara, kami telah mendeklarasikan objek Tree View Node NodExp. Untuk . . . Selanjutnya loop mengambil satu Node pada satu waktu dan memeriksa apakah itu dalam bentuk yang diperluas atau tidak. Jika tidak maka Diperluas Nilai properti disetel ke Benar .

Demikian pula, cmdCollapse_Click() Peristiwa membuat pemeriksaan serupa dan jika dalam keadaan diperluas maka nilai Properti yang Diperluas disetel ke Salah.

Semua Node Kontrol Tampilan Pohon lengkap dapat diperluas dan membuat semua Node anak mereka terlihat sekaligus atau semua Node Anak disembunyikan kecuali Node tingkat Root.

Semoga Anda menikmati membuat Menu baru untuk Proyek Anda. Jika Anda menjalankan tugas desain selangkah demi selangkah, Menu Anda akan terlihat seperti Gambar Menu selesai yang diberikan di bagian atas.

Selama Tahun 2007, saya telah merancang Menu di salah satu Proyek saya, untuk Sistem Kontrak Service Kendaraan, menggunakan Kontrol Tab dengan beberapa Halaman. Setiap Halaman memiliki 10 atau lebih Opsi dan untuk membuat setiap Halaman muncul secara bergantian di area yang sama ketika pengguna mengklik Tombol Perintah yang berjajar di kedua sisi Menu. Tombol Perintah di sisi kanan juga berubah, berdasarkan pemilihan tombol sisi kiri.

Klik untuk Memperbesar

Anda dapat menemukan Desain Menu dengan Artikel Kontrol Tab di Tautan ini:https://www.msaccesstips.com/2007/06/control-screen-menu-design.html


MODUL KELAS

  1. Modul Kelas MS-Access dan VBA
  2. Objek dan Array Kelas VBA MS-Access
  3. Kelas Dasar MS-Access dan Objek Turunannya
  4. Kelas Berbasis VBA dan Objek Turunan-2
  5. Varian Kelas Dasar dan Objek Turunan
  6. Set Rekaman MS-Access dan Modul Kelas
  7. Mengakses Modul Kelas dan Kelas Pembungkus
  8. Fungsi Kelas Pembungkus


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tips dan Trik Microsoft Access Bagian 2 – Formulir

  2. Mengapa Setiap Usaha Kecil Membutuhkan Database

  3. Bagaimana Kami Menggunakan Basis Data dalam Kehidupan Sehari-hari

  4. Atur Kantor Rumah Anda untuk Meningkatkan Produktivitas

  5. Apa itu Database File Datar? Apa Bedanya dengan Database Relasional?