MODUL 12 IMPLEMENTASI ADO DALAM APLIKASI
ADO dan Lanjutan Normalisasi
Langkah-langkah Normalisasi
1. Bentuk tidak normal (Unnormalized Form): Bentuk ini merupakan kumpulan data yang akan direkam, tidak ada keharusan mengikuti suatu format tertentu. Dapat saja data tidak lengkap atau terduplikasi. Data dikumpulkan apa adanya sesuai dengan saat menginput
NoSiswa
Nama
PA
Kelas1
Kelas2
Kelas3
22890100
Rafi
Rachmat
1234
1543
1543
22890101
Thoriq
Adi
1234
1775
Keterangan= PA (Penasehat Akademik)
1
Siswa yg punya nomor siswa, nama, dan PA mengikuti 3 mata pelajaran/kelas. Disini ada perulangan kelas 3 kali ini bukan bentuk 1 NF
2. Bentuk Normal Ke Satu (1 NF/First Normal Form) Suatu relasi 1NF jika dan hanya jika sifat dari setiap relasi atributnya bersifat atomik. Atom adalah zat terkecil yang masih memiliki sifat induknya, bila dipecah lagi maka ia tidak memiliki sifat induknya. Ciri-ciri 1 NF : •
Setiap data dibentuk dalam flat file, data dibentuk dalam satu record demi satu record nilai dari field berupa “atomic value
•
Tidak ada set atribute yang berulang atau bernilai ganda
•
Tiap field hanya satu pengertian
Nosiswa
Nama
PA
KodeKelas
22890100 22890100 22890101 22890101
Rafi Rafi Thoriq Thoriq
Rachmat Rachmat Adi Adi
1234 1543 1234 1775
3. Bentuk Normal Ke Dua (2 NF /Second Normal Form)
Bentuk normal kedua mempunyai syarat yaitu bentuk data telah memenuhi kriteria bentuk normal kesatu. Atribute bukan kunci haruslah bergantung secara fungsi pada kunci utama/primary key. Sehingga utk membentuk normal kedua haruslah sudah ditentukan kunci-kunci field. Kunci field haruslah unik dan dapat mewakili atribute lain yg menjadi anggotanya. Misal : Dari contoh relasi Siswa pada I NF terlihat bahwa kunci utama/primary key adalah nomor siswa. Nama siswa dan pa bergantung fungsi pada no_siswa, tetapi kode_kelas bukanlah fungsi dari siswa, maka file siswa dipecah menjadi 2 relasi
2
4. Bentuk Normal Ke Tiga (3 NF / Third Normal Form) Untuk menjadi bentuk normal ketiga maka relasi haruslah dalam bentuk normal kedua dan semua atribute bukan primer tidak punya hubungan yg transitif. Dengan kata lain,setiap atribute bukan kunci haruslah bergantung hanya pada primary key dan pada primary key secara menyeluruh. Contoh pada bentuk normal kedua di atas termasuk juga bentuk normal ke tiga karena seluruh atribute yang ada disitu bergantung penuh pada kunci primernya
5. Boyce-Codd Normal Form ( BCNF) BCNF mempunyai paksaan yg lebih kuat dari bentuk normal ketiga. Untuk menjadi BCNF, relasi harus dalam bentuk normal kesatu dan setiap atribute harus bergantung fungsi pada atribute superkey Pada contoh di bawah ini terdapat relasi seminar dengan ketentuan sbb : a. kunci primer adalah no_siswa+seminar. b. Siswa boleh mengambil satu atau dua seminar. c. Setiap siswa dibimbing oleh salah satu diantara 2 instruktur seminar tsb. d. Setiap instruktur boleh hanya mengambil satu seminar saja. Pada contoh ini no_siswa dan seminar menunjuk seorang
3
instruktur :
Bentuk relasi seminar adalah bentuk normal ketiga, tetapi tidak BCNF karena nomor seminar masih bergantung fungsi pada instruktur, jika setiap instruktur dapat mengajar hanya pada satu seminar. Seminar bergantung fungsi pada satu atribute bukan superkey seperti yg disyaratkan oleh BCNF. Maka relasi seminar haruslah dipecah menjadi dua yaitu :
6. Bentuk Normal Ke Empat (4 NF) Relasi R adalah bentuk 4 NF jika dan hanya jika relasi tersebut juga termasuk BCNF dan semua ketergantungan multivalue adalah juga ketergantungan fungsional
7. Bentuk Normal Ke Lima (5 NF) Disebut juga PJNF (Projection Join Normal Form) dari 4 NF dilakukan dengan menghilangkan ketergantungan join yang bukan merupakan kunci kandidat.
4
1. Langkah 1. bentuk Unnormalized
2. Langkah 2. Bentuk 1 NF
5
3. Langkah 3. Bentuk 2 NF
4. Langkah 4. Bentuk 3 NF
Latihan soal
Buatlah bentuk Normalisasi dari dokumen berikut ini : Kartu pengobatan masyarakat No Pasien : 1234/PO/IV/99
Tanggal Pendaftaran : 1 Mei
1999 Data Pasien dari, NOPEN : 1000019999
Nama Pasien : Bachtiar Jose
Alamat Pasien, Jalan : Kebon Jeruk No. 27
Kelurahan : Palmerah
6
Kecamatan : Kemanggisan Kode Pos :11530
Wilayah : Jakarta Barat Telepon : 5350999
D. Spesifikasi Hardware dan Software Hardware : •
Prosesor : Pentium 4 1.2Ghz
•
Memori
: 512 MB RAM
•
Hardisk
: minimum 10GB, ada ruang kosong min 2GB
•
Monitor
: min resolusi 1024x768 dan 256 color
•
Keyboard dan mouse
Sistem Operasi: •
Microsoft Windows 95
•
Microsoft Windows 2000
•
Microsoft Windows Xp
•
Ms. Access
•
Visual Studio.Net 2005/Visual Basic 6.0
7
E. Materi Pratikum
F. Latihan Buatlah aplikasi dengan membuat validasinya pada setiap TextField Nonota, SubTotal dan Potongan
Tabel Barang Field
Type Data
Kode
Text
Nonota
Text
Nama
Text
Harga
Number
satuan
Number
Jumlah
Number
8
Tabel Nota Field
TypeData
NoNota
Text
KodePemasok
Text
Nama
Text
Keterangan
Text
Tanggal
Date
Private Sub adoDtl_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean) If ErrorNumber = 3596 Then On Error Resume Next End If End Sub
Private Sub adoHdr_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean) If ErrorNumber = 3596 Then Exit Sub End If End Sub
Private Sub cmdBatal_Click() Call AturButton("Batal") Call cmdRefresh2_Click End Sub
9
Private Sub cmdBatalDetail_Click() Call AturButton2("Batal") Call cmdRefresh_Click End Sub
Private Sub cmdHapus_Click() Var = MsgBox("Yakin Ingin Menghapus Nota No :" & txtNoNota & "? ", vbOKCancel) If Var = vbOK Then adoDtl.RecordSource = "DELETE FROM barang WHERE No_Nota = " & txtNoNota & "" adoHdr.Recordset.Delete Call cmdRefresh2_Click Call cmdRefresh_Click End If End Sub
Private Sub cmdHapusDetail_Click() adoDtl.Recordset.Delete End Sub
Private Sub cmdKeluar_Click() response = MsgBox("Ingin keluar aplikasi ? ", vbOKCancel) If response = vbOK Then Unload Me Else Exit Sub End If
End Sub
10
Private Sub cmdRefresh2_Click() adoHdr.RecordSource = "SELECT * FROM nota" adoHdr.Refresh Call Bounding End Sub
Private Sub cmdRefresh_Click() adoDtl.RecordSource = "SELECT * FROM barang WHERE no_nota = '" & txtNoNota & "'" adoDtl.Refresh Call BoundingDetail
End Sub
Private Sub cmdRefreshs_Click()
End Sub
Private Sub cmdSimpan_Click() Call Simpan_Master Call AturButton("Batal") Call cmdRefresh2_Click End Sub
Private Sub cmdSimpanDetail_Click() Call Simpan_Detail Call cmdRefresh_Click Call txtSubTotal_GotFocus txtKodeBarang.SetFocus End Sub
11
Private Sub cmdTambah_Click() Call KosongkanIsianNota Call ReleaseBounding
Call AturButton("Tambah")
End Sub Sub AturButton(Status As String) If Status = "Tambah" Then cmdTambah.Enabled = False cmdSimpan.Enabled = True cmdBatal.Enabled = True cmdHapus.Enabled = False Else cmdTambah.Enabled = True cmdSimpan.Enabled = False cmdBatal.Enabled = False cmdHapus.Enabled = True End If
End Sub Sub AturButton2(Status As String) If Status = "Tambah" Then cmdTambahDetail.Enabled = False cmdSimpanDetail.Enabled = True cmdBatalDetail.Enabled = True cmdHapusDetail.Enabled = False Else cmdTambahDetail.Enabled = True cmdSimpanDetail.Enabled = False
12
cmdBatalDetail.Enabled = False cmdHapusDetail.Enabled = True End If
End Sub
Sub ReleaseBounding() On Error Resume Next
txtNoNota.DataField = "" txtKodePemasok.DataField = "" txtNama.DataField = "" txtKeterangan.DataField = "" dtpTanggal.DataField = "" End Sub Sub Bounding() On Error Resume Next
txtNoNota.DataField = "No_Nota" txtKodePemasok.DataField = "Kode_Pemasok" txtNama.DataField = "Nama" txtKeterangan.DataField = "Keterangan" dtpTanggal.DataField = "Tanggal" End Sub Sub BoundingDetail() On Error Resume Next
txtKodeBarang.DataField = "Kode_Barang" txtNamaBarang.DataField = "Nama_Barang" txtHarga.DataField = "Harga" txtSatuan.DataField = "Satuan"
13
txtJumlah.DataField = "Jumlah" End Sub Sub ReleaseBoundingDetail() On Error Resume Next
txtKodeBarang.DataField = "" txtNamaBarang.DataField = "" txtHarga.DataField = "" txtSatuan.DataField = "" txtJumlah.DataField = "" End Sub Sub KosongkanIsian() On Error Resume Next
txtKodeBarang.Text = "" txtNamaBarang.Text = "" txtHarga.Text = "" txtSatuan.Text = "" txtJumlah.Text = "" 'cmdHapus.Enabled = False 'cmdBatal.Enabled = False End Sub
Sub KosongkanIsianNota() On Error Resume Next
txtNoNota.Text = "" txtKodePemasok.Text = "" txtNama.Text = "" txtKeterangan.Text = "" dtpTanggal.Enabled = True
14
'cmdHapus.Enabled = False 'cmdBatal.Enabled = False End Sub
Private Sub Command1_Click() Dim str As String str = "Untuk Membuat Nota Baru klik tombol [Tambah]" str = str + vbKeyReturn + "Untuk Menghapus Nota Klik tombol [Hapus]" MsgBox str End Sub
Private Sub Command2_Click()
End Sub
Private Sub cmdTambahDetail_Click() Call KosongkanIsian Call ReleaseBoundingDetail Call AturButton2("Tambah") txtKodeBarang.SetFocus End Sub
Private Sub dgridMain_AfterColEdit(ByVal ColIndex As Integer) MsgBox "TEST"
End Sub
15
Private Sub dgridMain_Change() MsgBox dgridMain.Columns(3) End Sub
Private Sub Form_Activate() On Error Resume Next adoHdr.RecordSource = "SELECT * FROM nota" adoHdr.Refresh Call Bounding
End Sub
Private Sub Form_LostFocus() On Error Resume Next
End Sub
Private Sub txtPotongan_Change() On Error Resume Next txtPotongan.Text = Format(txtPotongan, "#,##0.00") txtTotalAkhir = Val(txtSubTotal.Text - txtPotongan.Text) 'txtTotalAkhir.Text = txtTotalAkhir
txtTotalAkhir.Text = Format(txtTotalAkhir, "#,##0.00") End Sub
Private Sub txtPotongan_GotFocus() txtPotongan.SelStart = 0
txtPotongan.BackColor = &H80FFFF
16
txtPotongan.SelLength = Len(txtPotongan.Text)
End Sub
Private Sub txtPotongan_LostFocus() txtPotongan.BackColor = &H80000005 End Sub
Private Sub txtSubTotal_GotFocus() On Error Resume Next
Dim adoCount As New ADODB.Connection Dim rsCount As New ADODB.Recordset Dim sSQL As String
sSQL = "SELECT SUM(JUMLAH) FROM barang WHERE No_Nota = '" & txtNoNota.Text & "'" adoCount.ConnectionString = "DSN=UAS" adoCount.Open
rsCount.Open sSQL, adoCount.ConnectionString
txtSubTotal.Text = rsCount(0) txtSubTotal.BackColor = &HC0E0FF txtSubTotal.SelStart = 0 txtSubTotal.SelLength = Len(txtSubTotal.Text) End Sub ================
17