Anda di halaman 1dari 43

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB I PENDAHULUAN

Bahasa Visual Basic pertama kali memperkenalkan Object Oriented Programming (OOP) pada versi 4.0, namun sampai dengan versi 6.0 fitur-fitur OOP tersebut masih belum dirasa lengkap dan belum bisa menjawab kebutuhan developer. Setelah VB berjalan pada platform .NET Framework, yaitu mulai dari .NET Framework 1.1 (mulai VB7) dan sampai pada saat penulis menulis modul ini sudah mencapai .NET Framework 3.5 SP1, banyak sekali fitur-fitur OOP yang ditambahkan ke dalamnya. Jika anda ingin melakukan sesuatu di .NET anda pasti membutuhkan object, misal ketika anda bekerja dengan file maka anda harus menggunakan object File atau Directory, untuk mencetak ke printer dapat menggunakan PrintDocument object, dan untuk berinteraksi dengan database membutuhkan DataReader, DataSet object. Jadi dapat dismpulkan bahwa pada VB.NET semua adalah object. VB.NET data types seperti array, string, dan bahkan integer adalah object. Begitu juga dengan Form yang merupakan object turunan (Inherits) dari Class System.Windows.Forms. Untuk bekerja dengan object secara maksimal menggunakan VB.NET anda harus mengerti secara benar konsep object oriented programming. Pada bab ini penulis akan membahas sedikit tentang hal-hal dan istilah-istilah penting yang biasa digunakan dalam Pemrograman Berorientasi Objek/ Object Oriented Programming menggunakan Visual Basic 2005. Semua contoh yang ada pada bab ini dapat digunakan cukup dengan aplikasi notepad atau code editor yang lain dan Command Prompt (cmd.exe) dengan syarat pada komputer telah terinstal .NET Framework. Adapun cara meng-compile-nya dapat dilakukan menggunakan vbc.exe yang secara otomatis akan terinstal ketika anda menginstal .NET Framwork. Jika anda menginstal Windows anda pada drive C: maka lokasi vbc.exe akan terdapat di C:\Windows\Microsoft.NET\Framework\v2.0.50727 dimana v2.0.50727 merupakan versi .NET Framework yang anda instal. Adapun cara menggunakan contoh yang terdapat pada bab ini adalah dengan mengetikkan kode yang terdapat pada contoh dan menyimpannya dengan ekstensi *.vb, misalnya Latihan.vb. Dan cara meng-compile-nya adalah sebagai berikut : Buka aplikasi cmd.exe dengan cara Start Run kemudian ketikkan cmd dan klik OK untuk menjalankan command Prompt Pindah Directory anda ke tempat dimana anda menyimpan file Latihan.vb tadi, misalnya penulis menyimpannya di F:\LATIHAN VB.NET dengan mengetikkan perintah seperti pada gambar di bawah ini :

Untuk dapat menggunakan vbc.exe di Directory tempat anda menyimpan file Latihan.vb maka path environmentnya harus disetting sama dengan path dimana Directory file vbc.exe berada. Perhatikan gambar di bawah ini :

Langkah terakhir tentu saja adalah proses compiling yaitu dengan cara mengetikkan perintah vbc Latihan.vb. Perintah vbc berfungsi untuk menjalankan vbc.exe dan Latihan.vb adalah
1

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

nama file yang ingin di-compile. Harap diingat bahwa nama file harus diketik lengkap beserta ekstensinya. Jika tidak terjadi Error maka akan dihasilkan seperti gambar di bawah ini :

1.1 PENGERTIAN OBJECT ORIENTED PROGRAMMING Bahasa VB terkenal karena kemudahan dalam mengembangkan aplikasi secara terstruktur. Programmer VB biasa menggunakan style event-drivent programming yang menyebabkan terjadi duplikasi dan kode tersebar di berbagai tempat. Jika anda ingin membuat kode yang lebih baik, lebih reliable, dan dapat diperbaiki dengan mudah, anda perlu mempelajari teknik OOP. Secara mudah OOP dapat disimpulkan sebagai suatu teknik atau metode untuk menangani kompleksitas pembuatan program. Jika anda mengikuti aturan-aturan dalam metode tersebut maka program yang anda buat akan lebih mudah untuk dimaintain dan dikembangkan. 1.2 MENGAPA PERLU OBJECT ORIENTED PROGRAMMING Aplikasi berbasis windows dan web adalah program yang sangat kompleks yang menyajikan tampilan menarik kepada user dan menawarkan user interface yang kompleks dengan tombol, dropdown, popup menu, toolbox, dan masih banyak komponen yang lain. Dibelakang user interface tersebut masih ada hubungan bussiness prosess yang kompleks seperti hubungan antara Product, Customer, dan Order yang melibatkan banyak logika dan pengolahan data. Untuk menangani berbagai kompleksitas yang terjadi maka programmer mengembangkan teknik yang diberi nama Objcet Oriented Programming, dengan tujuan yang sederhana yaitu mengatur kompleksitas dengan memodelkan aspek esensial yang ada. Jika model yang dikembangkan semakin mendekati problem yang akan dipecahkan maka semakin mudah pula persoalan tersebut dapat dimengerti sehingga program lebih mudah ditulis dan di-maintain. 1.3 STRUKTUR PROGRAM VISUAL BASIC .NET Sebagai bahasa yang telah dirancang kembali dari awal, suatu program Visual Basic memiliki urutan berikut yang merupakan struktur dari program: 1. Option statements Perintah Option akan menentukan aturan dasar penanganan kode dalam program pada saat kompilasi. Perintah Option terdiri dari : Option Explicit On/Off, menentukan apakah variabel-varibel yang digunakan dalam program harus dideklarasikan terlebih dahulu atau tidak (defaultnya adalah On). Contoh :
Option Explicit Off Module Modmain Sub Main() a = 100000 End Sub End Module

Yang jika di kompilasi tidak menyebabkan kesalahan walaupun variabel a tidak pernah dideklarasikan.
Option Module Sub a Explicit On Modmain Main() = 100000

Pemrograman Berorientasi Objek II


End Sub End Module

Nanang Sutisna, S.Kom

Yang jika dikompilasi akan menyebabkan kesalahan karena variabel a tidak dideklarasikan terlebih dahulu Option Strict On/Off, menentukan apakah kompiler memperbolehkan konversi nilai implicit yang berpotensi menyebabkan kehilangan data (default adalah Off), misalnya kita memasukan nilai dari suatu variabel dengan tipe data yang lebih lebar ke variabel dengan tipe data yang lebih sempit Contoh :
Option Explicit On Option Strict On Module Hello Sub Main() Dim a As Integer Dim b As Short a = 100000 b = a End Sub End Module

Yang jika dikompilasi akan menyebabkan pesan kesalahan karena variabel b yang bertipe short (16 bit), tidak dimungkinkan menampung nilai dari tipe integer (32 bit), yang memiliki potensi kehilangan data pada saat runtime, sehingga pemakaian Option Strict On akan menampilkan pesan kesalahan pada saat kompilasi. Perintah Option Compare Binary/Text akan menentukan bagaimana data bertipe string akan dibandingkan antara satu dengan lainnya (default adalah Binary). Adapun aturan perbandingan pada masing-masing setting adalah sebagai berikut : Pada Option Compare Binary : A < B < E < Z < a < b < e < z < < < < < < Pada Option Compare Text : (A=a) < (= ) < (B=b) < (E=e) < (= ) < ( = ) < (Z=z) Contoh :
Option Compare Binary Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a = b) 'False End Sub End Module

Yang jika dijalankan akan menghasilkan False, karena perbandingan data berdasarkan nilai biner dari masing-masing data string . Tetapi jika :
Option Compare Text Module Hello Sub Main() Dim a,b As String a = "ABC" b = "abc" System.Console.WriteLine(a = b) 'True End Sub End Module

Yang jika dijalankan akan menghasikan True, karena sebagai text-nya "ABC" dianggap sama dengan "abc" tanpa melihat huruf besar atau kecil. 2. Imports statements Perintah Imports berfungsi memudahkan pengetikan tanpa harus mengetik nama class didalam namespace yang di import. Contoh :
Module Hello Sub Main() System.Console.WriteLine("Hello World !") End Sub End Module

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Yang setelah adanya Imports System.Console penulisan System.Console.WriteLine menjadi sebagai berikut:
Imports System.Console Module Hello Sub Main() WriteLine("Hello World !") End Sub End Module

Dalam hal ini kita tidak perlu lagi mengetik System.Console.WriteLine, tapi cukup WriteLine, karena kita telah melakukan Imports System.Console. 3. Main procedure Procedure Main merupakan titik awal dari program anda - merupakan procedure yang pertama kali dieksekusi ketika anda menjalankan kode anda. Jadi apa yang ingin anda jalankan pertama kali pada program anda ditempatkan pada procedure main ini. Adapun contoh penggunaanya sudah ada pada contoh-contoh yang sebelumnya. 1.4 STRUCTURE Sebelum muncul class dalam OOP maka ide pertama adalah membuat structure. Structure digunakan untuk melakukan grouping data (beberapa variable) secara bersama. Misalnya anda ingin menyimpan informasi tentang data Pegawai anda dapat membuat beberapa variable seperti nip, nama, tglahir, alamat, dan nohp, namun jika anda membuat menjadi variable yang berdiri sendiri-sendiri maka kode anda akan menjadi semakin kompleks, dan kita tidak bisa tahu bahwa variable-varible tersebut punya hubungan. Jika anda ingin menyimpan data beberapa pegawai maka ini akan sangat sulit dilakukan untuk melacak hubungan informasi antar pegawai. Untuk menjadikan informasi yang ada menjadi satu group anda dapat menggunakan structure. Contoh :
Option Explicit On Imports System.Console Public Module MyMod Public Structure Pegawai Dim nip As String Dim nama As String Dim tgllahir As Date Dim alamat As String Dim nohp As String End Structure Sub Main() Dim pgw1 As Pegawai

Membuat Structure Pegawai Deklarasi variable nip sebagai bagian dari structure

Deklarasi Object pgw1 sebagai type data Pegawai pgw1.nip = "123456" Mengisi nilai field nip dari object pgw1 pgw1.nama = "Nanang Sutisna" pgw1.tgllahir = #05-03-1984# pgw1.alamat = Cilegon pgw1.nohp = "08156881169" WriteLine (NIP : & pgw1.nip & , Nama : & pgw1.nama) End Sub End Module

1.5 NAMESPACE Setiap kode yang kita tulis ada didalam objek konseptual yang bernama namespace. Namespaces menjaga .NET kode dari kebingungan akibat nama class yang sama. Misal perusahaan asuransi dengan nama Act menggunakan namespace ActInsurance untuk semua program, didalam ActInsurance juga terdapat namespace dengan nama Policy, jadi kita bisa mengakses semua class yang ada didalam namespace Policy dengan memanggil ActInsurance.Policy. Namespace dapat diibaratkan seperti folder yang biasa kita gunakan untuk mengelompokan file. Namespace juga bersifat hirarki sama seperti folder. Dengan menggunakan namespace kode yang kita buat dapat dikelompokan menjadi lebih rapi dan terstruktur.
4

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Namespace ActInsurance penting karena digunakan untuk membedakan dengan program lain, misal untuk perusahaan asuransi Ecme juga memiliki namespace EcmeInsurance dan didalamnya memiliki namespace dengan nama sama yaitu Policy tapi implementasi classclass yang ada di dalamnya berbeda dengan namespace Policy pada namespace ActInsurance yang sudah dibuat sebelumnya. Untuk mengakses Policy pada EcmeInsurance digunakan EcmeInsurance.Policy sedangkan untuk mengakses Policy pada ActInsurance digunakan ActInsurance.Policy. Dengan menggunakan namespace kita tidak akan bingung untuk mengakses class-class yang kita inginkan karena sudah dikelompokan dengan terstruktur dan dibedakan dengan nama namespacenya. Jika kita melihat BCL (Base Class Library) / FCL (Framework Class Library) yang ada pada .NET, ribuan class library tersebut dikelompok-kelompokan kedalam lebih dari 100 namespace. Misal untuk menggunakan class-class untuk membuat GUI pada aplikasi windows anda dapat menggunakan namespace System.Windows.Form 1.6 ASSEMBLIES Setelah pada topik sebelumnya kita membahas tentang namespaces untuk mengelompokan class-class yang kita buat, sekarang kita akan belajar untuk menggunakan namespace. Untuk menggunakan namespace pada aplikasi yang anda buat, anda butuh untuk mengakses assembly yang tepat yang berupa file fisik (.dll atau .exe) yang mengandung kode yang sudah anda compile. Misal jika anda ingin menggunakan namespace System.Windows.Form maka anda harus mengakses file System.Windows.Form.dll (biasanya nama namespace sama dengan nama assembly namun bisa saja lain walau tidak disarankan). 1.7 CLASS, OBJECT dan INSTANCE Mungkin anda pernah bertanya apa sich bedanya class dan object? Ilustrasi ini mungkin bisa menjelaskan perbedaannya. Jika anda ingin membangun rumah Class adalah blueprint/ gambar (berisi spesifikasi lengkap dari rumah yang akan dibuat, ukuran, jumlah, dll). Sedangkan object adalah bentuk fisik / rumah yang dibangun berdasarkan blueprint / class yang sudah ada.

Sebuah class terdiri dari properties, method, dan events (yang biasa disebut dengan member). Properties menyimpan informasi tentang object yang dibuat. Sebagai contoh pada aplikasi windows object TextBox memiliki property Text, yang berisi teks yang akan ditampilkan pada textbox. Jika anda memiliki texbox dengan nama txtNama maka anda dapat menuliskan strNama = txtNama.Text untuk mengcopy nilai dari textbox ke variabel strNama. Method adalah perintah yang membuat object melakukan sesuatu. Sebagai contoh MessageBox.Show() menggunakan Show() method dari MessageBox object untuk menampilkan pesan, dan MyDoc.Print() menggunakan Print() method menggunakan MyDoc object untuk mengirimkan data ke printer. Penulisan method pada VB.NET diikuti dengan tanda kurung (). Events adalah notifikasi yang dikirimkan oleh object, dimana anda dapat listen atau ignore notifikasi tersebut. Sebagai contoh object button mengirimkan Click event, dan anda dapat merespond event tersebut dan menjalankan code anda. Instance adalah copy unik dari class yang merepresentasikan object. Untuk menggunakan class anda harus membuat instance terlebih dahulu baru dapat mengakses class member, kecuali anda menggunakan shared member, maka anda tidak perlu membuat instance untuk mengakses member yg ada dalam class tersebut. 1.8 INHERITANCE Inheritance digunakan untuk membuat Derived Class (Class Turunan) dimana class turunan ini akan mewarisi semua Properties dan Method yang dimiliki oleh Parent Classnya.
5

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Sebagai contoh ketika kita membuat sebuah Form1 kita Inherits Form1 tersebut dari class System.Windows.Forms.Form. Perhatikan contoh berikut :
Option Explicit On Imports System.Windows.Forms Module ModLatihanForm Public Class Form1 Inherits System.Windows.Forms.Form Dim Frm2 As New Form2 Public WithEvents BtnFrm2 As New System.Windows.Forms.Button Public Sub New() Me.Text = "Form Coba" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.BackColor = System.Drawing.Color.LightBlue Me.BtnFrm2.Location = New System.Drawing.Point(182, 103) Me.Controls.Add(Me.BtnFrm2) Me.BtnFrm2.Text = &Ke Form2 End Sub Private Sub BtnFrm2_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnFrm2.Click Frm2.ShowDialog() Me.Close End Sub End Class Public Class Form2 Inherits System.Windows.Forms.Form Public WithEvents BtnEnd As New System.Windows.Forms.Button Public Sub New() Me.Text = "Form Coba2" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.BackColor = System.Drawing.Color.LightBlue Me.BtnEnd.Location = New System.Drawing.Point(182, 103) Me.BtnEnd.Text = "Exit" Me.Controls.Add(Me.BtnEnd) End Sub Private Sub BtnEnd_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnEnd.Click End End Sub End Class Sub Main() Dim Frm As New Form1 Frm.ShowDialog() End Sub End Module

Kode program di atas akan menghasilkan dua buah Form yaitu Form1 dan Form2 dengan sebuah kontrol Button pada masing-masing Form. Pada saat startup yang running pertama kali adalah Form1 dan ketika BtnFrm2 diklik maka akan memanggil Form2. Sedangkan ketika BtnEnd yang berada di Form2 diklik akan mengakhiri aplikasi. Berikut penjelasannya secara lebih terperinci :
Option Explicit On

Perintah ini digunakan untuk memastikan agar semua variable dan object telah dideklarasikan.

Pemrograman Berorientasi Objek II


Imports System.Windows.Forms

Nanang Sutisna, S.Kom

Mengimport Namespace System.Windows.Forms sehingga sebenarnya ketika mendeklarasikan BtnFrm2 di atas cukup dengan perintah Public WithEvents BtnFrm2 As New Button.
Module ModLatihanForm

Membuat sebuah Module ModLatihanForm


Public Class Form1 . . . . End Class

Mendeklarasikan sebuah Class yaitu Class Form1.


Inherits System.Windows.Forms.Form

Inherits/ membuat Class turunan dari Class Form yang terdapat pada Namespace System.Windows.Forms.
Dim Frm2 As New Form2

Instansiasi Frm2 sebagai instance sekaligus pembuatan Object dari Class Form2.
Public WithEvents BtnFrm2 As New System.Windows.Forms.Button

Pendeklarasian dan instansiasi BtnFrm2 dari Class Button yang terdapat pada Namespace System.Windows.Forms. Perintah WithEvents disertakan supaya semua Event yang dimiliki Class Button juga dimiliki dan dapat digunakan oleh BtnFrm2.
Public Sub New() . . . End Sub

Constructor bagi Class Form1. Constructor adalah method khusus suatu Class yang akan otomatis dijalankan begitu instance dari Class dibuat dimemori komputer. Jadi ketika terjadi instansiasi Class Form1 maka perintah ini secara otomatis akan dijalankan.
Me.Text = "Form Coba"

Mengatur nilai Properti Text dari Me/Form1 menjadi Form Coba.


Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen

Membuat posisi Form1 berada ditengah layar ketika running pertama kali.
Me.BackColor = System.Drawing.Color.LightBlue

Merubah warna background Form1 menjadi warna LightBlue.


Me.BtnFrm2.Location = New System.Drawing.Point(182, 103)

Mengatur lokasi BtnFrm2, dalam hal ini berarti BtnFrm2 akan digambar pada posisi X = 182 dan Y = 103
Me.Controls.Add(Me.BtnFrm2)

Menambahkan Object BtnFrm2 ke dalam Form1.


Me.BtnFrm2.Text = &Ke Form2

Merubah nilai properti Text BtnFrm2 menjadi Ke Form2. Karakter & digunakan untuk membuat shortcut dalam mengakses object BtnFrm2 (tekan Alt+Karakter Shortcut untuk menggunakan shortcutnya pada saat runtime). Pada saat runtime Text-nya akan menjadi Ke Form2.
7

Pemrograman Berorientasi Objek II


Private Sub BtnFrm2_Click(ByVal sender System.EventArgs) Handles BtnFrm2.Click . . . End Sub As

Nanang Sutisna, S.Kom


System.Object, ByVal e As _

Penggunaan Event Click pada BtnFrm2


Frm2.ShowDialog()

Mencetak/ menampilkan Frm2/ Form2 ke layar ketika BtnFrm2 diklik.


Me.Close

Menutup Form1.
Public Class Form2 Inherits System.Windows.Forms.Form Public WithEvents BtnEnd As New System.Windows.Forms.Button Sub New() Me.Text = "Form Coba2" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.BackColor = System.Drawing.Color.LightBlue Me.BtnEnd.Location = New System.Drawing.Point(182, 103) Me.BtnEnd.Text = "Exit" Me.Controls.Add(Me.BtnEnd) End Sub Private Sub BtnEnd_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnEnd.Click End End Sub End Class

Penjelasan kode program pada Class Form2 sama dengan penjelasan pada Class Form1 di atas.
Sub Main() . . . End Sub

Procedure Main dari program/ aplikasi dimana merupakan procedure yang pertama kali dibaca dan dirunning oleh aplikasi.
Dim Frm As New Form1

Instansiasi Frm sebagai instance sekaligus pembuatan Object dari Class Form1.
Frm.ShowDialog()

Mencetak/ menampilkan Frm/ Form1 ke layar.

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB II MEMBUAT DATABASE MENGGUNAKAN MICROSOFT SQL SERVER 2005

Setelah mendapatkan sedikit penjelasan mengenai konsep OOP dan struktur program VB.NET pada bab sebelumnya maka tiba waktunya, mulai dari bab ini dan bab-bab selanjutnya, kita akan membuat contoh aplikasi nyatanya karena menurut penulis cara belajar yang efektif adalah dengan langsung mempraktekkannya. Pada modul kali ini penulis akan membahas pembuatan sebuah aplikasi sederhana yang berbasis database. Pada modul ini penulis menggunakan Microsoft Visual Studio 2005 Professional Edition dan Microsoft SQL Server 2005 Enterprise Edition. Pada bab ini penulis tidak akan terlalu banyak membahas tentang bahasa SQL karena fokus penulis adalah pada bahasa VB.NET nya. 2.1.MEMBUAT DATABASE DAN TABLE Tanpa banyak basa-basi lagi mari kita mulai membuat database-nya. Buka dan jalankan SQL Server Management Studio anda dengan cara klik StartAll ProgramsMicrosoft SQL Server 2005SQL Server Management Studio. Kemudian buat Query Editor baru dengan cara klik New Query

Klik disini

Setelah muncul Query Editor baru ketikkan perintah di bawah ini :


/* Membuat Database baru dengan nama LATIHAN */ CREATE DATABASE LATIHAN GO /* Menggunakan Database LATIHAN */ USE LATIHAN GO /* Membuat Table dengan nama USERS */ CREATE TABLE USERS (USERNAME VARCHAR(20) NOT NULL PRIMARY KEY, PASSWORD VARCHAR(20) NOT NULL) GO /* Membuat Table dengan nama PEGAWAI */ CREATE TABLE PEGAWAI (NIP VARCHAR(10) NOT NULL PRIMARY KEY, NAMA VARCHAR(25) NOT NULL, TGLLAHIR DATETIME NOT NULL, JALAN VARCHAR(30), KOTA VARCHAR(20), KODEPOS VARCHAR(5) DEFAULT '42434') GO

Pemrograman Berorientasi Objek II


/* Tambahkan dua buah data ke Table USERS */ INSERT USERS VALUES ('Nanang', 'sutisna') INSERT USERS VALUES ('sutisna', 'nanang')

Nanang Sutisna, S.Kom

/* Tambahkan dua buah data ke Table PEGAWAI */ INSERT PEGAWAI VALUES ('0001.02.10', 'Ahmad Jaenudin', '05-03-1980', 'Jl. Raya Cilegon No. 41', 'Cilegon', '42434') INSERT PEGAWAI VALUES ('0002.02.10', 'Lionel Messi', '10-11-1982', 'Jl. Raya Serang No. 11', 'Serang', '42555')

Setelah semua kode diketik di Query Editor kemudian tekan tombol F5 untuk mengeksekusinya. 2.2.MEMBUAT STORED PROCEDURE Stored Procedure adalah procedure atau function yang disimpan di dalam database untuk digunakan di kemudian hari. Berikut ini akan kita buat tiga buah Stored Procedure untuk memanipulasi data (Insert, Update, Delete) yang ada di Table Pegawai.
/* STORED PROCEDURE UNTUK INSERT DATA KE TABLE PEGAWAI */ CREATE PROCEDURE SPI_PEGAWAI @NIP VARCHAR(10), @NAMA VARCHAR(25), @TGLLAHIR DATETIME, Deklarasi Parameter @JALAN VARCHAR(30), @KOTA VARCHAR(20), @KODEPOS VARCHAR(5) AS INSERT PEGAWAI VALUES (@NIP, @NAMA, @TGLLAHIR, @JALAN, @KOTA, @KODEPOS) GO /* STORED PROCEDURE UNTUK UPDATE DATA YANG ADA DI TABLE PEGAWAI */ CREATE PROCEDURE SPU_PEGAWAI @NIP VARCHAR(10), @NAMA VARCHAR(25), @TGLLAHIR DATETIME, @JALAN VARCHAR(30), @KOTA VARCHAR(20), @KODEPOS VARCHAR(5) AS UPDATE PEGAWAI SET NAMA = @NAMA, TGLLAHIR = @TGLLAHIR, JALAN = @JALAN, KOTA = @KOTA, KODEPOS = @KODEPOS WHERE NIP = @NIP GO /* STORED PROCEDURE UNTUK DELETE DATA YANG ADA DI TABLE PEGAWAI */ CREATE PROCEDURE SPD_PEGAWAI @NIP VARCHAR(10) AS DELETE FROM PEGAWAI WHERE NIP = @NIP GO

Setelah semua kode diketik di Query Editor kemudian tekan tombol F5 untuk mengeksekusinya.

10

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB III DESAIN FORM SPLASH SCREEN

Biasanya aplikasi yang berbasis windows memiliki Form Splash Screen. Biasanya Form ini berisi nama aplikasi, copy right dan hal lain yang berkaitan dengan aplikasi tersebut. Tanpa banyak basa-basi lagi mari kita langsung praktek. 3.1.SETTING FORM Buka program Ms. Visual Studio 2005 anda dengan cara klik StartAll ProgramsMicrosoft Visual Studio 2005 Microsoft Visual Studio 2005. Setelah muncul halaman Start Page klik FileNewProject atau tekan tombol Ctrl+Shift+N.

Klik disini

Ketika muncul kotak dialog New Project, pilih Visual BasicWindows pada Project types dan pilih Visual Studio installed templatesWindows Application pada Templates. Isikan nama project yang anda inginkan pada Name (penulis menggunakan nama LATIHAN), pilih lokasi directory tempat anda ingin menyimpannya pada Location (penulis menyimpannya di directory E:\VB NET) , untuk Solution Name secara otomatis akan terisi sama dengan Name. Setelah selesai klik OK.

11

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Maka akan muncul IDE dengan sebuah Form dengan nama Form1. Untuk keperluan latihan pada bab ini tambahkan satu buah form lagi ke dalam project dengan cara klik kanan nama project (LATIHAN) yang terdapat pada Solution Explorer (biasanya ada di pojok kanan atas IDE), kemudian pilih AddWindows Form. Kemudian akan muncul kotak dialog Add New Item. Ganti Name menjadi FrmLogin.vb dan klik Add. Untuk lebih jelasnya lihat gambar di bawah ini :

12

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Langkah selanjutnya adalah setting properti Form1. Aktifkan Form1 dengan cara double klik Form1.vb yang ada pada Solution Explorer. Tambahkan 2 (dua) buah Label, 1 (satu) buah PictureBox, 1 (satu) buah Progressbar, dan 1 (satu) buah Timer ke dalam Form1. Kemudian atur nilai Properties dari masing-masing kontrol tersebut seperti pada tabel di bawah ini. Setelah itu atur posisi setiap kontrol seperti pada gambar di bawah. Nama Object

Form1

Label1

Nama Properti Name BackColor ControlBox FormBorderStyle ShowInTaskbar StartPosition Text FontSize FontBold ForeColor Text Image SizeMode FontSize Text Name Enabled

Nilai FrmSplash LightBlue FALSE FixedToolWindow FALSE CenterScreen "" 14 TRUE Red Latihan Visual Studio 2005 Pilih gambar yang anda inginkan dan import dari Project Resource File AutoSize 9 Copy Right 2010. Nanang Sutisna TimerSplash TRUE

PictureBox1 Label2 Timer1

13

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

3.2.SOURCE CODE Setelah setting layout form Splash Screen selesai, sekarang saatnya kita tambahkan kode program agar form tersebut berjalan sesuai dengan keinginan kita. Double klik pada TimerSplash dan tambahkan source code sebagai berikut :
Dim frm As New FrmLogin ProgressBar1.Value += 4 If ProgressBar1.Value = 100 Then TimerSplash.Dispose() Me.Hide() frm.Show() End If

Penjelasan dari source code di atas adalah sebagai berikut :


Dim frm As New FrmLogin

Deklarasi frm sebagai instance dari Class FrmLogin, ingat bahwa Form juga merupakan Class dan Object.
ProgressBar1.Value += 4

Menambahkan nilai ProgressBar1 dengan penambahan 4 sehingga akan tampak ProgressBar1 bergerak. Kode di atas sama dengan ProgressBar1.Value = ProgressBar1.Value + 4
If ProgressBar1.Value = 100 Then . . . End If

Fungsi percabangan yang mengecek apakah nilai ProgressBar1 = 100. Jika ya maka procedure yang berada di kalang If akan dijalankan.
TimerSplash.Dispose()

Membuang TimerSplash dari memori sehingga kegiatan yang sedang dilakukan TimerSplash dihentikan
Me.Hide()

Menyembunyikan FrmSplash (Me).


frm.Show()

Menampilkan frm (FrmLogin)

14

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB IV DESAIN FORM LOGIN

Sebelum anda mendesain Form Login, ada baiknya jika anda mengetahui terlebih dahulu konsep ADO.NET karena pada Form Login dan pada bab-bab selanjutnya akan ada banyak penggunaan ADO.NET. 4.1.PENGENALAN ADO.NET ADO.NET merupakan NET library sebagai bagian dari .NET Framework yang bertanggung jawab untuk memberikan kemudahan dalam pengaksesan basis data secara universal yang tidak tergantung oleh jenis basis data nya. ADO.NET menyediakan kumpulan class-class yang tergabung dalam beberapa namespace. Untuk DBMS MS Access namespace yang digunakan adalah System.Data.OleDb dan untuk SQL Server adalah System.Data.SqlClient. Kumpulan class-class dalam namespace tersebut : Fungsi Membuka Koneksi Mengeksekusi perintah SQL Membaca record secara forward only Penghubung Ke DataSet Namespace System.Data.SqlClient SqlConnection SqlCommand SqlDataReader SqlDataAdapter

System.Data.OleDb OleDBConnection OleDbCommand OleDbDataReader OleDbDataAdapter

4.1.1. NET Data Provider ADO.NET menyediakan sekumpulan objek yang bertangung jawab mengkoneksikan diri ke database dan manipulasi data seperti INSERT, UPDATE, dan DELETE (Connection, Command, DataReader, DataAdapter). ADO.NET terdiri dari beberapa provider sesuai dengna tipe database nya : SQL Server.NET Data Provider (System.Data.SqlClient) Provider untuk SQL Server versi 7.0 ke atas. Provider ini dioptimasi khusus untuk SQL Server yang mengakses secara langsung native data transfer protocol SQL Server. Oracle.NET data Provider (System.Data.OracleClient) Provider untuk Oracle versi 8.17 ke atas. Memungkinkan mengkoneksikan ke database Orale dengan menggunakan Oracle client connectivity OLEDB.NET Data Provider (System.Data.OleDb) Provider untuk OLEDB data source. Database yang menggunakan provider ini adalah MS Access, SQL Server 6.5, dan database lain yang menggunakan OLEDB ODBC.NET (System.Data.Odbc) Provider untuk database yang hanya memiliki driver ODBC Class-class yang terdapat di masing-masing .NET Data Provider : Objek Connection Contoh OleDbConnection, SqlConnection, OracleConnection, OdbcConnection
15

Keterangan Membuka koneksi ke database

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Command

DataReader

DataAdapter

OleDbCommand, SqlCommand, OracleCommand, OdbcCommand OleDbDataReader, SqlDataReader, OracleDataReader, OdbcDataReader OleDbDataAdapter, SqlDataAdapter, OracleDataAdapter, OdbcDataAdapter

Mengeksekusi perintah SQL

Membaca data secara read only dan forward only

Penghubung ke DataSet

4.1.2. Menggunakan ADO.NET Ketika kita berhubungan dengan basis data menggunakan ADO.NET ritual nya adalah sebagai berikut : 1. Membuka Koneksi Hal pertama yang harus dilakukan untuk membuat aplikasi database adalah membuka koneksi. Koneksi ini selalu diperlukan untuk menjalankan operasi-operasi manipulasi data seperti INSERT, UPDATE dan DELETE ataupun meng-query record tertentu dengan perintah SELECT. Class yang bertugas untuk membuka koneksi adalah OleDbConnection untuk MS Access, dan SqlConnection untuk SQL Server. OleDbConnection dan SqlConnection membutuhkan property ConnectionString yang harus diisi. Selain lewat property Connection String bisa ditambahkan juga sebagai parameter constructor class. Connection String tiap database berbeda-beda. Connection String ini menunjukan provider DBMS yang digunakan beserta letak direktori dan nama database nya baik lokal maupun remote database Contoh source code untuk buka koneksi : MS Access :
Dim connStr As String connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=c:\\NWIND.mdb" Dim conn As OleDbConnection = new OleDbConnection(connStr) conn.Open()

atau bisa seperti ini :


Dim connStr As String connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Dim conn OleDbConnection = new OleDbConnection() conn.ConnectionString = connStr conn.Open() Source=c:\\NWIND.mdb"

SQL Server :
Dim connStr As String connStr = "Data Source=NANANG;Initial Catalog=Northwind; connStr &= Integrated Security=True" Dim conn As SqlConnection = new SqlConnection(connStr) conn.Open()

Data Source pada ConnStr diisi nama server lokal atau bisa diisi IP Address jika menggunakan server remote. 2. Eksekusi Perintah SQL Setelah koneksi terbuka, langkah berikutnya adalah memanggil perintah SQL yang akan dieksekusi. SQL (Structure Query Language) adalah bahasa yang digunakan untuk berkomunikasi dengan DBMS. Tanpa perintah SQL user tidak dapat
16

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

melakukan apapun terhadap Database. Perintah SQL berbeda dengan bahasa pemrograman, SQL sifatnya deklaratif dan lebih mudah dimengerti secara sintaksis karena menggunakan bahasa sehari-hari (bahasa inggris). SQL tidak memiliki deklarasi variabel seperti halnya bahasa pemrograman. Untuk menangani hal tersebut SQL bisa digabungkan dengan bahasa pemrograman tertentu sehingga bisa lebih dinamis. Secara umum perintah SQL terbagi 3, yaitu : DDL (Data Defenition Language) Perintah untuk membuat Database baru, dan pemanipulasian objek-objek terkait yang ada dalam database tersebut. Contoh : CREATE TABLE, DROP TABLE, ALTER TABLE DML (Data Manipulation Language) Berhubungan dengan query dan pemanipulasian table di database. Contoh : SELECT, INSERT, UPDATE, DELETE DCL (Data Control Language) Perintah yang berhubungan dengan manajemen user. Perintah DCL ini hanya tersedia untuk database bertipe client-server yang penggunanya lebih dari 1 user. Contoh : GRANT, REVOKE Class yang digunakan untuk mengeksekusi perintah SQL adalah OleDbCommand pada MS Access atau SqlCommand pada SQL Server. OleDbCommand dan SqlCommand memiliki parameter constructor perintah sql dan Connection. Contoh : Class OleDbCommand memiliki method utama ExecuteNonQuery() dan ExecuteReader() method ExecuteNonQuery() digunakan untuk mengeksekusi perintah SQL manipulasi data seperti INSERT, UPDATE, dan DELETE. Method ExecuteReader() digunakan hanya untuk perintah sql SELECT, return value dari method tersebut adalah objek OleDbDataReader atau SqlDataReader INSERT MS Access :
Dim sql As String sql = "INSERT INTO Customers (CompanyName,Address) VALUES ('XERIS', sql &= 'Sentul Valley')" Dim cmd As OleDbCommand = new OleDbCommand(sql,conn) cmd.ExecuteNonQuery()

atau :
Dim sql As String sql = "INSERT INTO Customers (CompanyName, Address) VALUES " sql &= "('XERIS','Sentul Valley')" Dim cmd As OleDbCommand = new OleDbCommand() cmd.Connection=conn cmd.CommandText=sql cmd.ExecuteNonQuery()

SQL Server :
Dim sql As String sql = "INSERT INTO Customers (CompanyName,Address) VALUES ('XERIS', sql &= 'Sentul Valley')" Dim cmd As SqlCommand = new SqlCommand(sql,conn) cmd.ExecuteNonQuery();

atau :
Dim sql As String sql = "INSERT INTO Customers (CompanyName,Address) VALUES ('XERIS', sql &= 'Sentul Valley')" Dim cmd As SqlCommand = new SqlCommand() cmd.Connection=conn cmd.CommandText = sql cmd.ExecuteNonQuery()

17

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

UPDATE MS Access :
Dim sql As string sql = "UPDATE Customers SET CompanyName='XERIS System', sql &= Address='BOGOR' WHERE CustomerID=1" Dim cmd As OleDbCommand = new OleDbCommand(sql,conn) cmd.ExecuteNonQuery();

SQL Server :
Dim sql As string sql = "UPDATE Customers SET CompanyName='XERIS System', sql &= Address='BOGOR' WHERE CustomerID=1" Dim cmd As SqlCommand = new SqlCommand(sql,conn) cmd.ExecuteNonQuery()

DELETE MS Access :
Dim sql As String = "DELETE Customers WHERE CustomerID='XERIS'" Dim cmd As OleDbCommand = new OleDbCommand(sql,conn) cmd.ExecuteNonQuery()

SQL Server :
Dim sql As String ="DELETE Customers WHERE CustomerID='XERIS'" Dim cmd As SqlCommand = new SqlCommand(sql,conn) cmd.ExecuteNonQuery()

3. Menampilkan Data Untuk menampilkan data di ADO.NET class yang digunakan adalah OleDbDataReader dan SqlDataReader. DataReader ini sifatnya forward-only artinya hanya bisa baca maju ke depan, tidak bisa Move Previous atau Move Next seperti pada ADO classic MS Access :
Dim sql As String = "SELECT * FROM Customers" Dim cmd As OleDbCommand = new OleDbCommand(sql,conn) Dim rdr As OleDbDataReader = cmd.ExecuteReader() While rdr.Read() Console.WriteLine(Convert.ToInt32(rdr["CustomerID"])) Console.WriteLine(Convert.ToString(rdr["CompanyName"])) End While rdr.Close() cmd.Dispose()

SQL Server
Dim sql As String ="SELECT * FROM Customers" Dim cmd As SqlCommand = new SqlCommand(sql,conn) Dim rdr As SqlDataReader = cmd.ExecuteReader() While rdr.Read() Console.WriteLine(Convert.ToInt32(rdr["CustomerID"])) Console.WriteLine(Convert.ToString(rdr["CompanyName"])) End While rdr.Close() cmd.Dispose()

Pemanggilan method ExecuteReader() menghasilkan semua record tabel Customers dan disimpan di objek OleDbDataReader/SqlDataReader. Untuk menampilkan record di object tersebut gunakan statement looping while. Jika data tersebut ada maka tampilkan di Console dengan perintah Console.WriteLine(). Convert berfungsi untuk mengubah objek ke tipe yang bersesuaian dengan tipe field di table nya.

18

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

4.1.3. DataSet DataSet adalah tabel virtual yang tersimpan di memory. DataSet merupakan fitur unggulan ADO.NET yang menyediakan pengaksesan data bisa dilakukan secara disconnected, tanpa harus selalu terhubung ke database. Keuntungan menggunakan DataSet : 1. Flexibility, DataSet mengandung koleksi dari data dan dapat merepresentasikan relasi yang kompleks 2. Serialization, DataSet mendukung serialisasi yang biasanya digunakan untuk distributed application 3. Data Binding, DataSet dapat di ikatkan ke komponen-komponen yang bersifat data aware baik pada WinForm (GUI) atau WebForm (ASP.NET) 4. Sorting dan Filtering, DataSet mendukung sorting dan filtering data dengan menggunakan DataView Object. 5. Interchangeability, DataSet dapat dibaca dan diubah dalam format XML sehingga data bisa diakses walaupun koneksi sudah terputus (disconnected application) . 6. Optimistic Concurrency, Ketika melakukan pengupdate-an data DataSet dapat digunakan bersama DataAdapter yang memungkinkan concurrency check dilakukan dengan mudah 7. Extensibility, Schema dari DataSet bisa diubah secara runtime Contoh penggunaan DataSet :
Dim sql As String = "SELECT * FROM Customers" Dim ds As DataSet = new DataSet() Dim adapter As SqlDataAdapter = new SqlDataAdapter(sql, conn) adapter.Fill(ds) For Each row As DataRow in ds.Tables[0].Rows Console.WriteLine(row["CustomerID"]) Console.WriteLine(row["CompanyName"]) Next

4.1.4. Transaksi Transaksi didefenisikan sebagai himpunan satu atau lebih pernyataan yang diekseskusi sebagai satu unit, dengan demikian dalam suatu transaksi himpunan pernyataan harus dilaksanakan atau tidak sama sekali. Contoh jika kita ingin menghapus record yang memiliki hubungan master-detail. Proses penghapusan record di tabel master harus disertai dengan record yang berelasi di tabel detail, jika proses penghapusan record pada tabel master gagal proses penghapusan harus dibatalkan seluruhnya agar integritas data tetap terjaga. Contoh Code :
Dim connStr As String connStr = "Data Source=NANANG;Initial Catalog=Northwind;" connStr &= "Integrated Security=True" Dim conn As SqlConnection = new SqlConnection(connStr) conn.Open() Dim tx As SqlTransaction = conn.BeginTransaction() Dim cmd As SqlCommand = new SqlCommand() cmd.Connection = conn cmd.Transaction = tx Try cmd.CommandText = "DELETE Orders WHERE OrderID=1" cmd.ExecuteNonQuery() cmd.CommandText = "DELETE OrderDetails WHERE OrderID=1" cmd.ExecuteNonQuery() tx.Commit() Catch ex As SqlException Console.WriteLine(ex.Message.ToString()) tx.Rollback() End Try

19

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

4.2.SETTING LAYOUT FORM LOGIN Hal yang pertama kali kita lakukan adalah setting layout Form Login. Double klik FrmLogin untuk mengaktifkannya. Kemudian tambahkan 2 (dua) buah Label, 2 (dua) buah TextBox, dan 2 (dua) buah Button ke dalam FrmLogin. Setelah itu atur nilai Properti dari setiap kontrol tersebut sebagai berikut : Nama Object Nama Properti BackColor ControlBox FormBorderStyle ShowInTaskbar StartPosition Text FontSize FontBold ForeColor Text FontSize FontBold ForeColor Text Name MaxLength Name MaxLength PasswordChar Name Text Name Text Nilai LightBlue FALSE FixedDialog FALSE CenterScreen "Selamat Datang" 9 TRUE Black "Username" 9 TRUE Black "Password" TxtUser 20 TxtUser 20 * BtnLogin "&Login" BtnCancel "&Cancel"

FrmLogin

Label1

Label2

TextBox1 TextBox2 Button1 Button2

Kemudian atur posisi layout Form sehingga tampak seperti gambar di bawah ini :

Langkah selanjutnya adalah tambahkan sebuah Form yang akan menjadi Form Utama kita dan akan dipanggil ketika proses Login berhasil. Cara menambahkan Form sama seperti yang telah penulis jelaskan di atas, beri nama Form yang baru dengan FrmUtama. 4.3.SOURCE CODE Sebelum menambahkan kode program ke dalam FrmLogin, kita akan menambahkan sebuah Class yang berfungsi untuk melakukan koneksi ke database dan sebuah Module yang

20

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

akan menampung variable global yang akan digunakan di seluruh aplikasi. Class dan Module tersebut akan kita simpan di dalam sebuah folder baru. Tambahkan sebuah Folder baru dengan cara klik kanan pada project LATIHAN yang terdapat pada Solution Explorer, klik AddNew Folder. Ubah nama Folder menjadi AksesData. Untuk lebih jelasnya lihat gambar di bawah.

Untuk menambahkan Class caranya klik kanan pada Folder AksesData yang baru kita buat tadi, klik AddClass dan beri nama KoneksiDatabase.vb. Kemudian tambahkan Reference terlebih dahulu dengan cara klik ProjectAdd Reference dan pilih System.Data. Supaya kita tidak perlu meng-compile ulang program kita ketika nama Database dan Servernya berubah maka ConnectionString-nya harus disimpan di luar program. Hal ini dapat dilakukan dengan menyimpannya dalam bentuk File XML dan disimpan dengan nama app.config. Untuk membuat File XML tersebut telah disediakan wizardnya oleh Visual Studio 2005. Cara membuatnya klik kanan di My Project yang terdapat di Solution Explorer, kemudian klik Open. Pilih Tab Settings dan isikan Name = ConnectionStringApp, Type = (Connection string), Scope = Application, Value = Data Source=localhost;Initial Catalog = LATIHAN;Integrated Security = True. Untuk lebih jelasnya lihat gambar di bawah ini :

21

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Setelah selesai coba anda cek ke Directory tempat anda menyimpan Project anda. Jika berhasil maka akan ada sebuah File baru dengan nama app.config. Kemudian tambahkan source code di bawah ini ke dalam Class KoneksiDatabase.vb :
Imports System.Data Imports System.Data.SqlClient Namespace AksesData Public Class KoneksiDatabase Dim Koneksi As SqlConnection = New _ SqlConnection(My.Settings.ConnectionStringApp) Public Function Buka() As SqlConnection Koneksi.Open() Return Koneksi End Function Public Function Tutup() As SqlConnection Koneksi.Close() Return Koneksi End Function End Class End Namespace

Penjelasannya adalah sebagai berikut :


Imports System.Data Imports System.Data.SqlClient

Mengimport Namespaces
Namespace AksesData . . . End Namespace

Membuat Namespace AksesData


Public Class KoneksiDatabase . . . End Class

Membuat Class KoneksiDatabase


Dim Koneksi As SqlConnection = New _ SqlConnection(My.Settings.ConnectionStringApp)

Deklarasi variable Koneksi sebagai SqlConnection dan ConnectionString-nya diambil dari File app.config dengan menggunakan object My.
22

Pemrograman Berorientasi Objek II


Public Function Buka() As SqlConnection . . . End Function

Nanang Sutisna, S.Kom

Membuat Function Buka yang akan digunakan sebagai Method untuk membuka koneksi ke database.
Koneksi.Open()

Membuka koneksi ke database.


Return Koneksi

Nilai kembali dari Method Buka adalah nilai dari variable Koneksi. Perhatikan bahwa variable Koneksi dan Method Buka sama-sama dideklarasikan sebagai SqlConnection.
Public Function Tutup() As SqlConnection . . . End Function

Membuat Function Tutup yang akan digunakan sebagai Method untuk menutup koneksi ke database.
Koneksi.Close()

Meutup koneksi ke database.


Return Koneksi

Nilai kembali dari Method Tutup adalah nilai dari variable Koneksi. Perhatikan bahwa variable Koneksi dan Method Tutup sama-sama dideklarasikan sebagai SqlConnection. Langkah selanjutnya adalah membuat sebuah module. Caranya klik kanan di Folder AksesData, klik AddModule. Dan ubah nama module tersebut menjadi ModuleUmum.vb. Tambahkan source code di bawah ini :
Imports System.Data.SqlClient Module ModuleUmum Public Msg As Integer Public intResponse As Integer Public Command As SqlCommand Public DataAdapter As SqlDataAdapter Public DataReader As SqlDataReader Public StrSQL As String Public Username, Password As String Public DS As New DataSet Public DT As New DataTable End Module

Kode program di atas hanya berupa deklarasi variable yang berlaku secara global jadi penulis rasa tidak perlu dijelaskan kembali. Berikutnya aktifkan FrmLogin, klik kanan pada Form, klik View Code dan ketikkan kode program sebagai berikut :
Imports System.Data Imports System.Data.SqlClient Public Class FrmLogin Inherits System.Windows.Forms.Form Dim F_Utama As New FrmUtama Dim KoneksiKu As New AksesData.KoneksiDatabase Sub CekUser() objDataTable.Clear() StrSQL="Select * From USERS Where Username='" & TxtUser.Text.Trim & "'" DataAdapter = New SqlDataAdapter(StrSQL, KoneksiKu.Buka) objDataSet = New DataSet DataAdapter.Fill(objDataSet, "TbUser") objDataTable = objDataSet.Tables("TbUser") KoneksiKu.Tutup() End Sub

23

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Sub CariUser() StrSQL ="Select * From USERS Where Username='" & TxtUser.Text.Trim & "' Command = New SqlCommand(StrSQL, KoneksiKu.Buka) DataReader = Command.ExecuteReader While DataReader.Read Username = DataReader.Item("Username") Password = DataReader.Item("Password") End While KoneksiKu.Tutup() End Sub Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnCancel.Click End End Sub Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnLogin.Click If TxtUser.Text.Trim = "" Then MessageBox.Show("Maaf Username Tidak Boleh Kosong", _ "Username Kosong",MessageBoxButtons.OK, MessageBoxIcon.Information) TxtUser.Focus() ElseIf TxtPassword.Text.Trim = "" Then MessageBox.Show("Maaf Password Tidak Boleh Kosong", _ "Password Kosong", MessageBoxButtons.OK, MessageBoxIcon.Information) TxtPassword.Focus() Else Try CekUser() If objDataTable.Rows.Count <= 0 Then MessageBox.Show("Maaf Username tidak terdaftar, & _ harap masukkan Username yang valid!", "Username Tidak Ada", _ MessageBoxButtons.OK, MessageBoxIcon.Error) TxtUser.Text = "" TxtPassword.Text = "" TxtUser.Focus() Else CariUser() If Password <> TxtPassword.Text.Trim Then MessageBox.Show("Maaf Password salah, masukkan Password & _ yang benar", "Password salah", MessageBoxButtons.OK, _ MessageBoxIcon.Error) Else F_Utama.Show() Me.Hide() TxtUser.Text = "" TxtPassword.Text = "" End If End If Catch When Err.Number <> 0 MessageBox.Show("Tidak dapat terkoneksi dengan Database . . ." & _ Err.Description, "Koneksi Error", MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try End If End Sub End Class

Penjelasan kode program diatas dapat anda lihat di bawah ini :


Imports System.Data Imports System.Data.SqlClient

Mengimport Namespaces
Public Class FrmLogin . . . End Class

Membuat Class FrmLogin


24

Pemrograman Berorientasi Objek II


Inherits System.Windows.Forms.Form

Nanang Sutisna, S.Kom

Menyatakan bahwa Class FrmLogin merupakan Derived Class dari Class Form
Dim F_Utama As New FrmUtama

Deklarasi dan instansiasi F_Utama sebagai object dari Class FrmUtama


Dim KoneksiKu As New AksesData.KoneksiDatabase

Deklarasi dan instansiasi KoneksiKu sebagai object dari Class KoneksiDatabase yang berada di Namespace AksesData
Sub CekUser() . . . End Sub

Membuat subrutin untuk mengecek apakah Username ada di database atau tidak
objDataTable.Clear()

Menghapus semua nilai dan data yang disimpan di objDataTable


StrSQL="Select * From USERS Where Username='" & TxtUser.Text.Trim & "'"

Mengisi nilai variable StrSQL dengan SQL Statements yang akan digunakan sebagai CommandText.
DataAdapter = New SqlDataAdapter(StrSQL, KoneksiKu.Buka)

Instansiasi dan eksekusi DataAdapter sebagai object dari Class SqlDataAdapter dengan nilai Parameter StrSQL sebagai CommandText dan KoneksiKu.Buka untuk membuka Koneksi ke database.
objDataSet = New DataSet

Instansiasi objDataSet sebagai object dari Class DataSet


DataAdapter.Fill(objDataSet, "TbUser")

Mengisi objDataSet dengan data dari DataAdapter. Data tersebut disimpan dalam Table Virtual yang terdapat di dalam objDataSet dan diberi nama TbUser.
objDataTable = objDataSet.Tables("TbUser")

Mengisi data objDataTable dengan data yang terdapat di Table Virtual TbUser dari objDataSet.
KoneksiKu.Tutup()

Menutup koneksi ke database sehingga mengurangi pemakaian memory. Walaupun sebenarnya di VB.NET ada Garbage Collection (GC) yang akan menghapus semua object yang sudah tidak terpakai dari memory.
Sub CariUser() . . . End Sub

Membuat subrutin untuk mengecek apakah Username ada di database atau tidak
StrSQL = "Select * From USERS Where Username='" & TxtUser.Text.Trim & _ "'

Mengisi nilai variable StrSQL dengan SQL Statements yang akan digunakan sebagai CommandText.
Command = New SqlCommand(StrSQL, KoneksiKu.Buka)

Instansiasi Command sebagai object dari Class SqlCommand dengan nilai Parameter StrSQL sebagai CommandText dan KoneksiKu.Buka untuk membuka Koneksi ke database.
DataReader = Command.ExecuteReader

Mengisi DataReader dengan data dari hasil mengeksekusi object Command. Ingat bahwa DataReader hanya bersifat Forward Read Only jadi kita akan melakukan pencarian dari data paling awal sampai terakhir.
25

Pemrograman Berorientasi Objek II


While DataReader.Read . . . End While

Nanang Sutisna, S.Kom

Looping menggunakan Keyword While dan kondisi DataReader.Read jadi ketika DataReader sudah berhenti membaca data (telah sampai pada data terakhir) maka proses Looping akan dihentikan.
Username = DataReader.Item("Username") Password = DataReader.Item("Password")

Mengisi variable Username dan Password yang telah dideklarasikan secara global pada ModuleUmum dengan data yang sedang dibaca oleh DataReader.
KoneksiKu.Tutup()

Menutup koneksi ke database


Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnCancel.Click End End Sub

Menutup aplikasi ketika terjadi Event Click pada BtnCancel


Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles BtnLogin.Click . . . End Sub

Penanganan Event Click pada BtnLogin


If TxtUser.Text.Trim = "" Then MessageBox.Show("Maaf Username Tidak Boleh Kosong", _ "Username Kosong",MessageBoxButtons.OK, MessageBoxIcon.Information) TxtUser.Focus()

Untuk menghindari agar TxtUser tidak kosong


ElseIf TxtPassword.Text.Trim = "" Then MessageBox.Show("Maaf Password Tidak Boleh Kosong", _ "Password Kosong", MessageBoxButtons.OK, MessageBoxIcon.Information) TxtPassword.Focus()

Untuk menghindari agar TxtPassword tidak kosong


Else Try CekUser() If objDataTable.Rows.Count <= 0 Then MessageBox.Show("Maaf Username tidak terdaftar, & _ harap masukkan Username yang valid!", "Username Tidak Ada", _ MessageBoxButtons.OK, MessageBoxIcon.Error) TxtUser.Text = "" TxtPassword.Text = "" TxtUser.Focus() Else CariUser() If Password <> TxtPassword.Text.Trim Then MessageBox.Show("Maaf Password salah, masukkan Password & _ yang benar", "Password salah", MessageBoxButtons.OK, _ MessageBoxIcon.Error) Else F_Utama.Show() Me.Hide() TxtUser.Text = "" TxtPassword.Text = "" End If End If Catch When Err.Number <> 0 MessageBox.Show("Tidak dapat terkoneksi dengan Database . . ." & _ Err.Description, "Koneksi Error", MessageBoxButtons.OK, _ MessageBoxIcon.Error) End Try

26

Pemrograman Berorientasi Objek II


End If

Nanang Sutisna, S.Kom

Procedure yang dijalankan jika TxtUser.Text dan TxtPassword.text tidak kosong. Penulis rasa penjelasannya hampir semua sudah pernah disinggung pada pembahasan sebelumnya jadi penulis tidak akan menjelaskan semua. Mungkin yang baru hanya Try . . . Catch. Fungsinya adalah untuk penanganan Error pada VB.NET sebagai pengganti dari On Error Goto atau On Error Go Sub pada VB6. Pada kalang Try dimasukkan Statement/ Procedure yang akan dijalankan, jika terjadi Error maka yang akan dijalankan adalah Statement/ Procedure yang berada di kalang When.

27

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB V DESAIN FORM UTAMA DAN FORM PEGAWAI


Sekarang saatnya kita desain Form Utama dan Form Pegawai. Sebelum mulai mendesain, tambahkan terlebih dahulu sebuah Form Baru dan beri nama FrmPegawai. Jika sudah ikuti langkah-langkah di bawah ini : 5.1.DESAIN LAYOUT FORM UTAMA DAN FORM PEGAWAI Aktifkan Form Utama (FrmUtama) dan tambahkan satu buah MenuStrip dan satu buah StatusStrip ke dalam FrmUtama. Tambahkan ToolStripMenuItem dengan cara klik MenuStrip1 dan ketikkan &File pada tulisan Type Here. Lakukan hal yang sama disebelahnya dan ketikkan &Data Entry. Dan tambahkan ToolStripMenuItem di bawah FileToolStripMenuItem dengan nama &Exit. Tambahkan juga ToolStripMenuItem di bawah DataEntryToolStripMenuItem dengan nama Data &Pegawai. Untuk lebih jelasnya lihat gambar.

Selanjutnya kita atur StatusStrip1. Klik StatusStrip1 dan tambahkan ToolStripStatusLabel sebanyak 3 buah dengan cara klik AddToolStripStatusLabelStatusLabel. Untuk lebih jelasnya lihat gambar.

Atur nilai properti dari setiap kontrol yang ada di FrmUtama sebagai berikut : Nama Object Nama Properti BackgroundImage BackgroundImageLayout ControlBox FormBorderStyle StartPosition Text WindowState IsMDIContainer Spring TextAlign Spring TextAlign Spring TextAlign
28

FrmUtama

ToolStripStatusLabel1 ToolStripStatusLabel2 ToolStripStatusLabel3

Nilai Pilih gambar yang anda inginkan Stretch FALSE Fixed3D CenterScreen "Aplikasi Latihan VB 2005" Maximized True FALSE MiddleLeft TRUE MiddleCenter FALSE MiddleRight

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Sehingga tampilannya menjadi seperti gambar di bawah ini :

Kemudian aktifkan FrmPegawai dan tambahkan 2 buah GroupBox dan 1 buah DataGridView. Tambahkan 6 buah Label, 5 buah TextBox, dan 1 buah DateTimePicker ke dalam GroupBox1. Tambahkan juga 11 buah Button ke dalam GroupBox2. Atur properti dan layout kontrol-kontrol tersebut seperti di bawah ini : Nama Object Nama Properti BackColor ControlBox FormBorderStyle StartPosition Text Text TextAlign Name AllowUserToAddRow AllowUserToDeleteRow Locked Text Text Text Text Text Text Name MaxLength Name MaxLength Nilai LightBlue FALSE Fixed3D CenterParent "Data Entry Pegawai" "Data Pegawai" "" DGPegawai FALSE FALSE TRUE "NIP" "Nama" "Tgl Lahir" "Jalan" "Kota" "Kode Pos" txtNIP 10 txtNama 25
29

FrmPegawai

GroupBox1 GroupBox2 DataGridView1 Label1 Label2 Label3 Label4 Label5 Label6 TextBox1 TextBox2

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Name MaxLength Name TextBox4 MaxLength Name TextBox5 MaxLength Name Button1 Text Name Button2 Text Name Button3 Text Name Button4 Text Name Button5 Text Name Button6 Text Name Button7 Text Name Button8 Text Name Button9 Text Name Button10 Text Name Button11 Text Name DateTimePicker1 Format TextBox3

txtJalan 30 txtKota 20 txtKodePos 5 BtnAdd "&Add" BtnEdit "&Edit" BtnSave "&Save" BtnCancel "&Cancel" BtnDelete "&Delete" BtnReport "&Report" BtnClose "Cl&ose" BtnFirst "<<" BtnPrevious "<" BtnNext ">" BtnLast ">>" DTLahir Short

30

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

5.2.SOURCE CODE FORM UTAMA DAN FORM PEGAWAI Aktifkan FrmUtama dan double klik pada Form sehingga anda dibawa ke Code Editor untuk menangani Event Form_Load, ketikkan kode program berikut :
ToolStripStatusLabel1.Text = "Ready . . ." ToolStripStatusLabel2.Text = "Username : " & Username ToolStripStatusLabel3.Text = Today.Date.ToLongDateString

Kode ini berfungsi untuk mengatur nilai Text/ tulisan yang muncul di ToolStripStatus. Kemudian double klik pada Menu Exit (ExitToolStripMenuItem) dan ketikkan kode program berikut ini :
Msg = MessageBox.Show("Yakin Tutup Aplikasi Ini?", "Konfirmasi", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Msg = vbYes Then End Else Exit Sub End If

Menampilkan kotak pesan konfirmasi yang menanyakan apakah aplikasi akan ditutup. Jika jawabannya Yes maka aplikasi akan ditutup tapi jika tidak maka akan keluar dari Subrutin. Double klik pada Menu DataPegawai (ExitToolStripMenuItem) dan ketikkan kode program berikut ini :
FrmPegawai.Parent = Me FrmPegawai.ShowDialog()

Mengatur Parent (Form Induk) dari FrmPegawai yaitu Me(FrmUtama). Kemudian menampilkan FrmPegawai. Sebelum menambahkan source code ke FrmPegawai, anda tambahkan terlebih dahulu sebuah Class di Folder AksesData dan beri nama ManipulasiData.vb. Class ini berfungsi untuk memanipulasi (insert, update dan delete) data Pegawai. Jadi ketika anda ingin menambah, merubah atau menghapus data yang ada di Table Pegawai, cukup memanggil salah satu method yang ada di Class ManipulasiData ini. Untuk menambahkan method pada Class ManipulasiData, ketikkan source code berikut ini di Class ManipulasiData :
Imports System.Data Imports System.Data.SqlClient Namespace AksesData Public Class ManipulasiData Public Function TambahData(ByVal nip As String, ByVal nama As String, _ ByVal tgllahir As Date, ByVal jalan As String, ByVal kota As String, _ ByVal kodepos As String) As SqlCommand Dim koneksiku As New AksesData.KoneksiDatabase Command = New SqlCommand("SPI_PEGAWAI", koneksiku.Buka) Command.CommandType = CommandType.StoredProcedure Dim PRM1 As New SqlParameter("@NIP", SqlDbType.VarChar, 10) PRM1.Value = nip Dim PRM2 As New SqlParameter("@NAMA", SqlDbType.VarChar, 25) PRM2.Value = nama Dim PRM3 As New SqlParameter("@TGLLAHIR", SqlDbType.DateTime) PRM3.Value = tgllahir Dim PRM4 As New SqlParameter("@JALAN", SqlDbType.VarChar, 30) PRM4.Value = jalan Dim PRM5 As New SqlParameter("@KOTA", SqlDbType.VarChar, 20) PRM5.Value = kota Dim PRM6 As New SqlParameter("@KODEPOS", SqlDbType.VarChar, 5) PRM6.Value = kodepos

31

Pemrograman Berorientasi Objek II


With Command.Parameters .Add(PRM1) .Add(PRM2) .Add(PRM3) .Add(PRM4) .Add(PRM5) .Add(PRM6) End With Command.ExecuteNonQuery() Dim hasil As New SqlCommand("", koneksiku.Tutup) Return hasil End Function

Nanang Sutisna, S.Kom

Public Function UbahData(ByVal nip As String, ByVal nama As String, _ ByVal tgllahir As Date, ByVal jalan As String, ByVal kota As String, _ ByVal kodepos As String) As SqlCommand Dim koneksiku As New AksesData.KoneksiDatabase Command = New SqlCommand("SPU_PEGAWAI", koneksiku.Buka) Command.CommandType = CommandType.StoredProcedure Dim PRM1 As New SqlParameter("@NIP", SqlDbType.VarChar, 10) PRM1.Value = nip Dim PRM2 As New SqlParameter("@NAMA", SqlDbType.VarChar, 25) PRM2.Value = nama Dim PRM3 As New SqlParameter("@TGLLAHIR", SqlDbType.DateTime) PRM3.Value = tgllahir Dim PRM4 As New SqlParameter("@JALAN", SqlDbType.VarChar, 30) PRM4.Value = jalan Dim PRM5 As New SqlParameter("@KOTA", SqlDbType.VarChar, 20) PRM5.Value = kota Dim PRM6 As New SqlParameter("@KODEPOS", SqlDbType.VarChar, 5) PRM6.Value = kodepos With Command.Parameters .Add(PRM1) .Add(PRM2) .Add(PRM3) .Add(PRM4) .Add(PRM5) .Add(PRM6) End With Command.ExecuteNonQuery() Dim hasil As New SqlCommand("", koneksiku.Tutup) Return hasil End Function Public Function HapusData(ByVal nip As String) As SqlCommand Dim koneksiku As New AksesData.KoneksiDatabase Command = New SqlCommand("SPD_PEGAWAI", koneksiku.Buka) Command.CommandType = CommandType.StoredProcedure Dim PRM1 As New SqlParameter("@NIP", SqlDbType.VarChar, 10) PRM1.Value = nip Command.Parameters.Add(PRM1) Command.ExecuteNonQuery() Dim hasil As New SqlCommand("", koneksiku.Tutup) Return hasil End Function End Class End Namespace

Penjelasan dari source code tersebut adalah sebagai berikut :


Imports System.Data Imports System.Data.SqlClient

Mengimport Namespaces
Namespace AksesData Public Class ManipulasiData . . . End Class

32

Pemrograman Berorientasi Objek II


End Namespace

Nanang Sutisna, S.Kom

Mendeklarasikan Class ManipulasiData dan Class tersebut berada di Namespace AksesData


Public Function TambahData(ByVal nip As String, ByVal nama As String, _ ByVal tgllahir As Date, ByVal jalan As String, ByVal kota As String, _ ByVal kodepos As String) As SqlCommand . . . End Function

Membuat sebuah Function atau Method TambahData yang berfungsi untuk melakukan proses Insert. Dalam Function ini mempunyai 6 buah parameter yang nilainya akan diisikan oleh User pada saat Insert data.
Dim koneksiku As New AksesData.KoneksiDatabase Command = New SqlCommand("SPI_PEGAWAI", koneksiku.Buka) Command.CommandType = CommandType.StoredProcedure

Membuka Koneksi ke Database dan menentukan Tipe SqlCommand sebagai StoredProcedure.


Dim PRM1 As New SqlParameter("@NIP", SqlDbType.VarChar, 10) PRM1.Value = nip Dim PRM2 As New SqlParameter("@NAMA", SqlDbType.VarChar, 25) PRM2.Value = nama Dim PRM3 As New SqlParameter("@TGLLAHIR", SqlDbType.DateTime) PRM3.Value = tgllahir Dim PRM4 As New SqlParameter("@JALAN", SqlDbType.VarChar, 30) PRM4.Value = jalan Dim PRM5 As New SqlParameter("@KOTA", SqlDbType.VarChar, 20) PRM5.Value = kota Dim PRM6 As New SqlParameter("@KODEPOS", SqlDbType.VarChar, 5) PRM6.Value = kodepos With Command.Parameters .Add(PRM1) .Add(PRM2) .Add(PRM3) .Add(PRM4) .Add(PRM5) .Add(PRM6) End With

Membuat Parameter bagi Stored Procedure karena Stored Procedure SPI_PEGAWAI yang telah kita buat pada Bab II mempunyai 6 buah parameter. Harap diperhatikan nama Parameter dan Tipe datanya harus sama dengan yang kita deklarasikan pada waktu membuat Stored Procedure.
Command.ExecuteNonQuery() Dim hasil As New SqlCommand("", koneksiku.Tutup) Return hasil

Mengeksekusi Command dan mengembalikan hasil sebagai nilai kembali dari Function ini. hasil dideklarasikan sebagai SqlCommand dan berisi nilai untuk menutup Koneksi ke Database. Penjelasan tentang Function UbahData dan HapusData hampir sama dengan Function TambahData di atas, jadi penulis merasa tidak perlu mengulangnya lagi. Langkah selanjutnya adalah menambahkan source code ke FrmPegawai. Pada FrmPegawai ini penulisan kode program akan dipisahkan menjadi beberapa subrutin agar lebih mudah dibaca dan lebih terstruktur. Aktifkan FrmPegawai kemudian klik kanan dan klik View Code. Tambahkan source code di bawah ini di bagian paling atas ( di atas tulisan Public Class FrmPegawai ) untuk mengimport Namespace yang dibutuhkan :
Imports System.Data Imports System.Data.SqlClient

Pada bagian di antara Public Class FrmPegawai dan End Class, tambahkan source code di bawah ini :
33

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Dim status As Boolean

Deklarasi variable status sebagai tipe data Boolean (hanya berisi nilai True/ false) yang berfungsi untuk menyimpan status simpan menjadi True jika BtnAdd diklik dan False jika BtnEdit diklik. Selanjutnya ketikkan kode program di bawah ini :
Sub ValidasiKontrol(ByVal Bool As Boolean) With Me .txtJalan.Enabled = Not Bool .txtKodepos.Enabled = Not Bool .txtKota.Enabled = Not Bool .txtNama.Enabled = Not Bool .txtNIP.Enabled = Not Bool .DTLahir.Enabled = Not Bool .BtnAdd.Enabled = Bool .BtnCancel.Enabled = Not Bool .BtnClose.Enabled = Bool .BtnDelete.Enabled = Bool .BtnEdit.Enabled = Bool .BtnReport.Enabled = Bool .BtnSave.Enabled = Not Bool .DGPegawai.Enabled = Bool .BtnFirst.Enabled = Bool .BtnLast.Enabled = Bool .BtnNext.Enabled = Bool .BtnPrevious.Enabled = Bool End With End Sub

Subrutin ValidasiKontrol mempunyai 1 buah parameter Bool yang bersifat Boolean dan akan diisi nilainya ketika digunakan. Subrutin ini digunakan untuk mengatur properti Enabled dari kontrol. Jika parameter Bool diisi dengan True berarti kontrol tersebut di-Enable (Aktif) dan jika False maka di-Disable (Tidak aktif). Perhatikan bahwa ada beberapa kontrol yang diberi nilai Not Bool sehingga perlakuannya akan berkebalikan. Jika diisi True berarti sebenarnya adalah False karena Not Bool = Not True = False. Lanjutkan dengan mengetikkan kode program berikut :
Sub TampilData() ValidasiKontrol(True) objDataTable.Clear() Dim KoneksiKu As New AksesData.KoneksiDatabase DataAdapter = New SqlDataAdapter("Select * From Pegawai",KoneksiKu.Buka) objDataSet = New DataSet DataAdapter.Fill(objDataSet, "TbPegawai") objDataTable = objDataSet.Tables("TbPegawai") DGPegawai.DataSource = objDataTable txtNIP.DataBindings.Add("TEXT", objDataTable, "NIP") txtNama.DataBindings.Add("TEXT", objDataTable, "NAMA") DTLahir.DataBindings.Add("VALUE", objDataTable, "TGLLAHIR") txtJalan.DataBindings.Add("TEXT", objDataTable, "JALAN") txtKota.DataBindings.Add("TEXT", objDataTable, "KOTA") txtKodepos.DataBindings.Add("TEXT", objDataTable, "KODEPOS") End Sub

Subrutin TampilData berfungsi untuk mengatur DataBinding kontrol dan memanggil sekaligus mengisi nilai True untuk subrutin ValidasiKontrol. DataBinding berfungsi untuk mengikat kontrol tertentu, misal TextBox, untuk menampung nilai dari Object tertentu, misal objDataTable, sehingga ketika nilai objDataTable maka nilai dari TextBox tersebut juga ikut berubah. Penjelasan selangkapnya dari kode program pada subrutin TampilData di atas adalah sebagai berikut :
ValidasiKontrol(True)

34

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Memanggil subrutin ValidasiKontrol dan memberi nilai True untuk parameter Bool.
objDataTable.Clear()

Menghapus nilai yang ada di objDataTable untuk menghindari penumpukan data yang dapat menyebabkan redundansi dan menyebabkan data tidak sama dengan data asli yang ada di tabel.
Dim KoneksiKu As New AksesData.KoneksiDatabase DataAdapter = New SqlDataAdapter("Select * From Pegawai",KoneksiKu.Buka) objDataSet = New DataSet DataAdapter.Fill(objDataSet, "TbPegawai") objDataTable = objDataSet.Tables("TbPegawai")

Proses ini sudah sering dibahas pada pembahasan sebelumnya yaitu hasil akhirnya adalah untuk mengisi nilai objDataTable dengan data dari tabel Pagawai (sesuai dengan SqlCommand-nya).
DGPegawai.DataSource = objDataTable

Mengatur sumber data DGPegawai agar mengacu ke objDataTable


txtNIP.DataBindings.Add("TEXT", objDataTable, "NIP") txtNama.DataBindings.Add("TEXT", objDataTable, "NAMA") DTLahir.DataBindings.Add("VALUE", objDataTable, "TGLLAHIR") txtJalan.DataBindings.Add("TEXT", objDataTable, "JALAN") txtKota.DataBindings.Add("TEXT", objDataTable, "KOTA") txtKodepos.DataBindings.Add("TEXT", objDataTable, "KODEPOS")

Proses DataBinding. Bentuk umumnya adalah : (Nama Properti, Data Source, Data Member) dimana Nama Properti merupakan properti yang nilainya akan di-Binding (ikat). Karena properti pada TextBox yang berfungsi menampilkan data adalah properti TEXT maka diisikan TEXT. DataSource merupakan sumber data, dalam hal ini adalah objDataTable sehingga jika terjadi perubahan nilai dari objDataTable maka akan terjadi perubahan nilai juga pada TextBox. Sedangkan Data Member merupakan Field dari objDataTable yang ingin diikatkan dengan TextBox. Di bawah subrutin TampilData, ketikkan kode program berikut :
Sub LepasBinding() With Me .txtJalan.DataBindings.Clear() .txtKodepos.DataBindings.Clear() .txtKota.DataBindings.Clear() .txtNama.DataBindings.Clear() .txtNIP.DataBindings.Clear() .DTLahir.DataBindings.Clear() End With End Sub

Subrutin ini berfungsi untuk melepaskan/ menghapus DataBinding yang telah kita buat tadi. Hal ini sangat bermanfaat karena jika kita panggil subrutin TampilData sebanyak 2 kali atau lebih maka secara otomatis akan melaksanakan DataBinding sebanyak 2 kali atau lebih juga sehingga akan menyebabkan Error. Untuk menangani hal tersebut maka lebih baik memanggil subrutin LepasBinding terlebih dahulu sebelum memanggil TampilData. Ketikkan juga kode program di bawah ini setelah subrutin LepasBinding di atas :
Sub KosongkanNilai() With Me .txtJalan.Text = "" .txtKodepos.Text = "" .txtKota.Text = "" .txtNama.Text = "" .txtNIP.Text = "" .DTLahir.Value = Today.Date End With End Sub

35

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Berfungsi untuk memberi nilai kosong bagi kontrol TextBox. Dan memberikan nilai tanggal komputer pada kontrol DTLahir.
Sub CekNIP() objDataTable.Clear() Dim KoneksiKu As New AksesData.KoneksiDatabase Dim cmd As New SqlCommand("Select * From Pegawai Where NIP ='" & _ txtNIP.Text & "'", KoneksiKu.Buka) DataAdapter = New SqlDataAdapter(cmd) objDataSet = New DataSet DataAdapter.Fill(objDataSet, "CariNIP") objDataTable = objDataSet.Tables("CariNIP") End Sub

Berfungsi untuk mengecek apakah data dengan NIP yang tertera pada txtNIP.Text telah ada di Tabel Pegawai atau tidak. Subrutin ini digunakan ketika kita ingin menambah suatu data ke Tabel Pegawai agar tidak terjadi duplikasi data. Double klik pada FrmPegawai ( jangan mengenai kontrol apa pun, harus pada area FrmPegawai ) dan ketikkan kode program berikut ini :
TampilData()

Memanggil subrutin TampilData Double klik pada Button BtnClose dan ketikkan kode program berikut ini :
LepasBinding() Me.Close()

Melepaskan DataBinding dan menutup FrmPegawai. DataBinding perlu dilepas agar ketika FrmPegawai di-Load dan otomatis memanggil TampilData (secara otomatis juga membuat DataBinding) tidak terjadi double DataBinding. Double klik pada Button BtnAdd dan ketikkan kode program berikut ini :
status = True ValidasiKontrol(False) LepasBinding() KosongkanNilai() txtNIP.Focus()

Mengisi nilai status menjadi True. ValidasiKontrol menjadi False. Memanggil LepasBinding dan KosongkanNilai sehingga kontrol TextBox akan kosong. Kursor akan ditempatkan pada txtNIP (txtNIP mendapatkan Focus). Double klik pada Button BtnEdit dan ketikkan kode program berikut ini :
status = False ValidasiKontrol(False) LepasBinding() txtNIP.Enabled = False txtNama.Focus()

Mengisi nilai status menjadi False. ValidasiKontrol menjadi False. Memanggil LepasBinding dan KosongkanNilai sehingga kontrol TextBox akan kosong. txtNIP di-Disable karena NIP merupakan Primary Key sehingga dikhawatirkan ada Table lain yang memiliki Foreign Key dari Field NIP ini, jika NIP diubah maka Foreign Key tersebut akan kehilangan Reference-nya dan menyebabkan Error. Kursor akan ditempatkan pada txtNama (txtNama mendapatkan Focus). Double klik pada Button BtnSave dan ketikkan kode program berikut ini :
Dim MyCommand As New AksesData.ManipulasiData If status = True Then CekNIP() If objDataTable.Rows.Count <= 0 Then MyCommand.TambahData(txtNIP.Text, txtNama.Text, DTLahir.Value, _ txtJalan.Text, txtKota.Text, txtKodepos.Text) TampilData() Else MessageBox.Show("Data yang ingin anda input sudah ada, & _ silahkan ganti NIP dengan yang lain", "Informasi", _ MessageBoxButtons.OK, MessageBoxIcon.Information)

36

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

End If Else MyCommand.UbahData(txtNIP.Text, txtNama.Text, DTLahir.Value, _ txtJalan.Text, txtKota.Text, txtKodepos.Text) TampilData() End If

Deklarasi MyCommand sebagai object dari Class ManipulasiData agar dapat menggunakan semua Method yang dimilikinya. Selanjutnya adalah mengecek nilai variable status, True berarti Tambah Data dan False berarti Ubah data. Jika nilai status True yang berarti Tambah Data maka akan dipanggil subrutin CekNIP untuk mengecek apakah data yang ingin ditambahkan sudah ada di table Pegawai atau tidak karena duplikasi nilai NIP tidak diijinkan. Hasil CekNIP akan disimpan di objDataTable. Jika jumlah data pada objDataTable < = 0 maka proses insert data akan dilanjutkan dengan memanggil Method TambahData yang dimiliki MyCommand (ingat MyCommand adalah object dari Class ManipulasiData yang memiliki Method TambahData) dengan nilai parameter diambil dari nilai yang diinput oleh user pada TextBox dan DateTimePicker. Tapi jika NIP yang dimasukkan sudah ada maka ditampilkan kotak pesan berisi informasi bahwa data sudah ada. Jika pada waktu cek status menunjukkan nilai False maka akan memanggil Method UbahData yang dimiliki MyCommand. Double klik pada Button BtnCancel dan ketikkan kode program berikut ini :
TampilData()

Penulis rasa sudah jelas, tidak perlu dibahas lagi. Double klik pada Button BtnDelete dan ketikkan kode program berikut ini :
Dim MyCommand As New AksesData.ManipulasiData Msg = MessageBox.Show("Yakin Hapus Data Ini?", "Konfirmasi", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Msg = vbYes Then MyCommand.HapusData(txtNIP.Text) LepasBinding() TampilData() Else Exit Sub End If

Menampilkan kotak pesan konfirmasi penghapusan data dengan tombol Yes dan No, jika yang dipilih tombol Yes maka Method HapusData akan dipanggil untuk melanjutkan proses penghapusan data sesuai dengan NIP yang ada pada txtNIP.text. Tapi jika yang dipilih No maka akan keluar dari Sub. Double klik pada Button BtnFirst dan ketikkan kode program berikut ini :
BindingContext(objDataTable).Position = 0

Posisi Record objDataTable akan diset pada Record dengan index ke 0 (Data Pertama). Double klik pada Button BtnPrevious dan ketikkan kode program berikut ini :
BindingContext(objDataTable).Position=BindingContext(objDataTable).Position-1

Posisi Record objDataTable akan dikurangi 1 dari posisi Record sekarang sehingga Record akan mundur 1. Double klik pada Button BtnNext dan ketikkan kode program berikut ini :
BindingContext(objDataTable).Position=BindingContext(objDataTable).Position+1

Posisi Record objDataTable akan ditambah 1 dari posisi Record sekarang sehingga Record akan maju 1. Double klik pada Button BtnLast dan ketikkan kode program berikut ini :
BindingContext(objDataTable).Position = objDataTable.Rows.Count - 1

Posisi

objDataTable akan diset Record terakhir. Digunakan objDataTable.Rows.Count1 karena jumlah record berbeda 1 dengan no index record, index record dimulai dari 0 sedangkan no record dimulai dari 1. Untuk Button BtnReport akan dibahas pada bab VI karena tombol ini berfungsi untuk menampilkan Laporan Data Pegawai.
37

Record

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

BAB VI DESAIN LAPORAN DATA PEGAWAI

Untuk mendesain Laporan kita akan menggunakan Crystal Report yang sudah terintegrasi dalam Visual Studio 2005. Jadi Crystal Report akan secara otomatis terinstal ketika kita menginstal Visual Studio 2005. 6.1.DESAIN LAPORAN Tambahkan sebuah Folder baru dan beri nama Report. Tambahkan sebuah Crystal Report pada Folder tersebut dengan cara klik kanan pada Folder Report klik AddNew Item pilih Crystal Report dan beri nama rptDataPegawai.rpt. Setelah selesai klik Add.Untuk lebih jelasnya lihat gambar:

Setelah klik Add maka akan muncul kotak dialog Crystal Reports Gallery, pilih As a Blank Report dan klik OK.

38

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Pada Fields Explorer, klik kanan Database Fields dan pilih Database Expert... untuk membuat koneksi ke Database dan menentukan Fields yang ingin kita gunakan. Pilih Create New Connection , double klik OLEDB (ADO). Kemudian pilih SQL Native Client (karena kita menggunakan SQL Server 2005, untuk yang menggunakan SQL Server di bawah versi 7 gunakan OLE DB Provider For SQL Server) dan klik Next. Isikan localhost pada Server, pastikan Integrated Security di-Check, dan isikan LATIHAN pada Database. Klik Next dan Finish. Kemudian pilih Table Pegawai pada Database LATIHAN dan klik tombol > sehingga pada List Selected Tables terdapat Table Pegawai. Kemudian klik OK. Untuk lebih jelasnya lihat gambar di bawah ini :

39

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

40

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

Dari Fields Explorer Database Fields Pegawai Drag dan Drop Fields NIP, Nama, TglLahir dan Kota dari Database Fields ke Section 3 (Details). Klik Special Fields, Drag dan Drop Record Number ke depan Fields NIP yang tadi kita tambahkan, Drag dan Drop juga Page N of M ke Section 5 (Page Footer). Pada ToolBox pilih Text Object dan tambahkan ke Section 1 (Report Header) dan ubah tulisan/ isinya dengan DATA PEGAWAI. Pada Section 2 (Page Header) terdapat beberapa Text Object yang secara otomatis ditambahkan ketika kita tambahkan Fields ke Section 3 tadi. Pilih semua yang ada di Section 2 dan hilangkan garis bawahnya dengan cara klik lambang U pada ToolBar. Kemudian double klik Text Object Record Number yang ada di Section 2 dan ganti dengan NO. Pada ToolBox pilih Box Object dan tambahkan 1 buah ke Section 2 (Page Header) dan 1 buah ke Section 3 (Details). Sehingga hasilnya akan tampak seperti gambar di bawah ini :

Klik ini untuk melihat Preview laporan 6.2.SOURCE CODE Untuk dapat menampilkan Laporan tersebut maka diperlukan sebuah object/ kontrol yang bernama CrystalReportViewer. Untuk keperluan tersebut buat sebuah Form baru dan beri nama Laporan.vb. Dan tambahkan sebuah CrystalReportViewer ke Form tersebut. CrystalReportViewer terdapat di ToolBoxCrystalReport CrystalReportViewer. Kemudian ubah Name CrystalReportViewer tersebut menjadi CRPegawai. Ubah properti WindowState dari Form Laporan menjadi Maximized. Aktifkan kembali FrmPegawai dan double klik BtnReport. Kemudian ketikkan kode program berikut ini :
Dim a As New rptDataPegawai Dim b As New LAPORAN b.CRPegawai.ReportSource = a b.ShowDialog()

Baris pertama mendeklarasikan a sebagai object dari Class rptDatapegawai. Baris selanjutnya mendeklarasikan b sebagai object dari Class/ Form Laporan. Baris ketiga mengatur nilai Sumber Data dari CRPegawai (CrystalReportViewer) yang ada di b (dalam hal ini adalah Form Laporan) bersumber dari a (yang berarti adalah Crystal Report yang tadi telah kita buat yaitu

41

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

rptDataPegawai). Dan baris terakhir untuk menampilkan Form Laporan. Sehingga pada saat running ketika diklik BtnReport maka akan tampak seperti pada gambar di bawah ini :

42

Pemrograman Berorientasi Objek II

Nanang Sutisna, S.Kom

SOAL DAN LATIHAN BAB I Gunakan bantuan notepad dan .Net Framework anda. Buatlah program di bawah ini : 1. Buatlah program untuk menghitung luas segitiga. Dimana alas dan tingginya diperoleh dari hasil inputan user. 2. Buatlah program untuk menghitung luas Persegi Panjang. Dimana panjang dan lebarnya diperoleh dari hasil inputan user. 3. Buatlah sebuah Structure Mahasiswa yang memiliki Field-field : NIM, Nama, TglLahir, Alamat, dan Jurusan. Nilai field-field tersebut diisi dari inputan user. Ketika selesai, dan ditekan tombol enter maka data mahasiswa yang telah diinputkan tadi dicetak ke layar. Sehingga tampilan program anda kurang lebih seperti gambar di bawah ini :

BAB II Gunakan Database Northwind dan Table Customers yang ada di SQL Server anda untuk mengerjakan soal dibawah ini : 1. Buatlah sebuah Stored Procedure yang berfungsi untuk menampilkan data yang ada di Table Customers. Dengan kriteria yang anda masukkan ke dalam parameter tertentu. 2. Buatlah Stored Procedure untuk menambahkan data ke Table Customers. 3. Buatlah Stored Procedure untuk mengubah data yang ada di Table Customers dengan kriteria berdasarkan CustomerID. 4. Buatlah Stored Procedure untuk menghapus data yang ada di Table Customers dengan kriteria berdasarkan CustomerID. BAB III Buatlah sebuah Form Splash Screen untuk aplikasi yang bernama NORTHWIND TRADE. Tampilan sesuaikan dengan kreativitas anda. BAB IV Ubahlah Form Login yang ada pada BAB IV sehingga ketika User telah gagal Login sebanyak 3 kali (baik karena salah Username maupun Password) maka aplikasi akan ditutup/ dihentikan secara otomatis. BAB V Buatlah sebuah aplikasi Form untuk memanipulasi (ada data yang ditampilkan ke DataGridView, proses Insert, Update dan Delete) data yang ada di Table Customers pada Database Northwind.

43