ado dan lanjutan normalisasi langkah-langkah · pdf filelangkah-langkah normalisasi 1. ......
TRANSCRIPT
1
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)
2
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 Rafi Rachmat 1234 22890100 Rafi Rachmat 1543 22890101 Thoriq Adi 1234 22890101 Thoriq Adi 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
3
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
4
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.
6
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
7
Kecamatan : Kemanggisan Wilayah : Jakarta Barat Kode Pos :11530 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
8
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
9
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
10
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
11
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
12
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
13
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"
14
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
15
'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
16
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
17
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
================