membuat aplikasi interaktif dengan vb 2010 dan access 2010

Download Membuat Aplikasi Interaktif Dengan Vb 2010 Dan Access 2010

If you can't read please download the document

Upload: andang-x-nank

Post on 09-Sep-2015

252 views

Category:

Documents


2 download

DESCRIPTION

cara membuat aplikasi vba excel

TRANSCRIPT

1KATA PENGANTARVisual Basic merupakan salah satu bahasa pemograman yang popular sejak pertama kalidi rilis tahun 1991. Karena kehandalannya maka Microsoft selalu membuat perbaikan disana-siniuntuk setiap versi terbarunya.Pada bulan April yang lalu Microsoft telah merilis Visual Studio 2010 yang didalamnyaterdapat Visual Basic terbaru yaitu Visual Basic 10. Pada versi ini banyak sekali fitur-fitur yangmemudahkan programmer dalam develop aplikasi. Dan untuk mengetahui fitur-fitur apa sajayang terdapat pada VB 10 dan VS 2010 buku ini dapat dijadikan salah satu referensi karena dikemas dengan gamblang dan mudah dimengerti, sekaligus di sertakan dengan contoh pembuatanaplikasi.Selain membahas Visual Basic buku ini juga membahas tentang fitur-fitur baru pada MsAccess 2010, dimana Ms Access 2010 dapat dijadikan sebaga database pada suatu aplikasi.Salah satu kelebihan buku ini adalah, bagaimana pembaca dibimbing untuk membuataplikasi dengan VB 10 dan Ms Access 2010. Walaupun sebelumnya pembaca tidak memilikipengetahuan dengan 2 (dua) produk ini, tapi dengan bimbingan buku ini pembaca dapatmengikuti dengan baik.Tetapi penulis juga manusia, jadi buku ini masih jauh dari sempurna dan untuk itupenulis menantikan saran dan usulan dari para pembaca untuk perbaikan penulisan di masa yangakan datang. Saran dan usulan para pembaca dapat dilayangkan ke alamat email [email protected]" [email protected] panjatkan puja-puji syukur kehadirat Allah SWT, yang telah melimpahkanrahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan penulisan buku ini. Bukuini dibuat sebagai tugas TIK akhir semester 2.Penulis,Andang Sadewa3455Ketika anak Adam meninggal, terputuslah amalannya kecuali dari tiga perkara :Shadaqah jariyah, ilmu yang bermanfaat bagi orang sesudahnya dan anakshalih yang mendo'akannya.Semoga ini menjadi Ilmu yang bermanfaat. Amin6DAFTAR ISIHalamanKATA PENGANTAR.............................................................................................................2PREVIEW VISUAL BASIC 2010 .........................................................................................3DAFTAR ISI............................................................................................................................7BAB I. MS ACCESS 20101.1 Fitur Fitur Ms 2010 .............................................................................................91.2 Membuat Database dan Table ................................................................................161.3 Membuat Query......................................................................................................20BAB II. VISUAL STUDIO & VISUAL BASIC 20102.1 Visual Studio 2010 IDE .........................................................................................232.2 Fitur Fitur Baru pada VS 2010 ............................................................................242.3 Fitur Fitur Baru pada Visual Basic 10 .................................................................282.4 Membuat Project Baru............................................................................................372.5 Menambah Control Pada Form ..............................................................................40BAB III. ANALISIS PROGRAM73.1 Analisa Proses.....453.2 Analisa Pengguna....................................................................................................45BAB IV. PEMBUATAN APLIKASI4.1 Membuat Database..................................................................................................474.2 Bekerja dengan VB 10 (Membuat Management User)...........................................534.3 Membuat Form Group ............................................................................................1044.4 Membuat Form Genre.............................................................................................1184.5 Membuat Form Customer .......................................................................................1254.6 Membuat Form DVD ..............................................................................................1384.7 Membuat Form Rental DVD ..................................................................................1574.8 Membuat Form Return DVD ..................................................................................1738BAB IMS ACCESS 2010Pada bab ini akan dijelaskan tentang fitur-fitur baru pada Ms Access 2010, dan cara pengunaandasar pada Ms Access 2010, seperti membuat table, query maupun relationships.Sebelum kita masuk ke penjelasan penggunaan MS Access 2010, terlebih dahulu kita membahastentang Ms Office 2010 pada umumnya. Untuk Ms Office 2010 ini terdapat 7 versi yang tersediaseperti dibawah. Office Professional Plus 2010Office Professional 2010Office Standard 2010Office Home and Business 2010Office Home and Student 2010Office Professional Academic 2010Office Starter 2010Ms Office 2010 dapat berjalan pada office 2007, dan untuk menginstall Ms Office 2010 dibutuhkan system requirements sebagai berikut : Processor 500 MHZ atau lebihRAM 256 MB atau lebihHard disk 2 GBCD atau DVD driveDisplay 1024 x 768 atau lebihOS : Windows Xp SP3, Windows Vista SP1 (32 atau 64 bit), Windows 7 (32 atau 64bit), Windows Server 2003 R2 dengan SP2 (32 atau 64 bit) dan Windows Server 2008dengan SP1 (32 atau 64 bit)1. 1 Fitur - Fitur Ms 2010Sebelum kita menggunakan suatu produk, kita biasanya terlebih dahulu kita selalumencari tau bagaimana kelebihan produk baru ini di banding dengan produk sebelumnya.9Oleh karena disini penulis akan menjelelaskan beberapa fitur-fitur terbaru untuk MsAccess 2010.Ribbon Contextual tabsRecord Navigation Database searchGambar 1.1 View Control Quick Start FieldsPada versi sebelumnya untuk membuat field seperti berikut (Address, City, State,Zip dan Country) kita melakukan nya satu persatu. Tapi dengan Ms Access 2010ini kita cukup hanya sekali klik, yaitu dengan menggunakan Quick Start. Cara nyabuka table yang ingin ditambahkan field nya lalu pada Table Tool Fields Tab klikMore Fields pada Add & Delete Grop. Lalu Scroll ke bawah dan pada Quick Startpilih Address.10Gambar 1.2Gambar 1.3Terdapat beberapa field didalam Quick start, dan kita dapat mengganti optionspada field. Sebagai contoh, jika kita memilih Payment, maka secara otomatis akanterdapat beberapa pilihan (Cahs, Credit Card, Check dan In Kind) kita dapat11mengubah pilihan ini, dengan cara klik kanan pada field, lalu pilih Edit List Item,maka akan muncul jendela seperti dibawah. Lalu ganti sesuai yang dinginkan .Gambar 1.4 Menu dan RibbonUntuk fitur ini terdapat pada aplikasi Ms Office lain nya. Seperti kita ketahui padaMs Access 2007 terdapat Office Button pada pojok kiri atas, dan fitur ini telahdihilangkan pada ms Access 2010. Pada Ms Access 2010 terdapat menu Filesebagai ganti nya. Dan pada Menu File terdapat beberapa item seperti Info,Recent, New dan lainnya.Gambar 1.512 Application PartUntuk menggunakan application part, click Create Tab dan klik Application Partmaka list dari application part akan tampil seperti dibawah. Lalu pilih applicationpart yang dinginkan.Gambar 1.6Office ThemesUntuk Ms Access 2010 ini ada fitur yang memudahkan kita untuk mendesignform atau report dengan sekali klik. Dimana kita dapat memilih theme yang kitasuka. Theme ini sudah mengatur dari warna dan font pada form maupun report.Klik Form/Report yang mau diubah, lalu pada Contextual > Design pilih themespada Themes group. Seperti gambar dibawah.13Gambar 1.7 Calculate FieldsPada fitur ini kita bisa membuat sebuah field uang otomatis mengkalkulasi antarafield. Seperti contoh kita memilki field A yang bernilai 2 dan Field B bernilai 5,lalu secara otomatis kita ingin membuat sebuah field untuk menampung jumlahdari Field A dan B, dengan menggunaka fitur ini kita dapat mengkalkulasi 2 fieldtersebut. Untuk penggunaannya, buka table yang di inginkan, lalu padaContextual Tools > Fields, pilih More Fields pada Add & Delete Group. Dan klikCalculate Fields dan pilih type dari field yang dinginkan.Gambar 1.8Lalu akan tampil Expression Builder seperti dibawah, masukkan formula untukhasil dari expression value nya.14Gambar 1.9 Data Bars dan Conditional FormatingData Bars membantu kita dalam membaca sebuah laporan, seperti melakukanperbandingan data, kadang tidak setiap orang mengerti maksud dari laporantersebut. Dengan adanya data bars membatu secara visualisasi.. Fitur ini sekarangsudah tersedia pada Ms Access 2010.Gambar 1.1015Buka Report yang dinginkan, Report Layout Tools > Format, lalu pilihConditional Formatting. Maka akan muncul tampilan seperti dibawah. Pilih Fieldyang dinginkan pada Show Formatting rules for :Gambar 1.11Pilih New Rule, pada Select a rule type, pilih compare to other records. Dan gantiwarna dari Bar, dan klik OK.Gambar 1.12 Navigation FormsSesuai dengan namanya navigation forms, fitur ini memudahkan kita dalammembuat navigasi dari form/report, hanya dengan menarik form kedalamNavigation Forms. Navigation Forms berfungsi untuk memudahkan dalammencari form atau Report yang dinginkan. Untuk membuat Navigation Formsikuti langkah-langkah sebagai berikut. Pada Tab Create, lalu klik NavigationForms pada group forms. Maka akan muncul layout dari Navigation forms.16Gambar 1.13Pilih layout yang dinginkan. Drag dan Drop form atau report kedalam NavigationForms.Gambar 1.1417 MacroUntuk Ms Access 2010 ini dalam penggunaan macro menjadi lebih mudah.Dimana dapat dilakukan dengan Drag dan Drop saja.Gambar 1.151. 2 Membuat Database dan TablePenulis bersumsi bahwa tidak semua pembaca sudah bisa atau pernah menggunakan MsAccess. Oleh karena itu pada bab ini juga penulis menjelaskan bagaimana cara membuatDatabase dan Table, yang nanti nya pada bab kedepan penulis tidak menjelaskan secaradetail tentang membuat database dan table kembali.Pada Start > All Programs > Ms Office > Ms Access 2010, maka akan muncul tampilanseperti dibawah.18Gambar 1.16Lalu pilih Blank database, kemudian ganti nama database dan browse dimana file akandisimpan. Kemudian teka button Create. Dan tampilan dari Ms Access pun akan bergantimenjadi seperti gambar dibawah. Dengan default Table1.Gambar 1.1719Dengan melakukan langkah-langkah dibawah maka kita telah memiliki sebuah database.Langkah selanjutnya adalah membuat table.Klik Tab Create, lalu klik Table pada Tables group. Lalu Contextual Table Tools >Fields, klik View pada Views Group dan pilih Design View. Maka akan muncul dialogSave As, ketikkan nama table yang dinginkan.Gambar 1.18Gambar 1.19Setelah menekan button OK, maka kita akan masuk pada tampilan Design untuk Table,seperti gambar dibawah.201 2 34Gambar 1.20Keterangan :1. Field Name : Merupakan tempat menambah menghapus dan mengganti Nama Fielddai table.2. DataType : Tempat untuk mengganti Tipe Data dari Field.3. Description : Tempat untuk mendeskripsikan field4. General : Merupakan Properties dari fieldDisinilah merupakan tempat untuk mengganti properties seperti, field size, format,Input Mask dan lain-lain.Lalu tekan button Save atau Ctrl + Save untuk menyimpan hasil dari perubahan table.21SaveGambar 1.211. 3 Membuat QuerySetelah selesai dengan membuat table, kita lanjutkan dengan membuat query, mungkinmasih banyak pembaca tidak mengetahui dari fungsi query. Query dapat berfungsi untukmenampilkan data dari 1 table atau lebih, atau untuk proses insert, delete maupun update,yang bisa diakses diluar Ms Access 2010, seperti Visual Basic 10.Untuk membuat Query (Select table) ikuti langkah-langkah seperti berikut : Klik TabCreate, selanjutnya klik Query Design pada Queries group.Gambar 1.22Selanjutnya akan tampil jendela Show Table, pilih table yang ingin di tampilkan lalutekan button Add, lalu klik button Close untuk menutup tampilan show table. Laluklik ganda field yang ingin ditampilkan, seperti gambar dibawah.22Gambar 1.23Untuk menampilkan hasil dari query pada Query Design Tools, klik View pada ResultGroup dan pilih DatasheetViewGambar 1.24Gambar 1.2523Untuk melihat sintaks SQL nya pilih SQL View. Kita dapat memodifikasi sintaks SQLseperti dibawah ini, contoh jika kita ingin menampilkan dengan menggunakan criteria(parameter).SELECT t_cust.refer_cust, t_cust.first_name, t_cust.last_name, t_cust.telp,t_cust.emailFROM t_cust WHERE (((t_cust.refer_cust)=[@refer_cust]));Lalu pada View pilih DatasheetView, maka akan tampil dialog seperti dibawah.Gambar 1.26Untuk kedepan penulis hanya memberikan sintaks dari SQL pada setiap query tanpamenjelaskan secara detail pembuatanya. Pembaca dapat copy paste sintaks SQL danmodifikasi pada jendela SQL View.24BAB IIVISUAL STUDIO & VISUAL BASIC 2010Pada bab ini akan di jelaskan dasar-dasar Visual Studio dan Visual Basic 2010, yangdimana akan membantu pembaca untuk membuat aplikasi pada bab berikut nya.2. 1 Visual Studio 2010 IDEUntuk membuat aplikasi sebenarnya kita tidak harus menggunakan Visual Studio 2010, kitadapat menuliskan semua code dengan menggunakan text editor seperti notepad. Tetapidengan Visual Studio 2010 IDE akan memudahkan kita dalam membuat aplikasi karenadidukung dengan fitur-fitur yang memudahkan seorang programmer.Untuk Visual Studio 2010 terdapat 5 versi yang tersedia : ExpressProfessionalProfessional with MSDNPremium with MSDNUltimate with MSDN Gambar 2.1 252. 2 Fitur-Fitur Baru pada VS 2010Berikut beberapa penjelasan tentang improvement yang ada pada VS 2010. Multi windowsPada fitur ini kita dapat menarik windows keluar dari IDE dengan cara Ctrl + Klikganda.Gambar 2.2 Multi targetingSebenarnya fitur ini sudah ada pada Visual Studio versi sebelumnya, Cuma yangmembedakan dengan VS 2010, VS 2010 akan menampilkan ToolBox dan propertiessesuai dengan .net framework yang dipilih.Gambar 2.326 Add ReferencesPada Visual Studio versi sebelumnya jika kita melakukan Add References pada projectitu membutuhkan waktu yang cukup mengganggu, untuk versi 2010 ini waktu yangdibutukan sangat cepat, dan focus pada jendela Add References pada tab Projects.Gambar 2.4 ZoomFungsi ini sangat membantu sekali pada saat kita di code editor. Kita dapat memperbesardan memperkecil pada Code Editor dengan menekan Ctrl + Mouse Scroll.Gambar 2.427 Navigate ToBiasanya pada saat melakukan pemograman sering sekali kita melakukan pencariankata-kata, dan untuk VS versi sebelumnya kita menggunakan fungsi search. Pada versi2010 ini kita dapat menggunakan fungsi Navigate To dengan cara menekan Ctrl + ,(koma) atau Edit > Navigate To. Dengan mengetikkan kata yang dicari maka secaraotomatis pada Result Found akan memfilter kata yang dicari, dan cukup meng-klik padalist maka secara otomatis akan menuju ke lokasi.Gambar 2.5 Generate Sequence Diagram.Fungsi ini hanya bisa dilakukan pada Versi Premium dan Ultimate. Fungsi ini adalahuntuk membuat diagram pada method. Dengan cara klik kanan pada function dan pilihGenerate Sequence Diagram.28Gambar 2.6 Generate From UsagePada fitur ini kita dapat menggunakan Class dan member sebelum kita membuatnya.Seperti kita ketahui jika suatu class belum dibuat maka tidak bisa kita melakukandeklarasi terhadap class tersebut. Untuk VS 2010 kita dapat menggenerate Class tersebutdengan cara. Tekan Ctrl + . (titik) pada error list, maka akan tampil tooltip sepertidibawah.Gambar 2.729Lalu pilih Generate New Type untuk bisa memodifikasi class yang dinginkan.Gambar 2.82. 3 Fitur fitur baru pada Visual Basic 10Untuk fitur-fitur baru ini di ambil dari blog Erick Kurniawan, MVP VB(http://mugi.or.id/blogs/erick) Collection InitializerCollection Initializer digunakan untuk menginisialisasi object collection dalam sebuahbaris kode saja, sehingga mempermudah penulisan kode.Pada VB9 untuk menginisialisasi object Collection anda harus menuliskan kode:1: Dim objNama As New List(Of String)2: objNama.Add("Erick")3: objNama.Add("Wely")4: objNama.Add("Lutfie")5: objNama.Add("Ridi")6:7: For Each nama In objNama308: Console.WriteLine(nama)9: NextPada VB10 dengan menggunakan Collection Initializer anda dapat menggunakankeyword from untuk mempersingkat penulisan kode diatas.1: Dim objNama As New List(Of String) From {"erick", "wely", "lutfie", "ridi"}2: For Each nama In objNama3: Console.WriteLine(nama)4: NextAnda juga dapat menggunakannya untuk object Dictionary1: Dim dictMahasiswa As New Dictionary(Of String, String) From {2:3:4: {"23080008", "erick"},{"23080009", "budi"},{"23080010", "anton"}}5: For Each mhs In dictMahasiswa6: Console.WriteLine("Nim :" & mhs.Key & "Nama :" & mhs.Value)7: NextJika anda ingin menginisialisasi list of class maka anda dapat menggunakan extensionmethod untuk mengoverride method add yang ada pada object collection.1: Imports System.Runtime.CompilerServices2: Module Module13:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19: 'menggunakan extension methodSub Add(ByVal lstMhs As List(Of Mahasiswa),ByVal nim As String,ByVal nama As String,ByVal ipk As Double)lstMhs.Add(New Mahasiswa With {.Nim = nim, .Nama = nama, .IPK = ipk})End SubSub Main()Dim list As New List(Of Mahasiswa) From {{"23080008", "Erick Kurniawan", 3.4},{"22080009", "Budi Anduk", 3.3}}For Each mhs In listConsole.WriteLine("Nim :" & mhs.Nim & " Nama :" & mhs.Nama & " Ipk:" & mhs.IPK)20:21: NextEnd Sub22:3123: End Module Array LiteralsArrayLiteral memberi kemudahan kepada kita untuk memberi nilai ke object arraysecara langsung, compiler akan secara otomatis meng-infers tipe datanya.1: Dim arr1 = {1, 2, 4, 5, 6} 'infers ke tipe integer2: Dim arr2 = {1, 2.5, 3.5, 5} 'infers ke tipe double3: Dim arr3 = {"erick", "budi"} 'infers ke tipe string4: Dim arr4 = {1, "erick"} 'infers ke tipe object (dengan catatan Option Strict On)5:6: 'untuk array multidimensi7: Dim matrix1 = {{1, 32, 12}, {23, 45, 67}} 'infers ke tipe int(,)ImplicitLineContinuationPada bahasa VB kita biasanya menggunakan underscore untuk memisahkan satu barislogic code menjadi dua baris code atau lebih. Underscore mengindikasikan bahwa codeyang dipisahkan menjadi beberapa baris tersebut sebenarnya masih satu logic code.Pada VB10 compiler VB akan menambahkan underscore secaraimplicit jadi anda tidakperlu menuliskannya. Namun pada beberapa kasus tertentu anda masih perlumenggunakan underscore. Dengan menggunakan implicit line continuation makadeveloper tidak perlu lagi menuliskan underscore pada sebagain besar baris code yangditulis (ini sangat membantu terutama ketika anda menggunakan LINQ).Compiler VB akan secara implicit menggunakan line continuation pada kodisi-kondisiberikut: Setelah AttributeSetelah karakter koma (,)Setelah karakter dot (.)Setelah binary operatorSetelah LINQ Query ClauseSetelah karakter (, {, or 32Daftar karakter yang mendukung implicit line continuation dapat anda lihat pada tableberikut:33Gambar 2.9Contoh penggunaan implicit line continuation pada VB10:Gambar 2.1034 Auto-implementedPropertiesFitur ini sebenarnya telah dimiliki oleh C# sejak versi 3.0, pada VB fitur ini baruditambahkan pada VB10.Pada VB9 untuk membuat property anda harus menuliskan kode berikut:1: Public Class Mahasiswa2: Private _nim As String3: Public Property Nim() As String4: Get5: Return _nim6: End Get7: Set(ByVal value As String)8: _nim = value9: End Set10: End Property11:12: Private _nama As String13: Public Property Nama() As String14: Get15: Return _nama16: End Get17: Set(ByVal value As String)18: _nama = value19: End Set20: End Property21: End Classdengan menggunakan auto-implemented properties maka anda dapat menuliskan:1: Public Class Mahasiswa2:3: Public Property Nim As StringPublic Property Nama As String4: End Classmaka secara otomatis compiler akan menggenerate field dengan nama yang samadengan property tapi dengan ditambahkan underscore didepannya, property getter dansetter juga akan digenerate otomatis.anda juga dapat menginisialisasi auto-implementedproperties yang anda buat, contohnya:1: Public Class Mahasiswa352:3:4: Property Nim As String = "23082321"Property Nama As String = "Erick Kurniawan"Property Angkatan As New List(Of Integer) From {12, 34, 56}5: Property Ambil As New Matakuliah With {.Kode = "IM2043", .Nama = "WebDatabase"}6: End Classkemudian pada main class cara mengaksesnya:1: Sub Main()2: Dim objMhs As New Mahasiswa3: Console.WriteLine(objMhs.Nim & " " & objMhs.Nama)4: For Each ang In objMhs.Angkatan5: Console.WriteLine(ang)6: Next7: Console.WriteLine(objMhs.Ambil.Kode & " " & objMhs.Ambil.Nama)8: End Sub MultilineLambdasPada blog series kali ini saya ingin mengeksplorasi fitur-fitur baru dari VB10 (VB10akan dirilis bersama dengan VS2010 dan .NET 4.0). Fitur yang akan kita bahas kali iniadalah Multiline Lambdas, sebenarnya fitur ini sudah disupport di C# 3.0, tapi VB barumenambahkan fitur ini pada VB10.Pada VB10 anda dapat menggunakan Multiline Lambdas sebagai berikut:1: Dim bil() As Integer = {1, 2, 3, 4, 5, 6, 7}2: bil = Array.FindAll(bil, Function(n)3:4:5:6:7: Console.WriteLine("Array ke-" & n)If n Mod 2 = 0 ThenReturn nEnd IfEnd Function)8: For Each num In bil9: Console.WriteLine(num)10: Nextoutputnya :36Gambar 2.11Sama seperti Lambda Expression pada VB9 maka parameter dari Lambda tersebut akandiinfer secara otomatis oleh compiler (pada contoh diatas n akan diinfer menjadi tipeinteger).Dengan menggunakan Multiline Lambda anda dapat membuat anonymous delegatedengan mudah contohnya:1: Dim cthDelegate = Function(n As Integer)2:3:4:5:6:7:8:9:10:11:12:13: Dim count = 0For i = 1 To nIf n Mod i = 0 Thencount += 1End IfNextIf count = 2 ThenReturn "Bilangan Prima"ElseReturn "Bukan Bilangan Prima"End IfEnd Function14:15: Console.WriteLine(cthDelegate(17))outputnya :Gambar 2.1237Jika anda cermati dari kode diatas maka nilai kembalian dari function tersebut adalahtipe String (compiler juga secara otomatis akan meng-infer tipenya). Anda juga dapatsecara eksplisit menentukan tipe kembalian dari function diatas sehingga compiler tidakakan meng-infer tipenya secara otomatis.1: Dim cthDelegate = Function(n As Integer) as String2:3:4:5:6:7:8:9:10:11:12:13: Dim count = 0For i = 1 To nIf n Mod i = 0 Thencount += 1End IfNextIf count = 2 ThenReturn "Bilangan Prima"ElseReturn "Bukan Bilangan Prima"End IfEnd Function Sub LambdasSelain menggunakan Function keyword untuk membuat multiline lambda yangmengembalikan nilai, anda juga dapat menggunakan multiline lambda yang tidakmengembalikan nilai menggunakan sub keyword .1: Dim arrNama() As String = {"erick", "ricky", "joni"}2: Array.ForEach(arrNama, Sub(n As String)3:4:5:6:7:8: Dim balik = ""For i = n.Length - 1 To 0 Step -1balik &= n(i)NextConsole.WriteLine(balik)End Sub)outputnya:Gambar 2.1338 Single line Sub LambdasPada VB9 anda hanya dapat menggunakan single expression lambda jika ada returnvaluenya, misal:1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10}2: Dim query = bil.Where(Function(n) n Mod 2 = 0)3: For Each num In query4: Console.WriteLine(num)5: NextAkan error jika anda tuliskan kode berikut pada VB9:1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10}2: Array.ForEach(bil, Sub(n) Console.WriteLine(n))Pada VB10, anda dapat menggunakan keyword sub untuk membuat single expressionyang tidak mengembalikan nilai1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10}2: Array.ForEach(bil, Sub(n) Console.WriteLine(If(n Mod 2 = 0, "Genap :" & n,"Ganjil :" & n)))2. 4 Membuat Project Baru Klik New Project pada Toolbar atau File > New Project Pada New Project Dialog, pilih Visual Basic pada Installed Templates kemudianpilih Windows pada node Visual Basic, lalu pada Template Pane sebelah kiri pilihWindows Form Application template. Dan terakhir ketikkan Belajar VB, padatextbox Name, dan klik OK.39Gambar 2.14Gambar 2.15 Ubah nama form, dengan cara klik Form1 pada Solution Explorer (gambar 2.16),lalu pada properties ganti BelajarVB.vb (gambar 2.17) kemudian tekan enter atauklik property yang lain untuk melihat perubahannya.40Gambar 2.16Gambar 2.17 Sekarang kita akan mengubah title (text property) dari form. Klik Form1 dan ubahproperties Text menjadi Selamat Belajar.Gambar 2.18412. 5 Menambah Control Pada Form ToolBoxToolBox merupakan tempat dimana terdapat control-control yang digunakan untukmendesign form. Untuk menampilkan Toolbox cuku dengan menekan Ctrl + Alt +X.Gambar 2.19Kita dapat menambahkan control pada ToolBox dengan cara klik kanan padaToolBox > Choose Item.42Gambar 2.20 Tambahkan control TextBox pada form dengan cara, Klik ganda Control TextBoxpada Toolbox maka secara otomatis textbox akan tampil pada form. Atau denganDrag dan Drop control dari textbox ke form. Lakukan hal sama untuk control labeldan 2 Button. Ubah properties Name untuk TextBox menjadi txtNama, untuk labelubah properties Text menjadi Masukkan Nama anda dan untuk button ubahproperties Name menjadi btnOK, dan text menjadi OK, lalu susun sepertigambar dibawah.Gambar 2.2143 Sekarang kita akan membuat event handler, untuk membuat event handler adabeberapa cara yang pertama, pada jendela properties pilih icon event lalu akantampil event handler untuk control tersebut.Gambar 2.22Atau melalui jendela code editor, pada combobox sebelah kiri pilih control yangdinginkan lalu pada combobox sebelah kanan pilih event handler.Gambar 2.2344Gambar 2.24Pada bab setelah ini penulis hanya menyebutkan nama event handler nya saja, tanpamenjelaskan cara pembuatan nya. Sebagai contoh penulis menyebutkan eventhandler txtNama_KeyUp, ini dimaksudkan control txtNama dengan event HandlerKeyUp.Atau untuk membuat event handler bisa di lakukan dengan klik ganda, seperticontoh untuk button, jika di klik ganda maka akan terbentuk event hanlder Click. Buat event handler btnOk_Click (klik ganda button OK). Lalu ketikkan sintaks inididalam event handler btnOk_ClickPrivate Sub btnOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) HandlesbtnOK.Click'Ini Cuma CommentMessageBox.Show("Hiii, " & txtNama.Text &" Selamat mempelajari Visual Basic 10")End Sub Simpan project dengan menekan Ctrl + Shift + S, maka Save Project Dialog akanmuncul.Gambar 2.25 Jalankan program (tekan F5), lalu masukkan nama anda dan klik button OK.45Gambar 2.26Gambar 2.2746BAB IIIANALISA PROGRAMPada bab ini akan dibahas bagaimana menganalisa proses dalam pembuatan suatu aplikasi.Aplikasi yang akan kita buat adalah Aplikasi Rental DVD dimana aplikasi ini berguna untukmemudahkan dalam mengolah data barang (DVD Rental) dan transaksi rental pada suatu rentalDVD.3.1. Analisa ProsesSebelum membuat suatu aplikasi, kita membutuhkan suatu tahap untuk menganalisa suatuproses, apa saja yang di butuhkan oleh aplikasi. Untuk aplikasi yang akan kita bua,t prosesyang paling menonjol adalah proses Rental DVD dan Return DVD, dimana proses inimerupakan proses utama pada aplikasi yang akan kita buat. Dari proses ini tersebut, kitabisa memperluas proses-proses apa saja yang nantinya akan kita gunakan pada program ini.Secara umum dapat dikategorikan sebagai berikut :a. RentalProses ini menangani tentang peminjaman DVD yang dilakukan oleh customer. JikaDVD yang di pinjam akan merubah status DVD menjadi Out.b. ReturnProses ini merupakan tahap pengembalian DVD oleh customer. Jika pengembalianmelewati batas yang telah di tentukan maka akan di kenakan denda. Dan juga merubahstatus DVD menjadi In.3.2. Analisa PenggunaSetelah selesai menganalisa proses, selanjutnya adalah melakukan analisa pengguna.Analisa ini berfungsi untuk mengetahui ada berapa pengguna yang akan menggunakanaplikasi yang akan kita buat. Lalu kita berikan hak akses terhadap masing-masing pengguna.Pengguna pada aplikasi ini sebagai berikut :1. AdministratorPengguna ini memiliki hak akses yang paling tinggi (dapat mengakses seluruh fasilitaspada aplikasi)2. Staff47Staff merupakan pengguna yang memiliki hak akses dibawah admin, hanya manajamenuser saja yang tidak bias dilakukan oleh pengguna ini.3. KasirKasir merupakan pengguna yang paling sering menggunakan aplikasi ini, yaitu prosesRental dan Return DVD.4. UserPengguna yang memilki hak akses paling kecil. Hanya dapat melihat daftar DVD.48BAB IVPEMBUATAN APLIKASISetelah selesai menganalisa, kita masuk ke tahap pembuatan aplikasi. Pada bab ini akandibahas bagaimana membuat aplikasi dengan menggunakan VB 10 dan MS Access 2010.Pada tahap ini kita akan melihat bagaimana mudah nya membangun suatu aplikasi dengandua program tersebut.4.1.Membuat DatabaseSebelum masuk ke pemograman (Coding) pertama-tama kita buat terlebih dahulu databaseuntuk aplikasi ini. Ikuti langkah-langkah dibawah ini untuk membuat database dan table-tabel yang akan di butuhkan pada aplikasi.a. Buka MS Access 2010Gambar 4.1b. Ketik DVD.accdb pada File Name , dan untuk sementara simpan terlebih dahulu ke Mydocuments. Lalu klik Create. Untuk mengubah lokasi penyimpanan klik gambar folderdan pilih lokasi yang di inginkan.c. Selanjutnya secara otomatis akan ada sebuah table dengan nama Table1, klik kanan tabletersebut dan klik Design, maka akan muncul form Save As dan ketikkan T_Menu49Gambar 4.2d. Lalu ubah nama field pada table tersebut seperti gambar dibawah.Table ini merupakan representasi dari Menu pada aplikasi yang akan kita buat nantinya.Field MenuID nantinya akan kita gunakan pada MenuStrip properties Tag. SedangkanMenuName digunakan pada Text untuk MenuStrip, selanjutnya untuk MenuActionmerupakan identitas apakah posisi Menu Item pada Header, Menu atau SubMenu. Lalumasukkan data dibawah pada table T_Menu, untuk membuka table klik ganda pada table.50MenuIDMenuNameMenuActionM1FileHeaderM1-01LogoutMenuM1-02ExitMenuM2DataHeaderM2-01DVDMenuM2-01-01AddSubMenuM2-01-02EditSubMenuM2-01-03DVD ListSubMenuM2-02CustomerMenuM2-02-01AddSubMenuM2-02-02EditSubMenuM2-02-03Customer ListSubMenuM2-03GroupMenuM2-04GenreMenuM3ToolsHeaderM3-01RentalMenuField NameData TypeField sizePrimary KeyMenuIDText10PK (*)MenuNameText25MenuActionText25M3-02M4M4-01M4-02M4-03M5M5-01M5-01-01M5-01-02M5-01-03M5-02M5-03M6M6-01 ReturnReportRentalReturnRekapUtilityUsersAddEditUser ListChange PasswordForm AccessHelpAbout MenuHeaderMenuMenuMenuHeaderMenuSubMenuSubMenuSubMenuMenuMenuHeaderMenue. Selanjutnya buat table baru dengan nama T_Role, dengan field-field nya sebagai berikutDan isikan data pada table T_Role seperti dibawahTable ini berfungsi untuk memetakan hak akses pada penggunaf. Tambahkan sebuah table lagi dengan nama T_RoleMenu, dengan format seperti dibawah.51Field NameData TypeField sizePrimary KeyRoleIDNumberIntegerPK (*)RoleNameText50Field NameData TypeField sizePrimary KeyRoleIDNumberIntegerPK (*)MenuIDText10PK (*)RoleIDRoleName1Admin2Staff3Kasir4UserUntuk table ini merupakan gabungan antara table T_Menu dan T_Role dan berfungsiuntuk menampung hak akses setiap Role. Contoh nya user dengan Role Admin dapatmengakses menu item Rental, Return, Customer data-data tersebut akan disimpan padatable ini. Dan isikan data seperti dibawah.g. Dan tambahkan sebuah table dengan nama T_User dengan format seperti dibawah.Field Name Data Type Field size Primary Key52RoleIDMenuID1M11M1-011M1-021M21M2-011M2-01-011M2-01-021M2-01-031M2-021M2-02-011M2-02-021M2-02-031M2-031M2-041M31M3-011M3-021M41M4-011M4-021M4-031M51M5-011M5-01-011M5-01-021M5-01-031M5-021M5-031M61M6-01Untuk pertama kali isikan data user seperti dibawah :Username : administratorPassword= passwordFirst_Name : AdminRoleID=1Actived=Yes (True)Selanjutnya adalah membuat relasi antar table, ikuti langkah-langkah seperti dibawah.Pada jendela MS Access, Klik Tab Database Tools lalu klik Relationships12Gambar 4.353UserNameText15PK (*)PasswordText15InputMask=PasswordFirst_NameText50Last_NameText50RoleIDNumberIntegerActivedYes/NoLalu pada jendela Relationships, klik kanan > Show Table, maka akan tampil jendelaShow Table, seperti dibawah. Klik Add untuk semua table didalam list.Gambar 4.4Gambar 4.5Selanjutnya klik field RoleID pada table T_Role, dan drag ke field RoleID pada tableT_RoleMenu. Maka akan muncul jendela Edit Relationships seperti dibawah.54Gambar 4.6Klik checkbox Enforce Rerential Integrity lalu klik button Create, Lakukan hal samapada field MenuID pada table T_Menu ke fied MenuID pada table T_RoleMenu. Lalu fieldRoleID pada table T_Role ke field RoleID pada table T_User., sehingga kita memilikidiagram relationships seperti dibawah.Gambar 4.74.2. Bekerja dengan VB 10 (Management User)Sekarang adalah waktunya yang paling ditunggu-tunggu oleh pembaca, yaitu bekerjadengan VB 10. Untuk pertama kali kita buat terlebih dahulu project untuk aplikasi yangkita buat, dengan cara Start > All programs > Microsoft Visual Studio 2010 > MicrosoftVisual Studi 2010.55Gambar 4.8Gambar 4.9Klik File > New Project, maka akan muncul jendela New Project. Pada Installed Templates> Visual Basic > Windows dan pilih Windows Forms Application. Lalu ubah Namaproject menjadi DVD Rental, klik button OK.56Gambar 4.10Gambar 4.11Pada Solution Explorer, klik kanan DVD Rental > Add > New Item, maka akan tampiljendela Add New Item, pilih Splash Screen dan ubah namanya menjadi Startup.vb57Gambar 4.12Tambahkan control Timer dan ubah properties nya seperti dibawah.Lalu buka Form1 yang ada pada saat kita membuat project, dan ganti properties pada Form1seperti dibawah.Serta tambahkan control 2 label, 2 textbox, 2 button lalu ubah properties control-controltersebut seperti dibawah.58NameF_LoginShowInTaksbarFalseTextLoginStartPositionCenterScreenControlBoxFalseFormBorderStyleFixedSingleBackColorWhiteTimer1NametimerSplashDan atur control-control diatas seperti gambar dibawah.Gambar 4.13Selanjutnya pada form Startup, tekan tombol F7 untuk menampilkan jendela Code. Laluketikkan variable class seperti dibawah.Dim opacityRate As Double = 0.0Dim maximizeRate As Boolean = TrueDim minimizeRate As Boolean = FalsePada form startup ini kita akan menggunakan fungsi Opacity pada form. Yaitu fungsi untukmembuat form menjadi trasnparan. jika nilai nya 1 maka form akan tampil normal, oleh59Textbox1NametxtUserTextbox2NametxtPasswordUseSystemPasswordCharTrueButton1NamebtnLoginTextLoginButton2NamebtnCancelTextCancelkarena itu dengan variable opacityRate kita akan menggunakan untuk memasukkan nilaiopacity.Lalu pada event handler Startup_Load ketikkan sintaks dibawah, yang berfungsi untukmengaktifkan timer, dan memasukkan nilai Opacity menjadi 0 (Nol) atau hilang.Me.Opacity = 0.0timerSplash.Interval = 60timerSplash.Enabled = TruetimerSplash.Start()Serta mengisi nilai interval timer menjadi 60 (1 detik), lalu klik ganda control Timer danketikan sintaks dibawah.If opacityRate >= 1.0 ThenopacityRate = opacityRate + 1.0If opacityRate >= 20.0 ThenopacityRate = 0.99Me.Opacity = opacityRateEnd IfElseIf maximizeRate ThenopacityRate = opacityRate + 0.025Me.Opacity = opacityRateIf opacityRate >= 1.0 ThenmaximizeRate = FalseminimizeRate = TrueEnd IfElseIf minimizeRate ThenopacityRate = opacityRate - 0.025If opacityRate < 0 ThenopacityRate = 0End IfMe.Opacity = opacityRateIf Opacity DVD Rental Properties. Klik Application lalu pada Startup Form pilih StartUp.Gambar 4.14Sekarang jalankan program dengan menekan F5.Gambar 4.1561Gambar 4.16Setelah berhasil membuat form startup, maka selanjutnya adalah membuat login user.Terlebih dahulu adalah dengan memindahkan file MS Access (DVD.accdb) kedalam project(~>DVD Rental\DVD Rental\bin\Debug).Lalu pada jendela project klik Project > DVD Rental properties, klik setting dan isikan data-data berikut Name : DVDConnection, Type : Connection String, Scope : Application.Dan untuk Value : Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\dvd.accdbDan tambahkan sebuah form pada project dan ubah propertiesnya seperti dibawah.Lalu tambahkan control menuStrip , tambahkan menuItem dan ubah properties nya sepertidibawah seperti dibawah.62NameF_MainShowInTaksbarTrueTextMain NeuStartPositionCenterScreenFormBorderStyleFixedSingleTextTag&FileM1&LogoutM1-01E&xitM1-02&DataM2DVDM2-01Sehingga memilki susunan MenuItem seperti gambar dibawah.63AddM2-01-01EditM2-01-02DVD ListM2-01-03CustomerM2-02AddM2-02-01EditM2-02-02Customer ListM2-02-03GroupM2-03GenreM2-04&ToolsM3RentalM3-01ReturnM3-02&ReportM4ReturnM4-01RentalM4-02RekapM4-03&UtilityM5UsersM5-01AddM5-01-01EditM5-01-02User ListM5-01-03Change PasswordM5-02Form AccessM5-03&HelpM6AboutM6-01Gambar 4.17Tambahkan control StatusStrip, lalu pada properties Items klik button () maka akan tampiljendela ItemCollectionEditor. Pada combobox select item, pilih Statuslabel, lalu klik buttonAdd. Lakukan sebanyak 3 kali. Dan ubah properties Name StatusLabel menjadi ToolName,ToolRole dan ToolTime. Lalu klik button OK.Sebelumnya penulis akan menunjukkan design dari Form Utama (F_Main) ini, agarmemudahkan dalam pemberian ilustrasi untuk pengaturan control pada form.Gambar 4.1864Tambahkan sebuah control SplitContainer pada form, dengan control ini form akan terbagimenjadi bagian yaitu SplitContainer.Panel1 dan SplitContainer.Panel2. dan ubah propertiesBorderStyle : FixedSingle dan dock : Fill. Tambah sebuah control panel, dan letakkankedalam SplitContainer.Panel1. Dan ubah properties panel tersebut, Name :pnlNavigationBackground, Dock : Fill, BackColor : White. Lalu tambahkan sebuah Panelkembali dan letakkan kedalam pnlNavigationBackground. Dan ubah propertiesnya. Name :pnlCurrentScreen , Dock : Top, BackColor : HighLight dan Text : Transaction. Lalutambahkan sebuah panel dang anti propertiesnya, Name : pnlNavUsers, Dock : Bottom,BackColor : HighLight Selanjutnya Tambahkan sebuah Treeview dan letakkan kedalampnlNavigationBackground. Ubah ptopertiesnya .Name : TvTransaction, Dock : Fill.Sehingga kita memiliki design form seperti gambar dibawah.Gambar 4.18Selanjutnya kita akan mengatur pada SplitContainer.Panel2. Tambahkan panel dan letakkankedalam SplitContainer.Panel2. Dan ubah propertiesnya Name : pnlProjects, Dock : Fill danBackColor : white. Lalu tambah panel dan letakkan kedalam pnlProjects dengan propertiessebagai berikut Name : pnlProjectsTitle, Dock : Top, BackColor :HighLight dan Text : DVD65List. Dan tambahkan 1 Groupbox, 1 Label, 1TextBox dan 1 GridView letakkan padapnlProjects. Dan ubah propertiesnya seperti dibawah.Dan atur letaknya seperti pada gambar dibawah.Gambar 4.19Masih pada jendela F_Main tekan F8 untuk masuk jendela code, sebelumnya importNameSpace OleDB dengan cara ketikkan sintaks berikut pada baris paling atas Class.Imports System.Data.OleDb66GroupBox1TextSearch criteriaTextbox1NametxtSearchLabel1TextTitleDataGridView1NameDgViewLalu ketikan sintaks berikut, yang berfungsi untuk membuat Node pada TreeView secaraotomatis, dimana MenuItem menjadi referensi nya. (Sintaks ini di ambil dari blog masRully,MVP www.yulianmf.com)#Region "PopulateTree"Private Sub AddMenuToTree(ByVal YourNodeTree As TreeNode, ByValYourToolStripMenuItem As ToolStripMenuItem)'//cek apakah toolstripmenuitem tsb mempunyai sub menuitem'//yang merupakan DropDownItem :If YourToolStripMenuItem.DropDownItems.Count > 0 Then'//jika ada sub menu item, iterate :For i As Int32 = 0 To YourToolStripMenuItem.DropDownItems.Count - 1'//jika sub menu itemnya bukan merupakan toolstripmenuitem (bisasaja'//merupakan toolstripseparator) maka item tsb tdk ditambahkan ketreeview :If Not (TypeOf YourToolStripMenuItem.DropDownItems(i) IsToolStripMenuItem) OrElseYourToolStripMenuItem.DropDownItems(i).Tag = "" Then ContinueForDim currentItem As ToolStripMenuItem =YourToolStripMenuItem.DropDownItems(i)Dim aNode As New TreeNode(Replace(currentItem.Text.ToString, "&",""))aNode.Tag = currentItem.Tag.ToStringYourNodeTree.Nodes.Add(aNode)'//cek jika ada sub menu item lagi dengan method recursiveAddMenuToTree(aNode, currentItem)NextEnd IfEnd SubPrivate Sub PopulateToolStripMenuItem(ByVal YourMainMenuStrip As MenuStrip)'//iterate toolstripmenuitem yang ada di MainMenuStrip :For Each aItem As ToolStripMenuItem In YourMainMenuStrip.ItemsIf aItem.Visible = False Then Continue For'//buat node baru utk ditambahkan ke treeview node :Dim aNode As New TreeNode(Replace(aItem.Text.ToString, "&", ""))aNode.Tag = aItem.Tag.ToStringTvTransaction.Nodes.Add(aNode)'//tambahkan node baru ke treeview jika'//node tersebut memiliki node child (DropDownItem):AddMenuToTree(aNode, aItem)NextTvTransaction.ExpandAll()TvTransaction.SelectedNode = TvTransaction.Nodes(0)End Sub#End Region67Lalu pada event handler F_Main_Load, ketikkan sintaks berikut.TryPopulateToolStripMenuItem(MenuStrip1)Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TrySelanjutnya sebelum masuk ke F_Login, terlebih dahulu adalah membuat beberapa Class yangdibutuhkan. Pertama Tambahkan sebuah folder pada project dan ubah namanya menjadi Entity.Dan tambahkan 2 buah class pada folder tersebut masing-masing Role.Vb dan Users.vb. bukaclass Role dan ketikkan sintaks berikut.Namespace EntityPublic Class RolePrivate m_roleid As Int16Public Property RoleID() As Int16GetReturn m_roleidEnd GetSet(ByVal value As Int16)If value.ToString = "" ThenThrow New Exception("Masukkan RoleID")End Ifm_roleid = valueEnd SetEnd PropertyPublic Property RoleName() As StringEnd ClassEnd NamespaceDan pada class Users ketikkan sintaks berikut :Namespace EntityPublic Class UsersPrivate m_username As StringPublic Property Username() As StringGetReturn m_usernameEnd GetSet(ByVal value As String)If value = "" ThenThrow New Exception("Masukkan username")End Ifm_username = valueEnd SetEnd Property68Private m_password As StringPublic Property Password() As StringGetReturn m_passwordEnd GetSet(ByVal value As String)If value = "" ThenThrow New Exception("Masukkan Password")End Ifm_password = valueEnd SetEnd PropertyPrivate m_firstname As StringPublic Property First_Name() As StringGetReturn m_firstnameEnd GetSet(ByVal value As String)If value = "" ThenThrow New Exception("Masukkan First Name")End Ifm_firstname = valueEnd SetEnd PropertyPublic Property Last_Name() As StringPublic Property Role As New Entity.RolePublic Property Actived() As BooleanEnd ClassEnd NamespaceSebagai catatan bahwa Class yang berada dalam folder entity merupakan representasi dari Table,dan masuk kedalam NameSpace Entity. Tambahkan sebuah Folder dalam project dan ubahnamanya menjadi AccessData. Selanjutnya adalah tambahkan sebuah Module pada folderAccessData dan ubah namanya menjadi DVDModule.vb, ketikkan sintaks berikut untukmengimport NameSpace yang dibutuhkan pada Module.ImportsImportsImportsImports System.DataSystem.Data.OleDbSystem.Collections.GenericSystem.Runtime.CompilerServicesLalu membuat Public Variable seperti dibawah.69Public Operate, FormShow, UserName, Password, RoleID As StringDan buat Extension Method untuk Class User dan Role seperti dibawah.Sub Add(ByVal UserList As List(Of Entity.Users), ByVal Username As String, ByValPassword As String,ByVal First_Name As String, ByVal Last_Name As String,ByVal Actived As Boolean, ByVal RoleID As Int16, ByVal RoleName AsString)UserList.Add(New Entity.Users With {.Username = Username, .Password =Password, .First_Name = First_Name,.Last_Name = Last_Name, .Actived =Actived,.Role = New Entity.Role With {.RoleID =RoleID, .RoleName = RoleName}})End SubSub Add(ByVal RoleList As List(Of Entity.Role), ByVal RoleID As String, ByValRoleName As String)RoleList.Add(New Entity.Role With {.RoleID = RoleID, .RoleName = RoleName})End SubTambahkan Class pada folder AccessData, dan ganti namanya menjadi AccessUser. Pada Classyang ada pada folder AccessData merupakan class yang menyimpan fungsi-fungsi sepertiInsert,Delete dan lain-lain. Class-class ini masuk kedalam NameSpace AccessData. Ketikkansintaks berikut yang digunakan untuk proses Login nantinya.Imports System.DataImports System.Data.OleDbNamespace AccessDataPublic Class AccessUsePublic Function Login(ByVal username As String) As List(Of Entity.Users)Dim User As New List(Of Entity.Users)()TryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = NewOleDbCommand("usp_selectlogin", connect)mycommand.CommandType = CommandType.StoredProceduremycommand.Parameters.Add("@username", OleDbType.VarChar).Value= usernameconnect.Open()Using rdr As OleDbDataReader = mycommand.ExecuteReader70While rdr.ReadUser.Add(rdr("username").ToString(),rdr("Password").ToString(),rdr("First_Name").ToString(), rdr("Last_Name").ToString(),rdr("Actived"),rdr("RoleID").ToString(),rdr("RoleName").ToString())End WhileEnd UsingEnd UsingEnd UsingCatch sqlex As OleDbExceptionThrow New Exception(sqlex.Message.ToString())End TryReturn UserEnd FunctionEnd ClassEnd NamespaceSelanjutnya buka MS Access (DVD.accdb) dan buat query dengan nama usp_selectlogindengan SQL sebagai berikut.SELECT T_User.*, T_Role.RoleNameFROM T_Role INNER JOIN T_User ON T_Role.RoleID=T_User.RoleIDWHERE (((T_User.UserName)=[@username]));Buka F_Login, klik ganda button Cancel lalu ketikkan sintaks berikut. EndJika user meng-klik button cancel ini makan aplikasi ini akan ditutup. Selanjutnya klik gandabutton OK, dan ketikkan sintaks berikut.71TryDim AccessUser As New AccessData.AccessUserDim user As New Entity.Usersuser.Username = txtUser.Textuser.Password = txtPassword.TextDim list As List(Of Entity.Users) = AccessUser.Login(txtUser.Text)'jika isi list kosongIf list.Count = 0 ThenMsgBox("Username Salah", MsgBoxStyle.Information, "DVD Rental")txtUser.Focus()txtUser.SelectAll()Exit SubEnd IfUserName = list.First.UsernamePassword = list.First.PasswordIf txtPassword.Text Password ThenMsgBox("Password Salah", MsgBoxStyle.Information, "DVD Rental")txtPassword.Focus()txtPassword.SelectAll()Exit SubEnd IfIf list.First.Actived = False ThenMsgBox("User sudah tidak aktif", MsgBoxStyle.Information, "DVDRental")txtUser.Focus()txtUser.SelectAll()Exit SubEnd IfRoleID = list.First.Role.RoleIDPassword = list.First.PasswordMe.Close()Me.Dispose()Dim f_utama As New F_Mainf_utama.ToolName.Text = list.First.First_Name & If(list.First.Last_Name= "", "", " " & list.First.Last_Name)f_utama.ToolRole.Text = list.First.Role.RoleNamef_utama.ToolTime.Text = Now.Datef_utama.Show()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Exclamation, "DVD Rental")End TryPada saat user melakukan login, maka aplikasi ini akan mengecek dengan cara melakukanpencarian data user berdasarkan username yang dimasukkan. Lalu akan disimpan kedalamGeneric List of Class. Jika isi dari List ini kosong makan username salah, selanjutnya mengecekpassword yang dimasukkan, apakah sama dengan hasil pencarian, jika tidak sama aka nada pesan72error nya. Dan mengecek apakah user tersebut masih aktif atau tidak. Buat event handlertxtPassword_Keyup dan ketikkan sintaks berikut yang berfungsi jika user menekan Enter padatext box Password makan proses pada button login akan di jalankan.If e.KeyCode = Keys.Enter ThenbtnLogin.PerformClick()End IfPada F_Main buat event handler F_Main_Closing dan Menu Item File > Exit ketikkan End. Danpada Menu Item File > Logout ketikkan sintaks berikut, untuk menampilkan form login.Me.Dispose()My.Forms.F_Login.Show()Jalankan Program dengan menekan F5 lalu login dengan username : administrator dan password: password.Gambar 4.20Gambar 4.2173Jika pembaca dengan benar mengikuti langkah-langkah diatas, maka akan mendapatkan hasilseperti gambar diatas. Yaitu TreeView secara otomatis akan menggenerate Node sesuai denganMenuItem diatas.Selanjutnya adalah membuat Form Access yang dimana berfungsi untuk memberi hak aksessuatu Role Menu apa saja yang bias di akses oleh role tersebut. Ikuti Langkah-langkah dibawah.Buat Query pada DVD.accdb seperti berikut usp_SelectRole, usp_SelectMenuRole,usp_DeleteRoleMenu dan usp_InsertRoleMenu. Dengan sintaks SQL sebagai berikut :SELECT T_Role.RoleID, T_Role.RoleNameFROM T_RoleORDER BY T_Role.RoleID;SELECT T_Menu.MenuID, T_Menu.MenuName, T_RoleMenu.RoleIDFROM T_Menu INNER JOIN T_RoleMenu ON T_Menu.MenuID = T_RoleMenu.MenuIDWHERE (((T_RoleMenu.RoleID)=[@RoleID]));DELETE *FROM T_RoleMenuWHERE (((T_RoleMenu.RoleID)=[@RoleID]));INSERT INTO T_RoleMenu ( RoleId, MenuID )VALUES ([@RoleId], [MenuId]);Buka Class AccessUser, kita akan membuat fungsi untuk mengahapus dan manambah data padatable T_MenuRole, seperti dibawah.74Public Function DeleteRoleMenu(ByVal MenuRole As Entity.MenuRole) As OleDbDataReaderTryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = NewOleDbCommand("usp_DeleteRoleMenu", connect)mycommand.CommandType = CommandType.StoredProcedureDim parameterRoleID As OleDbParameter = NewOleDbParameter("@RoleID", OleDbType.Integer)parameterRoleID.Value = MenuRole.Role.RoleIDWith mycommand.Parameters.Add(parameterRoleID)End Withconnect.Open()Using result As OleDbDataReader =mycommand.ExecuteReader(CommandBehavior.CloseConnection)Return resultEnd UsingEnd UsingEnd UsingCatch SqlEx As OleDbExceptionThrow New Exception(SqlEx.Message.ToString())End TryEnd FunctionPublic Function InsertRoleMenu(ByVal MenuRole As Entity.MenuRole) AsOleDbDataReaderTryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = NewOleDbCommand("usp_InsertRoleMenu", connect)mycommand.CommandType = CommandType.StoredProcedureDim parameterRoleID As OleDbParameter = NewOleDbParameter("@RoleID", OleDbType.Integer)parameterRoleID.Value = MenuRole.Role.RoleIDDim parameterMenuID As OleDbParameter = NewOleDbParameter("@MenuID", OleDbType.VarChar, 10)parameterMenuID.Value = MenuRole.Menu.MenuIDWith mycommand.Parameters.Add(parameterRoleID).Add(parameterMenuID)End Withconnect.Open()Using result As OleDbDataReader =mycommand.ExecuteReader(CommandBehavior.CloseConnection)Return resultEnd UsingEnd UsingEnd UsingCatch SqlEx As OleDbExceptionThrow New Exception(SqlEx.Message.ToString())End TryEnd Function75Buka DVDModule.vb dan ketikkan sintaks dibawah.#Region "Process"Public Function GetLeftRightItemFromControl(ByVal Teks As String) As String()'//cari item kiri dari teksDim intPanjangString As IntegerDim intPosisiDash As IntegerintPanjangString = Strings.Len(Teks)intPosisiDash = Teks.IndexOf(">")Dim strID As String = Trim(Strings.Left(Teks, intPosisiDash - 1))Dim strNama As String = Trim(Strings.Mid(Teks, intPosisiDash + 2,intPanjangString - intPosisiDash + 2))Dim arrString As String() = {strID, strNama}Return arrStringEnd FunctionPublic Sub AddParameter(ByVal Name As String, ByVal Type As OleDbType, _ByVal Size As Integer, ByVal Value As Object, ByVal myCommand AsOleDbCommand)TrymyCommand.Parameters.Add(Name, Type, Size).Value = ValueCatch OleDbExceptionErr As OleDbExceptionThrow New System.Exception(OleDbExceptionErr.Message, _OleDbExceptionErr.InnerException)End TryEnd Sub#End RegionPada fungsi GetLeftRightItemFromControl berfungsi untuk mengambil text setelah tanda >.Dimana kita gunakan ini untuk mengambil RoleID pada Form Access yang akan kita buatnantinya. Sedangkan AddParameter berfungsi untuk membantu dalam pembuatan Paramaterdinamis untuk suatu fungsi.Selanjutnya kita akan membuat method dimana akan membantu kita dalam mencari suatu datadan dimasukkan kedalam Generic List. Biasanya kita selalu membuat suatu method untukmencari data tertentu. Dengan method dibawah ini kita tidak perlu lagi membuat secara satu-persatu, sehingga ini sangat memudahkan kita dalam membuat program. Untuk method dibawahini hanya berfungsi untuk mencari data yang berdiri sendiri atau tidak berelasi dengan yang lain.Ketikkan sintaks dibawah ini.76#Region "Fill"Private Sub Fill(Of T)(ByVal reader As IDataReader, ByVal list As IList(Of T), _ByVal type As Type, ByVal fields As String())Dim index As Integer = 0' run the readerWhile reader.Read()' create an instance of the typeDim item As T = DirectCast(Activator.CreateInstance(type), T)' get all the properties of the typeDim properties As Reflection.PropertyInfo() = DirectCast(item.GetType(),Type).GetProperties()'Dim MyType As Type = type.GetType("Myproperty")If fields.Length 0 ThenFor j As Integer = 0 To fields.Length - 1' get the index of the propertyindex = FindProperyIndexByColumnName(fields(j), properties)' set the value of the property' properties(index).GetAccessors(If index -1 Thenproperties(index).SetValue(item,If(reader(fields(j)).ToString = "", "",reader(fields(j))), Nothing)End IfNextElseFor i As Integer = 0 To reader.FieldCount - 1index = FindProperyIndexByColumnName(reader.GetName(i), properties)Dim a, b As Stringa = reader(reader.GetName(i)).ToStringb = ""If index -1 Thenproperties(index).SetValue(item,If(reader(reader.GetName(i)).ToString = "", "",reader(reader.GetName(i))), Nothing)End IfNextEnd If' add the item to the listlist.Add(item)End WhileEnd Sub77Private Function FindProperyIndexByColumnName(ByVal columnName As String, ByVal prop AsReflection.PropertyInfo()) As IntegerDim index As Integer = -1For i As Integer = 0 To prop.Length - 1If UCase(prop(i).Name) = UCase(columnName) Thenindex = iExit ForEnd IfNextReturn indexEnd FunctionPublic Sub FillListWithParam(Of T)(ByVal list As IList(Of T),ByVal fields As String(), ByVal Query AsString,ByVal type As Type,ByVal Name As String(), ByVal OleType AsOleDbType(),ByVal Size As Integer(), ByVal Value AsObject())Using connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = New OleDbCommand(Query, connect)mycommand.CommandType = CommandType.StoredProcedureIf Name.Length > 0 ThenFor i = 0 To Name.Length - 1DVDModule.AddParameter(Name(i), OleType(i), Size(i), Value(i),mycommand)NextEnd Ifconnect.Open()Using reader As OleDbDataReader = mycommand.ExecuteReader()Fill(reader, list, type, fields)End UsingEnd UsingEnd UsingEnd SubPublic Sub FillListWithoutParam(Of T)(ByVal list As IList(Of T),ByVal fields As String(), ByVal Query As String,ByVal type As Type)Using connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = New OleDbCommand(Query, connect)mycommand.CommandType = CommandType.StoredProcedureconnect.Open()Using reader As OleDbDataReader = mycommand.ExecuteReader()Fill(reader, list, type, fields)End UsingEnd UsingEnd UsingEnd Sub#End Region78Untuk penggunaan method akan di jelaskan dibawah. Selanjutnya tambahkan sebuah Form padaproject dan ubah properties nya seperti dibawah. (Form ini diambil dari blog mas rully).Tambahkan sebuah Panel kedalam form dan ubah properties Dock : Fill dan BackColor : White.Lalu tarik sebuah panel lagi dan ubah propertiesnya Dock : Left, BackColor : white , Name :pnlLeft. Tambahkan 2 Groupbox, 2 RadioButton, 1 Button, 1 ListBox. Dan ubah propertiesseperti dibawah.79GroupBox1TextGroupBox2TextRolesRadioButon1TextUnchecked All NodeNamerbUncheckedAllCheckedTrueRadioButon2TextChecked All NodeNamerbCheckedAllCheckedFalseListBox1NameLstRolesButton1NameF_FormAccessShowInTaksbarFalseTextForm AccessStartPositionCenterScreenMaximizeBoxFalseMinimizeBoxFalseFormBorderStyleFixedSingleBackColorWhiteDan atur posisi control-control diatas seperti gambar dibawah.Gambar 4.22Selanjutnya tambahkan control ImageList, dan pada properties Images klik button browse (..)lalu Add sebuah image yang diinginkan (ukuran 16 x 16). Lalu tambahkan sebuah TreeView danubah properties Name : tvUserRights, CheckBoxes : True, ImageList : ImageList1 danImageIndex : 0, SelectedImageIndex : 0. Lalu letakkan pada Panel1 sesuai dengan gambardibawah.Gambar 4.23Buatlah variable Class seperti dibawah.Dim AccessUser As New AccessData.AccessUserDim columns As String() = {}80NamebtnUpdateTextUpdateKetikkan sintaks berikut yang berfungsi untuk generate Node pada TreeView yang mengambildata dari MenuItem pada F_Main.Private Sub AddMenuToTree(ByVal YourNodeTree As TreeNode, ByVal YourToolStripMenuItemAs ToolStripMenuItem)'//cek apakah toolstripmenuitem tsb mempunyai sub menuitem'//yang merupakan DropDownItem :If YourToolStripMenuItem.DropDownItems.Count > 0 Then'//jika ada sub menu item, iterate :For i As Int32 = 0 To YourToolStripMenuItem.DropDownItems.Count - 1'//jika sub menu itemnya bukan merupakan toolstripmenuitem (bisa saja'//merupakan toolstripseparator) maka item tsb tdk ditambahkan ketreeview :If Not (TypeOf YourToolStripMenuItem.DropDownItems(i) IsToolStripMenuItem) Then Continue ForDim currentItem As ToolStripMenuItem =YourToolStripMenuItem.DropDownItems(i)Dim aNode As New TreeNode(Replace(currentItem.Text.ToString, "&", ""))aNode.Tag = currentItem.Tag.ToStringYourNodeTree.Nodes.Add(aNode)'//cek jika ada sub menu item lagi dengan method recursiveAddMenuToTree(aNode, currentItem)NextEnd IfEnd SubPrivate Sub PopulateToolStripMenuItem(ByVal YourMainMenuStrip As MenuStrip)' daFormActions.Fill(dsFormActions, "formActions")'//iterate toolstripmenuitem yang ada di MainMenuStrip :For Each aItem As ToolStripMenuItem In YourMainMenuStrip.Items'//buat node baru utk ditambahkan ke treeview node :Dim aNode As New TreeNode(Replace(aItem.Text.ToString, "&", ""))aNode.Tag = aItem.Tag.ToStringtvUserRights.Nodes.Add(aNode)'//tambahkan node baru ke treeview jika'//node tersebut memiliki node child (DropDownItem):AddMenuToTree(aNode, aItem)NexttvUserRights.ExpandAll()tvUserRights.SelectedNode = tvUserRights.Nodes(0)End SubDan selanjutnya adalah membuat procedure untuk mengambil data pada table T_Role dandimasukkan kedalam LstRoles. Pada procedure ini kita akan menggunakan method padaDVDModule yang telah kita buat sebelumnya.Private Sub PopulateRolesToListBox()lstRoles.Items.Clear()Dim RoleList As New List(Of Entity.Role)DVDModule.FillListWithoutParam(RoleList, columns, "usp_SelectRole", _GetType(Entity.Role))For Each items In RoleListlstRoles.Items.Add(items.RoleID & " > " & items.RoleName)NextEnd Sub81Dengan menggunakan method pada DVDModule akan mempermudah kita dalam membuataplikasi ini. Kita tidak perlu lagi membuat satu-persatu fungsi untuk mengambil data, hanyacukup dengan memanggil method FillListWithoutParam (pencarian tanpa parameter) danFilllistWithParam (pencarian dengan parameter), yang akan kita gunakan pada form-formberikut nya. Selanjutnya pada event handler F_FormAccess_Load ketikkan sintaks dibawah.TryPopulateToolStripMenuItem(My.Forms.F_Main.MenuStrip1)PopulateRolesToListBox()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TryLalu buka F_Main (Main Menu), klik menu item Utility > Form Access, dan ketikkan sintaksdibawah.TryDim frm_access As New F_FormAccessfrm_access.ShowDialog()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TryBuatlah event handler TvTransaction_DoubleClick, dan ketikkan sintaks dibawah, yangberfungsi untuk memanggil event handler click pada MenuItem. Sebagai contoh, jika penggunameng-klik text Group pada TreeView maka secara otomatis program akan memanggil eventhandler cick untuk Menu Item Group.TryFor Each aItem As ToolStripMenuItem In MenuStrip1.ItemsDim str As String = TvTransaction.SelectedNode.Tag.ToStringIf aItem.DropDownItems.Count > 0 ThenFor i As Int32 = 0 To aItem.DropDownItems.Count - 1If Not (TypeOf aItem.DropDownItems(i) Is ToolStripMenuItem) ThenContinue ForDim currentItem As ToolStripMenuItem = aItem.DropDownItems(i)If str = currentItem.Tag.ToString ThencurrentItem.PerformClick()Exit SubElseIf currentItem.DropDownItems.Count > 0 ThenFor x As Int32 = 0 To currentItem.DropDownItems.Count -1If Not (TypeOf currentItem.DropDownItems(x) IsToolStripMenuItem) Then Continue For82Dim currentItem2 As ToolStripMenuItem = currentItem.DropDownItems(x)If str = currentItem2.Tag.ToString ThencurrentItem2.PerformClick()Exit SubEnd IfNextEnd IfEnd IfNextEnd IfNextCatch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TryDan jalankan program, pada Main Menu double click text Form Access, maka Form Access akanmuncul seperti gambar dibawah ini.Gambar 4.24Selanjutnya buatlah procedure untuk mengaktifkan atau non aktifkan checkbox pada node,dengan sintaks seperti dibawah.Private Sub CheckedTreeNode(ByVal Checked As Boolean)Dim IEnum As IEnumerator = Me.tvUserRights.Nodes.GetEnumeratorWhile IEnum.MoveNextDim aNode As TreeNode = DirectCast(IEnum.Current, TreeNode)aNode.Checked = CheckedAddRecursiveNode(aNode, Checked)End WhileEnd Sub83Private Sub AddRecursiveNode(ByVal NodeRef As TreeNode, ByVal Checked As Boolean)For Each aNode As TreeNode In NodeRef.NodesaNode.Checked = CheckedAddRecursiveNode(aNode, Checked)NextEnd SubDan ketikkan sintaks berikut untuk menggunakan procedure diatas.Private Sub CheckhedRadioButton(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles rbUncheckedAll.CheckedChanged, rbCheckedAll.CheckedChangedSelect Case sender.name.ToString.ToUpperCase "RBCHECKEDALL"CheckedTreeNode(True)Case "RBUNCHECKEDALL"CheckedTreeNode(False)End SelectEnd SubJalankan program lalu masuk kedalam Form Access, lalu coba klik Radio Button Checked danUnChecked apakah berfungsi, jika di klik Radio Button checked maka seluruh check box padaNode akan aktif, dan sebaliknya untuk UnChecked.Selanjutnya adalah kita akan membuat proses dimana jika Role pada list di klik maka hak aksespada suatu role akan di tampilkan pada TreeView dengan tanda checkbox akan aktif. Pertama-tama adalah dengan mengimports name space OleDB seperti dibawah.Imports System.Data.OleDbDan ketikkan procedure untuk mengambil data pada table T_MenuRole dengan criteria RoleID.Private Sub PopulateRoleDetails(ByVal RoleIDs As String)Dim mydata As New DataSetUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using ObjCommand As New OleDbCommand("usp_SelectMenuRole", connect)ObjCommand.CommandType = CommandType.StoredProcedureObjCommand.Parameters.Add("@RoleID", OleDbType.Integer).Value = RoleIDsUsing objDataAdapter As New OleDbDataAdapterobjDataAdapter.SelectCommand = ObjCommandobjDataAdapter.Fill(mydata, "data")End UsingEnd UsingEnd UsingIf mydata.Tables("data").Rows.Count = 0 ThenFor Each aNode As TreeNode In tvUserRights.NodesaNode.Checked = FalseAddRecursiveNode(aNode, False)Next84ElsePopulateItemCheckedToTheTree(mydata.Tables("data").DefaultView)End IfEnd SubPrivate Sub PopulateItemCheckedToTheTree(ByVal YourView As DataView)Dim IEnum As IEnumerator = Me.tvUserRights.Nodes.GetEnumeratorPrivate Sub PopulateItemCheckedToTheTree(ByVal YourView As DataView)Dim IEnum As IEnumerator = Me.tvUserRights.Nodes.GetEnumeratorWhile IEnum.MoveNextDim aNode As TreeNode = DirectCast(IEnum.Current, TreeNode)YourView.RowFilter = "MenuID = '" & aNode.Tag.ToString & "'"ElseaNode.Checked = TrueElseaNode.Checked = FalseEnd IfAddRecursiveNodeTree(YourView, aNode)End WhileEnd SubTreeNode)Private Sub AddRecursiveNodeTree(ByVal YourView As DataView, ByVal NodeRef AsTreeNode)For Each aNode As TreeNode In NodeRef.NodesYourView.RowFilter = "MenuID = '" & aNode.Tag.ToString & "'"ElseaNode.Checked = TrueElseaNode.Checked = FalseEnd IfAddRecursiveNodeTree(YourView, aNode)NextEnd SubLalu klik ganda LstRoles dan ketikkan sintaks dibawah.TryIf lstRoles.SelectedIndex -1 ThenDim arrItems As String() =DVDModule.GetLeftRightItemFromControl(lstRoles.SelectedItem.ToString)PopulateRoleDetails(arrItems(0))End IfCatch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TrySintaks diatas berfungsi untuk memanggil proses PopulateRoleDetails dengan kriteria Role yangdi klik pada LstRoles, dengan menggunakan fungsi GetLeftRightItemFromControl yang telahkita buat sebelumnya pada DVDModule. Dan jalankan program, lalu pada Form Access klikRole pada LstRoles, jika pada saat pembaca klik Role Admin maka checkbox pada Node akanaktif semua, tapi jika Role yang lain maka tidak aktif, dikarenakan kita belum memasukkan data85While IEnum.MoveNextDim aNode As TreeNode = DirectCast(IEnum.Current, TreeNode)YourView.RowFilter = "MenuID = '" & aNode.Tag.ToString & "'"If YourView.Count > 0 ThenaNode.Checked = TrueIf YourView.Count > 0 ThenaNode.Checked = FalseEnd IfAddRecursiveNodeTree(YourView, aNode)End WhileEnd SubPrivate Sub AddRecursiveNodeTree(ByVal YourView As DataView, ByVal NodeRef AsFor Each aNode As TreeNode In NodeRef.NodesYourView.RowFilter = "MenuID = '" & aNode.Tag.ToString & "'"If YourView.Count > 0 ThenaNode.Checked = TrueIf YourView.Count > 0 ThenaNode.Checked = FalseEnd IfAddRecursiveNodeTree(YourView, aNode)NextEnd Subkedalam table. Dan sekarang kita lanjutkan untuk menginput data pada table, dengan caramengaktifkan Checkbox pada Node di TreeView. Ketikkan sintaks dibawah ini.Private Sub InsertItemCheckedOnTheTreeToDatabase(ByVal RoleID As String, ByValRoleName As String)Dim IEnum As IEnumerator = Me.tvUserRights.Nodes.GetEnumeratorWhile IEnum.MoveNextDim aNode As TreeNode = DirectCast(IEnum.Current, TreeNode)'//insert ke tabel RoleDetails (RoleID, MenuName, FormAction, Tag) :If aNode.Checked ThenDim MenuRole As New Entity.MenuRoleMenuRole.Role.RoleID = RoleIDMenuRole.Menu.MenuID = aNode.Tag.ToStringAccessUser.InsertRoleMenu(MenuRole)AddRecursiveTreeNode(RoleID, aNode)End IfEnd WhileEnd SubPrivate Sub AddRecursiveTreeNode(ByVal RoleID As String, ByVal NodeRef As TreeNode)For Each aNode As TreeNode In NodeRef.Nodes'//insert ke tabel RoleDetails (RoleID, MenuName, FormAction, Tag) :If aNode.Checked ThenDim MenuRole As New Entity.MenuRoleMenuRole.Role.RoleID = RoleIDMenuRole.Menu.MenuID = aNode.Tag.ToStringAccessUser.InsertRoleMenu(MenuRole)End IfAddRecursiveTreeNode(RoleID, aNode)NextEnd SubKlik ganda button Update dan ketikkan sintaks berikut :TryIf lstRoles.SelectedIndex = -1 ThenMsgBox("Pilih dahulu RoleID yang akan diupdate dari List Roles",MsgBoxStyle.Information, "DVD Rental")Exit SubElseDim arrItems As String() =DVDModule.GetLeftRightItemFromControl(lstRoles.SelectedItem.ToString)Dim mYes_No As String = MsgBox("Apakah kamu ingin menyimpan data ?",vbYesNo, "DVD Rental")If mYes_No = vbYes ThenDim MenuRole As New Entity.MenuRoleMenuRole.Role.RoleID = arrItems(0)AccessUser.DeleteRoleMenu(MenuRole)InsertItemCheckedOnTheTreeToDatabase(arrItems(0), arrItems(1))lstRoles.SelectedIndex = -1End IfEnd IfCatch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End Try86Buka F_Main (Main Menu), lalu ketikkan sintaks berikut, yang berfungsi untuk menampilkanMenu Item sesuai dengan hak akses yang diberikan, pada Form Access.#Region "PopulateMenu"Private Sub PopulateRoleDetails()Dim mydata As New DataSetUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using ObjCommand As New OleDbCommand("usp_SelectMenuRole", connect)ObjCommand.CommandType = CommandType.StoredProcedureObjCommand.Parameters.Add("@RoleID", OleDbType.Integer).Value = RoleIDUsing objDataAdapter As New OleDbDataAdapterobjDataAdapter.SelectCommand = ObjCommandobjDataAdapter.Fill(mydata, "data")End UsingEnd UsingEnd UsingCreateMenu(mydata.Tables("data").DefaultView)End SubPrivate Sub CreateMenu(ByVal dtView As DataView)Dim Num As IEnumerator = MenuStrip1.Items.GetEnumeratorWhile Num.MoveNextDim ToolMenu As ToolStripMenuItem = DirectCast(Num.Current,ToolStripMenuItem)dtView.RowFilter = "MenuID = '" & ToolMenu.Tag.ToString & "'"If dtView.Count > 0 ThenToolMenu.Visible = TrueElseToolMenu.Visible = FalseEnd IfCreateMenuItem(dtView, ToolMenu)End WhileEnd SubPrivate Sub CreateMenuItem(ByVal dtView As DataView, ByVal ToolMenu AsToolStripMenuItem)For i As Integer = 0 To ToolMenu.DropDownItems.Count - 1If Not (TypeOf ToolMenu.DropDownItems(i) Is ToolStripMenuItem) ThenContinue FordtView.RowFilter = "MenuID = '" & ToolMenu.DropDownItems(i).Tag.ToString &"'"If dtView.Count > 0 ThenToolMenu.DropDownItems(i).Visible = TrueElseToolMenu.DropDownItems(i).Visible = FalseToolMenu.DropDownItems(i).Tag = ""End IfCreateMenuItem(dtView, ToolMenu.DropDownItems(i))NextEnd Sub#End Region87Lalu aktifkan F_Main dan pada event handler F_Main_Load tambahkan sintaks berikutPopulateRoleDetails()Pada Ms Access (DVD.accdb) buka T_User, lalu masukkan data seperti dibawah.Username : anam, Password: 123, First Name : Khoirul, Last Name : Anam, RoleID : 4 danActived = True (Yes).Selanjutnya jalankan program (gunakan user administrator), lalu klik Role Kasir dan aktifkancheckbox pada TreeView seperti gambar dibawah, lalu klik button update. Lalu Logout danlogin menggunakan username : anam (seperti diatas), maka tampilan pada Main Menu akanseperti gambar dibawah.Gambar 4.2588Gambar 4.26Pada setiap aplikasi umumnya selalu menyediakan fasilitas untuk mengubah password, untukmengantisipasi jika password dari pengguna telah di ketahui oleh orang lain. Untuk aplikasi yangkita buat ini kita juga akan meneyediakan fasilitas ini. Ikuti langkah-langkah dibawah ini untukmembuat form ubah password. Tambahkan sebuah form pada project dan ubah properties nyaseperti dibawah.Dan tambahkan 3 textbox, 3 label dan 2 button lalu ubah masing-masing control seperti dibawah.89NameF_ChangeShowInTaksbarFalseTextForm AccessStartPositionCenterScreenControlBoxFalseFormBorderStyleFixedSingleBackColorWhiteTextBox1NametxtOldBuka MS Access (DVD.accdb) lalu buat Query dengan namanya usp_changepassword dandengan sintaks SQL nya seperti dibawah.UPDATE T_User SET T_User.[Password] = [@password]WHERE (((T_User.UserName)=[@Username]));Lalu pada project kita buka AccessUser dan ketikkan sintaks berikut untuk mengubah passwordpengguna.Public Function ChangePassword(ByVal User As Entity.Users) As OleDbDataReaderTryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = NewOleDbCommand("usp_changepassword", connect)mycommand.CommandType = CommandType.StoredProcedureDim parameterPassword As OleDbParameter = NewOleDbParameter("@Password", OleDbType.VarChar, 15)parameterPassword.Value = User.PasswordDim parameterUserName As OleDbParameter = NewOleDbParameter("@genre_id", OleDbType.VarChar, 15)parameterUserName.Value = User.UsernameWith mycommand.Parameters.Add(parameterPassword).Add(parameterUserName)End With90TextBox2NametxtNewTextBox3NametxtConfirmButton1TextSaveNamebtnSaveButton2TextCloseNamebtnCancelconnect.Open()Using result As OleDbDataReader =mycommand.ExecuteReader(CommandBehavior.CloseConnection)Return resultEnd UsingEnd UsingEnd UsingCatch SqlEx As OleDbExceptionThrow New Exception(SqlEx.Message.ToString())End TryEnd FunctionKembali ke F_Change, klik ganda button Close dan ketikkan sintaks berikut :Me.Close, Laluklik ganda button OK dan ketikkan sintaks berikut.TryDim AccessUser As New AccessData.AccessUserIf txtOld.Text = "" Or txtNew.Text = "" Or txtConfirm.Text = "" ThenMsgBox("Isi seluruh data terlebih dahulu", MsgBoxStyle.Information,"DVD Rental")Exit SubEnd IfIf Password txtOld.Text ThenMsgBox("Password lama salah", MsgBoxStyle.Information, "DVD Rental")Exit SubElseIf txtNew.Text txtConfirm.Text ThenMsgBox("Password baru dan confirm password tidak sama",MsgBoxStyle.Information, "DVD Rental")Exit SubEnd IfDim User As New Entity.Users With {.Password = txtNew.Text, .Username =UserName}AccessUser.ChangePassword(User)txtOld.Text = ""txtNew.Text = ""txtConfirm.Text = ""MsgBox("Ganti password sukses", MsgBoxStyle.Information, "DVD Rental")Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Exclamation, "DVD Rental")End TryPada sintaks diatas sebelum mengubah password terlebih dahulu aplikasi ini mengecek apakahpassword lama yang kita masukkan benar atau salah, ini untuk menjaga jika yang menggantipassword adalah benar-benar pengguna yang benar. Lalu mengecek password baru dankonfirmasi apakah sama, ini untuk memastikan bahwa password yang dimasukkan emang benar.Lalu setelah itu dengan menggunakan fungsi ChangePassword aplikasi mengubah password91lama dengan yang baru. Buka F_Main dan pada MenuItem Utility > Change Password , klikganda dan ketikkan sintaks dibawah.TryDim frm_access As New F_FormAccessfrm_access.ShowDialog()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TryJalankan program dan masuk ke Form Change Password lalu ganti passwordnya.Gambar 4.27Setelah selesai membuat Form Change Password, maka selanjutnya kita akan membuat formuntuk pengolahan data pengguna. Form ini berguna untuk memasukkan data pengguna baik lamaatau baru. Tambahkan sebuah form dan ganti properties nya seperti dibawah:Dan tambahkan 1 GroupBox, 4 TextBox, 5 Label, 1 comboBox, 1 Checkbox dan 2 buttonselanjutnya ganti properties seperti dibawah.92NameF_UserShowInTaksbarFalseTextForm AccessStartPositionCenterScreenMaximizeBoxFalseMinimizeBoxFalseFormBorderStyleFixedSingleBackColorWhiteDan atur posisi control seperti gambar dibawah.Gambar 4.2893GroupBox1TextUser DetailTextBox1NametxtUserTextBox2NametxtPasswordTextBox3NametxtfirstTextBox4NametxtLastComboBox1NamecbRoleCheckBox1NamecbStatusButton1NamebtnSaveText&SaveButton2NamebtnCancelText&CancelLalu pada DVD.accdb buat Query dengan nama masing-masing seperti berikut :usp_SelectUserList, usp_InsertUser, usp_UpdateUser. Dan dengan sintkas SQL seperti dibawah.SELECT T_User.username, T_User.actived, T_User.First_Name, T_User.Last_Name, T_User.RoleIDFROM T_User;INSERT INTO T_User ( UserName, [Password], First_Name, Last_Name, RoleID, Actived )VALUES ([@UserName], [@Password], [@First_Name], [@Last_Name], [@RoleID], 1);UPDATE T_User SET T_User.[Password] = [@Password], T_User.First_Name = [@First_Name],T_User.Last_Name = [@Last_Name], T_User.RoleID = [@RoleID], T_User.Actived = [@Actived]WHERE (((T_User.UserName)=[@UserName]));Dan selanjutnya kita akan membuat 2 fungsi untuk insert dan update user. Buka AccessUser danketikkan sintaks dibawah ini.Public Function UserInsert(ByVal User As Entity.Users) As OleDbDataReaderTryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = New OleDbCommand("usp_InsertUser",connect)mycommand.CommandType = CommandType.StoredProcedureDim parameterUserName As OleDbParameter = NewOleDbParameter("@UserName", OleDbType.VarChar, 15)parameterUserName.Value = User.UsernameDim parameterPassword As OleDbParameter = NewOleDbParameter("@Password", OleDbType.VarChar, 15)parameterPassword.Value = User.PasswordDim parameterFirstName As OleDbParameter = NewOleDbParameter("@first_name", OleDbType.VarChar, 50)parameterFirstName.Value = User.First_NameDim parameterLastName As OleDbParameter = NewOleDbParameter("@last_name", OleDbType.VarChar, 50)parameterLastName.Value = User.Last_NameDim parameterRoleID As OleDbParameter = NewOleDbParameter("@RoleID", OleDbType.Integer)parameterRoleID.Value = User.Role.RoleIDWith mycommand.Parameters.Add(parameterUserName).Add(parameterPassword).Add(parameterFirstName).Add(parameterLastName).Add(parameterRoleID)End With94connect.Open()Using result As OleDbDataReader =mycommand.ExecuteReader(CommandBehavior.CloseConnection)Return resultEnd UsingEnd UsingEnd UsingCatch SqlEx As OleDbExceptionThrow New Exception(SqlEx.Message.ToString())End TryEnd FunctionPublic Function UserUpdate(ByVal User As Entity.Users) As OleDbDataReaderTryUsing connect As New OleDbConnection(My.Settings.DVDConnection)Using mycommand As OleDbCommand = NewOleDbCommand("usp_UpdateUser", connect)mycommand.CommandType = CommandType.StoredProcedureDim parameterPassword As OleDbParameter = NewOleDbParameter("@Password", OleDbType.VarChar, 15)parameterPassword.Value = User.PasswordDim parameterFirstName As OleDbParameter = NewOleDbParameter("@first_name", OleDbType.VarChar, 50)parameterFirstName.Value = User.First_NameDim parameterLastName As OleDbParameter = NewOleDbParameter("@last_name", OleDbType.VarChar, 50)parameterLastName.Value = User.Last_NameDim parameterRoleID As OleDbParameter = NewOleDbParameter("@RoleID", OleDbType.Integer)parameterRoleID.Value = User.Role.RoleIDDim parameterActived As OleDbParameter = NewOleDbParameter("@Actived", OleDbType.Boolean)parameterActived.Value = User.ActivedDim parameterUserName As OleDbParameter = NewOleDbParameter("@UserName", OleDbType.VarChar, 15)parameterUserName.Value = User.UsernameWith mycommand.Parameters.Add(parameterPassword).Add(parameterFirstName).Add(parameterLastName).Add(parameterRoleID).Add(parameterActived).Add(parameterUserName)End Withconnect.Open()Using result As OleDbDataReader =mycommand.ExecuteReader(CommandBehavior.CloseConnection)Return resultEnd UsingEnd UsingEnd UsingCatch SqlEx As OleDbExceptionThrow New Exception(SqlEx.Message.ToString())End TryEnd Function95Dan pada F_User tekan F7 untuk masuk ke jendela Code buat variable Class seperti dibawah.Dim AccessUser As New AccessData.AccessUserDim columns As String() = {}Selanjutnya kita akan membuat procedure untuk menampilkan data pada CbRole, sepertidibawah.Private Sub SortRole()Dim RoleList As New List(Of Entity.Role) From {{"0", "- Choice -"}}DVDModule.FillListWithoutParam(RoleList, columns, "usp_SelectRole", _GetType(Entity.Role))CbRole.DataSource = RoleListCbRole.DisplayMember = "RoleName"CbRole.ValueMember = "RoleID"End SubDan sintaks dibawah ini berfungsi untuk merefresh form (meng- clearkan textbox, membalikkanposisi CbRole seperti semula).Private SubDimDimFor Clear()C As ControlT As TextBoxEach C In Me.GbDetail.ControlsIf TypeOf C Is TextBox ThenT = CType(C, TextBox)T.Text = ""End IfNextCbRole.SelectedIndex = 0End SubLalu ketikkan sintaks dibawah untuk menampilkan data user dengan menggunakan fungsi loginyang telah kita buat sebelumnya pada Class AccessUser.Private Sub ViewUser()Dim list As List(Of Entity.Users) = AccessUser.Login(txtUser.Text)txtUser.Text = list.First.UsernametxtPassword.Text = list.First.PasswordtxtFirst.Text = list.First.First_NametxtLast.Text = list.First.Last_NameCbRole.SelectedIndex = CbRole.FindStringExact(list.First.Role.RoleName)CbStatus.Checked = If(list.First.Actived = "True", True, False)End SubLalu klik ganda F_User dan ketikkan sintaks berikut.96TrySortRole()If Operate = "Add" ThenCbStatus.Checked = TrueCbStatus.Visible = FalseElseCbStatus.Visible = TrueViewUser()End IfCatch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Exclamation, "DVD Rental")End TryPada sintaks diatas jika Operate (Global Variable) tidak sama dengan Add maka pada form iniakan menampilkan data user dengan menggunakan procedure ViewUser. Dan mengaktifkanCbStatus. Klik ganda button Cancel dan ketikkan sintaks dibawah.If Operate = "Add" ThenClear()ElseOperate = NothingMe.Close()End IfSintaks diatas memiliki dua fungsi sama seperti pada F_Main_Load yaitu jika padaOperate=Add, maka proses yang dilakukan adalah hany merefresh form sedangkan Operate Add maka form akan di tutup. Lalu klik ganda button Save dan ketikkan sintaks dibawah ini,yang berfungsi untuk menyimpan data baru maupun mengubah data lama.TryIf CbRole.SelectedIndex = 0 ThenMsgBox("Pilih Role terlebih dahulu", MsgBoxStyle.Information, "DVDRental")Exit SubEnd IfDim User As New Entity.Users With {.Username = txtUser.Text, .Password =txtPassword.Text,.First_Name = txtFirst.Text, .Last_Name = txtLast.Text, .Role = NewEntity.Role With {.RoleID = CbRole.SelectedValue},.Actived = If(CbStatus.Checked = True,True, False)}Dim mYes_No As String = MsgBox("Apakah kamu ingin menyimpan data ?",vbYesNo, "DVD Rental")If mYes_No = vbYes ThenIf Operate = "Add" ThenAccessUser.UserInsert(User)Clear()ElseAccessUser.UserUpdate(User)End IfEnd If97Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Exclamation, "DVD Rental")End TrySekarang buka F_Main, pada menu Item Utility > Users > Add, ketikkan sintaks berikut.TryOperate = "Add"Dim frm_user As New F_Userfrm_user.ShowDialog()Operate = NothingCatch ex As ExceptionMsgBox(ex.Message)End TryDan jalankan program dengan menekan F5, buka form Add user dan masukkan data user padaform, seperti dibawah.Gambar 4.28Lalu bagaimanakah cara mengubah data user?? Mungkin pertanyaan itu ada di benak parapembaca. Pada Form ini untuk mengubah data user sebelumnya adalah kita membutuhkan 2buah form, yang pertama untuk mencari data user dan kedua menampilkan daftar user. Untuklebih jelasnya ikuti langkah dibawah ini.Tambahkan sebuah form pada project dan ubah properties nya seperti dibawah.98Dan tambahkan 1 TextBox, 1 Label dan 3 button lalu ubah propertiesnya seperti dibawah.Dan atur posisinya seperti gambar dibawah.Gambar 4.2999TextBox1NametxtUsernameButton1NamebtnOKTextOKButton2NamebtnSearchTextSearchButton3NamebtnCancelTextCancelNamebtnSaveText&SaveButton2NamebtnCancelText&CancelNameF_UserBoxShowInTaksbarFalseTextForm AccessStartPositionCenterScreenControlBoxFalseFormBorderStyleFixedSingleBackColorWhiteSelanjutnya tambahkan sebuah form lagi dan ubah properties seperti dibawah.Dan tambahkan beberapa control 1 Groupbox, 1 TextBox, 1 GriView dan 1 Button. Dan ubahpropertiesnya seperti dibawah.100TextBox1NametxtSearchGroupbox1TextSearch Criteria by UsernameButton1NamebtnCancelTextCancelButton2NamebtnSearchTextSearchButton3NamebtnCancelTextCancelNamebtnSaveText&SaveButton2NamebtnCancelText&CancelNameH_UserShowInTaksbarFalseTextUser ListStartPositionCenterScreenMaximizeBoxFalseMinimizeBoxFalseFormBorderStyleFixedSingleBackColorWhiteDan atur posisi control diatas seperti gambar dibawah.Gambar 4.30Tekan F7, pada jendela Code H_User buat variable Class seperti dibawah.Dim UserList As New List(Of Entity.Users)Dan buat procedure untuk mengatur format DgView seperti dibawah.Private Sub FormatGridWithBothTableAndColumnStyles()Me.DgView.DefaultCellStyle.ForeColor = Color.NavyMe.DgView.RowsDefaultCellStyle.BackColor = Color.AliceBlueMe.DgView.GridColor = Color.BlueMe.DgView.BorderStyle = BorderStyle.Fixed3DMe.DgView.RowHeadersBorderStyle = BorderStyle.Fixed3DDgView.AutoGenerateColumns = FalseDim UserColumn As New DataGridViewTextBoxColumn()UserColumn.DataPropertyName = "Username"UserColumn.HeaderText = "Username"UserColumn.Width = 80Dim FirstColumn As New DataGridViewTextBoxColumn()FirstColumn.DataPropertyName = "first_name"FirstColumn.HeaderText = "First Name"FirstColumn.Width = 100Dim LastColumn As New DataGridViewTextBoxColumn()LastColumn.DataPropertyName = "last_name"LastColumn.HeaderText = "Last Name"LastColumn.Width = 100101DataGridView1NameDgViewDim ActColumn As New DataGridViewTextBoxColumn()ActColumn.DataPropertyName = "actived"ActColumn.HeaderText = "Actived"ActColumn.Width = 150DgView.Columns.Add(UserColumn)DgView.Columns.Add(FirstColumn)DgView.Columns.Add(LastColumn)DgView.Columns.Add(ActColumn)End SubKlik ganda button cancel dan ketikkan sintaks berikut ; me.close. selanjutnya buatlah EventHandler H_User_FormClosing dan ketikkan sintaks berikut : Operate=Nothing. Lalu klikganda H_User (Event Handler H_User_Load), dan ketikkan sintaks dibawah ini.TryDim columns As String() = {"username", "first_name", "last_name","actived"}DVDModule.FillListWithoutParam(UserList, columns, "usp_SelectUserList", _GetType(Entity.Users))FormatGridWithBothTableAndColumnStyles()DgView.DataSource = UserListtxtSearch.Focus()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TrySintaks diatas berfungsi untuk menampilkan data kedalam DgView yang sebelumnya disimpanterlebih dahulu kedalam Generic List (of User). Lalu buatlah event Handler txtSearch_KeyUpdan ketikkan sintaks berikut :TryDim query = (From a In UserList Where a.Username.Contains(txtSearch.Text)Select a).ToListDgView.DataSource = queryCatch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Information, "DVD Rental")End TrySintaks ini menggunakan LINQ to Object yang berfungsi untuk mencari data pada List (OfUser), dan hasil perncarian tersebut akan ditampilkan pada DgView. Dan terakhir buat eventhandler DgView_CellDoubleClick dan ketikkan sintaks berikut.102If Operate Nothing ThenDim row As DataGridViewRow = DgView.Rows(e.RowIndex)txtSearch.Text = row.Cells(0).ValueOperate = NothingMe.Close()End IfSintaks ini berfungsi jika user melakukan klik ganda pada cell di DgView maka, untuk barisyang di klik akan di ambil datanya untuk kolom pertama. Dan langsung menutup form ini.Selanjutnya aktifkan form F_USerBox, dan masuk ke jendela Code, klik ganda button Canceldan ketikkan sintaks berikut :Operate = NothingMe.Close()Lalu klik ganda button Search dan ketikkan sintaks dibawah ini.Operate = "Edit"Dim frm_HUser As New H_Userfrm_HUser.ShowDialog()txtUsername.Text = frm_HUser.txtSearch.TextSintaks ini berfungsi untuk menampilkan Form H_User yang telah kita buat sebelumnya. Danklik ganda button OK, lalu ketikkan sintaks berikut :TryIf txtUsername.Text = "" ThenMsgBox("Masukkan Username", MsgBoxStyle.Information, "DVD Rental")Exit SubEnd IfDim RoleList As New List(Of Entity.Users)Dim Coltype As System.Data.OleDb.OleDbType() ={System.Data.OleDb.OleDbType.VarChar}Dim FieldName As String() = {"@username"}Dim Size As Integer() = {15}Dim Value As String() = {txtUsername.Text}Dim columns As String() = {"username"}DVDModule.FillListWithParam(RoleList, columns, "usp_selectlogin", _GetType(Entity.Users),FieldName, _Coltype, Size, Value)If RoleList.Count = 0 ThenMsgBox("Username Salah")Exit SubEnd If103Dim frm_User As New F_Userfrm_User.txtUser.Text = txtUsername.Textfrm_User.ShowDialog()Me.Close()Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Exclamation, "DVD Rental")End TrySintaks diatas berfungsi untuk memvalidasi username yang dimasukkan kedalam textbox, jikausername tidak ada pada table maka akan ada pesan error. Jika username yang dimasukkan benarmaka F_User akan ditampilkan berserta data-data user yang dicari. Lalu buka F_Main (MainMenu) pada Menu Item Utilty > Users > Edit ketikkan sintaks berikut :TryDim frm_UserBox As New F_UserBoxfrm_UserBox.ShowDialog()Catch ex As ExceptionEnd TryUtility > User > User List lalu klik ganda dan ketikkan sintaks berikut :TryDim frm_HUser As New H_Userfrm_HUser.ShowDialog()Catch ex As ExceptionMsgBox(ex.Message)End TryJalankan program dan klik menu utility > User > Edit, lalu masukkan username, jika tidakmengetahui username yang dicari tekan tombol search, maka daftar pengguna akan tampil. Danselanjutnya ubah data user pada form User.Gambar 4.30104Gambar 4.31Gambar 4.32105