Mengolah Database Dengan SQL Dan Crystal Report Dalam Visual Basic 6.0
Mengolah Database Dengan SQL Dan Crystal Report Dalam Visual Basic 6.0
MERELASIKAN DATA
131
data barang dan data pemasok jika ternyata kode barang dan kode
pemasoknya belum terdaftar pada kedua tabel tersebut dan jumlah
barang langsung di-update, kemudian data pembelian ini akan
disimpan pada tabel beli.
Perhatikan dengan baik rancangan tabel beli yang pernah dibuat. Di
dalamnya terdapat field kode barang dan kode pemasok dengan
field-field tersebut merupakan field kunci pada tabel barang dan tabel
pemasok. Dengan teknik seperti ini maka tabel beli mampu
mengambil data yang diperlukan dari tabel barang dan tabel
pemasok tersebut. Untuk mencoba program pembelian, rancanglah
sebuah form dengan bentuk seperti gambar di bawah ini:
132
Text8 Name TxtNamaBrg
Text9 Name TxtStokBrg
Text10 Name TxtNamaPms
Text11 Name TxtAlamat
Text12 Name TxtRelasi
Text13 Name TxtTotal
Text14 Name JmlData
Command1 Name Cmdinput
Caption &Input
Command2 Name Cmdtutup
Caption &Tutup
Data1 Name Data1
DatabaseName C:\Belajar VB\Master.mdb
Caption Brg
RecordSource Barang
RecordsetType 0 – Table
Data2 Name Data2
DatabaseName C:\Belajar VB\Master.mdb
Caption Pms
RecordSource Pemasok
RecordsetType 0 – Table
Data3 Name Data3
DatabaseName C:\Belajar VB\Master.mdb
Caption Beli
RecordSource Beli
RecordsetType 0 – Table
133
Listing Program:
‘Fungsi untuk mencari jumlah data
Function JumlahData()
mjumlah = Data3.Recordset.RecordCount
JmlData = mjumlah
End Function
With Data1.Recordset
.Index = "barangdex"
.Seek "=", txtkodebrg
If .NoMatch Then
134
.AddNew
!kodebrg = txtkodebrg
!namabrg = txtnamabrg
!harga = txtharga
!Jumlah = txtjumbeli
.Update
Else
.Edit
!Jumlah = !Jumlah + txtjumbeli
.Update
End If
End With
With Data2.Recordset
.Index = "Pemasokdex"
.Seek "=", txtkodepms
If .NoMatch Then
.AddNew
!kodepms = txtkodepms
!namapms = txtnamapms
!AlamatPms = txtalamat
!TelponPms = txttelpon
!RelasiPms = txtrelasi
.Update
End If
End With
Data1.Refresh
Data2.Refresh
Data3.Refresh
kosongkan
tidaksiapisi
semula
End If
End If
JumlahData
End Sub
135
If KeyAscii = 13 Then
With Data1.Recordset
.Index = "barangdex"
.Seek "=", txtkodebrg
If Not .NoMatch Then
txtnamabrg.Enabled = False
txtharga.Enabled = False
txtstokbrg.Enabled = False
txtnamabrg = Data1.Recordset!namabrg
txtharga = Data1.Recordset!harga
txtstokbrg = Data1.Recordset!Jumlah
txtkodepms.SetFocus
Else
x = MsgBox("Kode Barang Tidak Ada, Data Barang & _
Langsung Dientri...!", vbYesNo, "Konfirmasi")
If x = vbYes Then
txtnamabrg.Enabled = True
txtharga.Enabled = True
txtstokbrg.Enabled = True
txtnamabrg = ""
txtharga = ""
txtstokbrg = ""
txtnamabrg.SetFocus
Else
txtkodebrg.SetFocus
End If
End If
End With
End If
End Sub
136
txtnamapms.SetFocus
Else
txtkodepms.SetFocus
End If
End If
End With
End If
End Sub
137
End If
End Sub
138
cmdinput.Caption = "&Input"
cmdtutup.Caption = "&Tutup"
cmdinput.Enabled = True
cmdtutup.Enabled = True
End Sub
Penjelasan Program:
With Data1.Recordset
.Index = "barangdex"
.Seek "=", txtkodebrg
If .NoMatch Then
.AddNew
!kodebrg = txtkodebrg
!namabrg = txtnamabrg
!harga = txtharga
!Jumlah = txtjumbeli
.Update
Else
.Edit
!Jumlah = !Jumlah + txtjumbeli
.Update
End If
End With
Potongan program ini berarti pada saat cmdinput diklik dan data
barang tidak ditemukan maka entrilah data baru tersebut, tapi jika
data barang ditemukan maka editlah jumlahnya dengan cara
menambahkan jumlah pembelian ke tabel barang (field jumlah).
139
isi yang ada di dalamnya. Cara ini lebih efektif digunakan
dibandingkan dengan mengosongkan semua text seperti cara yang
pernah dibicarakan pada Bab I. Jika ada control lain yang digunakan
dalam form ini, Anda tinggal menambahkan nama dari control yang
digunakan itu. Misalnya Combobox, DBCombo dan lain-lain.
Contoh:
Private Sub kosongkan()
Dim Ctl As Control
For Each Ctl In Me
If TypeName(Ctl) = "TextBox" Then
Ctl.Text = ""
End If
If TypeName(Ctl) = "ComboBox" Then
Ctl.Text = ""
End If
If TypeName(Ctl) = "DBCombo" Then
Ctl.Text = ""
End If
Next
End Sub
140
3. Jumlah penjualan mengurangi jumlah barang,
4. Harga jual dinaikan 10% dari harga asli barang untuk
mendapatkan laba.
Kode barang dan kode pemasok yang berupa text (di program
pembelian) diganti dengan DBCombo dan dengan DBCombo ini
kita dapat langsung menampilkan daftar field kode barang dan kode
pemasok atau dapat mengetik di dalamnya. Untuk membuat
program tersebut, rancanglah form berbentuk seperti Gambar 4.2.
141
RecordsetType 0 – Table
Data2 Name Data2
DatabaseName C:\Belajar VB\Master.mdb
Caption Plg
RecordSource Pelanggan
RecordsetType 0 – Table
Data3 Name Data3
DatabaseName C:\Belajar VB\Master.mdb
Caption Jual
RecordSource Jual
RecordsetType 0 – Table
Listing Program:
Function JumlahData()
mjumlah = Data3.Recordset.RecordCount
JmldataJual = mjumlah
End Function
142
txtnofaktur.SetFocus
Else
If txtnofaktur = Empty Then
pesan = MsgBox("Nomor Faktur Tidak Boleh Kosong", & _
0, "Informasi")
txtnofaktur.SetFocus
Else
With Data3.Recordset
.AddNew
!Nofaktur = txtnofaktur
!tglfaktur = txttglfaktur
!kodebrg = DBCombo1
!KodePlg = DBCombo2
!JmlJual = txtjumjual
.Update
Data3.Refresh
End With
With Data1.Recordset
.Index = "barangdex"
.Seek "=", DBCombo1
If .NoMatch Then
.AddNew
!kodebrg = DBCombo1
!Namabrg = txtnamabrg
!harga = txtharga
!Jumlah = txtstokbrg
.Update
Else
.Edit
!Jumlah = !Jumlah - txtjumjual
.Update
End If
End With
With Data2.Recordset
.Index = "Pelanggandex"
.Seek "=", DBCombo2
If .NoMatch Then
.AddNew
!KodePlg = DBCombo2
!Namaplg = txtnamaplg
!AlamatPlg = txtalamat
!TelponPlg = txttelpon
!RelasiPlg = txtrelasi
.Update
End If
End With
Data1.Refresh
Data2.Refresh
Data3.Refresh
kosongkan
tidaksiapisi
semula
End If
143
End If
JumlahData
End Sub
144
Private Sub DBCombo2_change()
If Len(DBCombo2.Text) < 6 Then
Exit Sub
End If
With Data2.Recordset
.Index = "Pelanggandex"
.Seek "=", DBCombo2
If Not .NoMatch Then
txtnamaplg.Enabled = False
txttelpon.Enabled = False
txtalamat.Enabled = False
txtrelasi.Enabled = False
txtnamaplg = Data2.Recordset!Namaplg
txttelpon = Data2.Recordset!TelponPlg
txtalamat = Data2.Recordset!AlamatPlg
txtrelasi = Data2.Recordset!RelasiPlg
txtjumjual.Enabled = True
txtjumjual.SetFocus
Else
x = MsgBox("Kode Pelanggan Tidak Ada, Apakah akan & _
Langsung Diinput...?", vbYesNo, "Konfirmasi")
If x = vbYes Then
siapisi
txtnamaplg.SetFocus
Else
DBCombo2.SetFocus
End If
End If
End With
End Sub
145
If KeyAscii = 13 Then
txttelpon.SetFocus
End If
End Sub
146
End Sub
147
End Sub
148
Data1 Name Data1
Caption Brg
DatabaseName C:\Belajar VB\Master.mdb
RecordsetType 0 – Table
RecordSource Barang
Data2 Name Data2
Caption Pms
DatabaseName C:\Belajar VB\Master.mdb
RecordsetType 0 – Table
RecordSource Pemasok
Data3 Name Data3
Caption Beli
DatabaseName C:\Belajar VB\Master.mdb
RecordsetType 1 – Dynaset
RecordSource Beli
Listing Program:
Private Sub Command1_Click()
Tampil.Show
‘definisikan variabel hitungan
Dim MSubtotal, MTotal As Long
Dim MNo, MHal, MBaris As Integer
Dim MJumlah As Double
‘definisikan garis
Dim MGrs As String
Tampil.Show
‘Pilih bentuk huruf
Tampil.Font = "Courier New"
With Data3.Recordset
‘Jika data pembelian kosong, munculkan pesan
If Data3.Recordset.RecordCount = 0 Then
x = MsgBox("Data Pembelian Belum Ada", 0, "Informasi")
Exit Sub
End If
‘bawa ke record pertama
.MoveFirst
mtotalharga = 0
149
mtotalbeli = 0
mtotalbayar = 0
MNo = 0
MHal = 0
‘Cetak Judul laporan
Do While Not .EOF
MHal = MHal + 1
Tampil.Print
Tampil.Print
Tampil.FontBold = True
Tampil.FontSize = 10
Tampil.Print Tab(10); "Data Pembelian PT. ABC"
Tampil.Print Tab(10); "Tanggal Cetak: "; Format(Date,& _
"DD-MMM-YY")
Tampil.FontBold = False
Tampil.FontSize = 8
Tampil.Print
Tampil.Print Tab(90); "Hal:"; Format(MHal, "###")
MGrs = String$(110, "-")
Tampil.Print MGrs
Tampil.Print Tab(3); "No.";
Tampil.Print Tab(8); "No Fkt";
Tampil.Print Tab(18); "TGL Fkt";
Tampil.Print Tab(30); "Nama Barang";
Tampil.Print Tab(57); "Nama Pemasok";
Tampil.Print Tab(82); "Harga";
Tampil.Print Tab(92); "Jumlah";
Tampil.Print Tab(105); "Total"
Tampil.Print MGrs
msubtotalbeli = 0
msubtotalbayar = 0
MBaris = 0
cetak isi tabel
Do While Not .EOF And MBaris <= 30
MNo = MNo + 1
Data1.Recordset.Index = "Barangdex"
Data1.Recordset.Seek "=", Data3.Recordset!kodebrg
Data2.Recordset.Index = "Pemasokdex"
Data2.Recordset.Seek "=", Data3.Recordset!kodepms
mharga = Data1.Recordset!harga
mbeli = Data3.Recordset!jmlbeli
Mbayar = mharga * mbeli
Tampil.Print Tab(2); RKanan(MNo, "###");
Tampil.Print Tab(8); Data3.Recordset!NoFaktur;
Tampil.Print Tab(18);Format(Data3. & _
Recordset!TglFaktur, "DD-MMM-YY");
Tampil.Print Tab(30); Data1.Recordset!namabrg;
Tampil.Print Tab(57); Data2.Recordset!namapms;
Tampil.Print Tab(78); RKanan(mharga, "###,###,###");
Tampil.Print Tab(92); RKanan(mbeli, "#,###");
Tampil.Print Tab(100); RKanan(Mbayar, "###,###,###")
msubtotalbeli = msubtotalbeli + mbeli
msubtotalbayar = msubtotalbayar + Mbayar
150
MBaris = MBaris + 1
.MoveNext
Loop
mtotalbeli = mtotalbeli + msubtotalbeli
mtotalbayar = mtotalbayar + msubtotalbayar
Tampil.Print MGrs
Tampil.Print Tab(5); "Sub Total:";
Tampil.Print Tab(92); RKanan(msubtotalbeli, "#,###");
Tampil.Print Tab(100); RKanan(msubtotalbayar, & _
"###,###,###") & ",-"
Tampil.Print Tab(5); "Total:";
Tampil.Print Tab(92); RKanan(mtotalbeli, "#,###");
Tampil.Print Tab(100); RKanan(mtotalbayar, "###,###,###")
& ",-"
Tampil.Print MGrs
Loop
End With
End Sub
Hasil:
151
pemasok diubah dengan data pelanggan. Untuk keperluan
pencetakan di atas, buatlah form seperti Gambar 4.5.
152
Hasil:
Listing Program:
Private Sub Command1_Click()
Tampil.Show
Dim MSubtotal, MTotal As Long
Dim MNo, MHal, MBaris As Integer
Dim MJumlah As Double
Dim MGrs As String
Tampil.Show
Tampil.Font = "Courier New"
With Data3.Recordset
If Data3.Recordset.RecordCount = 0 Then
x = MsgBox("Data Penjualan Belum Ada", 0, "Informasi")
Exit Sub
End If
.MoveFirst
mtotalharga = 0
mtotalJual = 0
mtotalbayar = 0
MNo = 0
MHal = 0
Do While Not .EOF
MHal = MHal + 1
Tampil.Print
Tampil.Print
Tampil.FontBold = True
Tampil.FontSize = 10
Tampil.Print Tab(10); "Data Penjualan PT. ABC"
Tampil.Print Tab(10); "Tanggal Cetak: "; & _
Format(Date, "DD-MMM-YY")
Tampil.FontBold = False
Tampil.FontSize = 8
Tampil.Print
Tampil.Print Tab(90); "Hal:"; Format(MHal, "###")
153
MGrs = String$(110, "-")
Tampil.Print MGrs
Tampil.Print Tab(3); "No.";
Tampil.Print Tab(8); "No Fkt";
Tampil.Print Tab(18); "TGL Fkt";
Tampil.Print Tab(30); "Nama Barang";
Tampil.Print Tab(57); "Nama Pelanggan";
Tampil.Print Tab(82); "Harga";
Tampil.Print Tab(92); "Jumlah";
Tampil.Print Tab(105); "Total"
Tampil.Print MGrs
msubtotalJual = 0
msubtotalbayar = 0
MBaris = 0
Do While Not .EOF And MBaris <= 30
MNo = MNo + 1
Data1.Recordset.Index = "Barangdex"
Data1.Recordset.Seek "=", Data3.Recordset!kodebrg
Data2.Recordset.Index = "Pelanggandex"
Data2.Recordset.Seek "=", Data3.Recordset!kodePlg
mharga = Data1.Recordset!harga
mJual = Data3.Recordset!jmlJual
Mbayar = mharga * mJual
Tampil.Print Tab(2); RKanan(MNo, "###");
Tampil.Print Tab(8); Data3.Recordset!NoFaktur;
Tampil.Print Tab(18);Format(Data3.Recordset & _
!TglFaktur, "DD-MMM-YY");
Tampil.Print Tab(30); Data1.Recordset!namabrg;
Tampil.Print Tab(57); Data2.Recordset!namaPlg;
Tampil.Print Tab(78); RKanan(mharga, "###,###,###");
Tampil.Print Tab(92); RKanan(mJual, "#,###");
Tampil.Print Tab(100); RKanan(Mbayar, "###,###,###")
msubtotalJual = msubtotalJual + mJual
msubtotalbayar = msubtotalbayar + Mbayar
MBaris = MBaris + 1
.MoveNext
Loop
mtotalJual = mtotalJual + msubtotalJual
mtotalbayar = mtotalbayar + msubtotalbayar
Tampil.Print MGrs
Tampil.Print Tab(5); "Sub Total:";
Tampil.Print Tab(92); RKanan(msubtotalJual, "#,###");
Tampil.Print Tab(100); RKanan(msubtotalbayar, & _
"###,###,###") & ",-"
Tampil.Print Tab(5); "Total:";
Tampil.Print Tab(92); RKanan(mtotalJual, "#,###");
Tampil.Print Tab(100); RKanan(mtotalbayar, & _
"###,###,###") & ",-"
Tampil.Print MGrs
Loop
End With
End Sub
154
Private Function RKanan(NData, CFormat) As String
RKanan = Format(NData, CFormat)
RKanan = Space(Len(CFormat) - Len(RKanan)) + RKanan
End Function
155