Anda di halaman 1dari 47

Program Aplikasi Persediaan Barang

Oleh : Eko Sugiharto, S.Kom.


Buatlah database dan beberapa tabel menggunakan program Microsoft Access sesuai dengan
ketentuan berikut ini :
Nama database : database.mdb
Daftar tabel
1. Nama Tabel : Barang
Field Name
*Kode_Brg
Nama_Brg
Satuan
Stok
Nama Tabel : Supplier
Field Name
*Kode_Supp
Nama_Supp
Alamat
Kota
Telepon

Data Type (Length)


Text(10)
Text(30)
Text(20)
Number(Integer)

2.

Nama Tabel : Pembelian


Field Name
*No_Faktur
Tanggal
Kode_Supp
Nama_Supp
Total

Data Type (Length)


Text(10)
Text(30)
Text(150)
Text(30)
Text(20)

3.

Nama Tabel : Detail_Beli


Field Name
No_Faktur
Kode_Brg
Nama_Brg
Jumlah
Keterangan : Tanpa Primary Key

Data Type (Length)


Text(10)
Date
Text(10)
Text(30)
Number(Integer)

4.

Nama Tabel : Pengeluaran


Field Name
*No_Keluar
Tanggal
Total

Data Type (Length)


Text(10)
Text(10)
Text(30)
Number(Integer)

5.

Nama Tabel : Detail_Keluar


Field Name
No_Keluar
Kode_Brg
Nama_Brg
Stok
Jumlah
Keterangan : Tanpa Primary Key

Data Type (Length)


Text(10)
Date
Number(Integer)

6.

Nama Tabel : Admin


Field Name
*Username
Password

Data Type (Length)


Text(10)
Text(10)
Text(30)
Number(Integer)
Number(Integer)

7.

Eko Sugiharto, S.Kom

Data Type (Length)


Text(16)
Text(16)

Setelah pembuatan database dan tabel menggunakan Microsoft Access selesai, selanjutnya ikuti
langkah-langkah berikut ini :
1. Aktifkan Microsoft Visual Basic 6.0
2. Kemudian klik Project References untuk menambahkan Reference Microsoft ActiveX Data Objects
2.0 Library.

3.

Pilih Microsoft ActiveX Data Objects 2.0 Library pada kotak dialog References

4.

Tambahkan Module untuk menuliskan deklarasi variabel global dan procedure untuk koneksi database

Eko Sugiharto, S.Kom

5.

Ketik kode program sesuai contoh berikut ini :

Option
Public
Public
Public
Public
Public

Explicit
KonekDB As ADODB.Connection
Rs_Barang As New ADODB.Recordset
Rs_Supplier As New ADODB.Recordset
Rs_Beli As New ADODB.Recordset
Rs_Keluar As New ADODB.Recordset

'Deklarasi Variabel
Public strKonekDB As String
Public SQL As String
Public Sub BukaDatabase()
Set KonekDB = New ADODB.Connection
strKonekDB = "Provider=Microsoft.Jet.OLEDB.4.0;Persist
Source=" & App.Path + "\database.mdb"

Security

Info=False;Data

'Untuk membuka koneksi


On Error Resume Next
If KonekDB.State = adStateOpen Then
KonekDB.Close
Set KonekDB = New ADODB.Connection
Else
KonekDB.Open strKonekDB
End If
'Periksa status koneksi
If Err.Number <> 0 Then
MsgBox "Koneksi Database
vbInformation, "Informasi"
End
Else
'Koneksi Database Sukses
End If
End Sub

6.
7.

Gagal,

Silakan

Periksa

Kembali..!!",

vbOKOnly

Simpan Module tersebut dengan nama Config


Tambahkan komponen Microsoft FlexGrid Control 6.0 dengan cara klik kanan pada area Toolbox
kemudian pilih Components

Eko Sugiharto, S.Kom

8.

Rancanglah form Data Barang dengan menambahkan 4 Label, 3 TextBox, 1 ComboBox, 1 Frame, 4
CommandButton dan 1 MsFlexGrid seperti contoh berikut ini:

9.

Kemudian atur properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmBarang
Caption
Data Barang
Label1
Caption
Kode Barang
Label2
Caption
Nama Barang
Label3
Caption
Satuan
Label4
Caption
Stok
Text1
Name
txtKode
Text
(Kosongkan)
Text2
Name
txtNama
Text
(Kosongkan)
Text3
Name
txtStok
Text
(Kosongkan)
Combo1
Name
cbSatuan
Text
Kosongkan
Frame1
Caption
Proses
Command1
Name
cmdInput
Caption
&Input
Command2
Name
cmdEdit
Caption
&Edit
Command3
Name
cmdHapus
Caption
&Hapus
Command4
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData

Eko Sugiharto, S.Kom

10. Sehingga tampilan akhirnya menjadi seperti berikut ini :

11. Kemudian tambahkan kode program sesuai contoh berikut ini :


Dim GridBaris As Byte
Sub NonAktif()
txtKode.Enabled = False
txtNama.Enabled = False
cbSatuan.Enabled = False
txtStok.Enabled = False
cmdEdit.Enabled = False
cmdHapus.Enabled = False
cmdInput.Enabled = True
cmdInput.Caption = "&Input"
cmdTutup.Caption = "&Tutup"
End Sub
Sub Aktif()
txtKode.Enabled = True
txtNama.Enabled = True
cbSatuan.Enabled = True
txtStok.Enabled = True
End Sub
Sub Kosong()
txtKode.Text = ""
txtNama.Text = ""
cbSatuan.Text = ""
txtStok.Text = ""
End Sub
Private Sub cmdEdit_Click()
If MsgBox("Apakah Anda yakin mau mengedit data ini?", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
If txtNama.Text = "" Then
MsgBox "Nama Barang tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtNama.SetFocus
ElseIf cbSatuan.Text = "" Then
MsgBox "Satuan tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
cbSatuan.SetFocus
ElseIf txtStok.Text = "" Then
MsgBox "Stok tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtStok.SetFocus
ElseIf Not IsNumeric(txtStok.Text) Then
MsgBox "Stok harus diisi dengan tipe number!", vbInformation + vbOKOnly,
"Informasi"
txtStok.SetFocus

Eko Sugiharto, S.Kom

Else
SQL = ""
SQL = "SELECT * FROM Barang WHERE Kode_Brg = '" & txtKode.Text & "'"
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Not Rs_Barang.BOF Then
With Rs_Barang
.Fields!Kode_Brg = Trim(txtKode.Text)
.Fields!Nama_Brg = Trim(txtNama.Text)
.Fields!Satuan = Trim(cbSatuan.Text)
.Fields!Stok = Trim(txtStok.Text)
.Update
End With
Rs_Barang.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil diedit", vbOKOnly + vbInformation, "Informasi"
Else
MsgBox "Data gagal diedit", vbOKOnly + vbInformation, "Informasi"
End If
End If
End If
End Sub
Private Sub cmdHapus_Click()
If MsgBox("Apakah Anda yakin mau menghapus data ini?", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
SQL = "DELETE FROM Barang WHERE Kode_Brg='" & txtKode.Text & "'"
KonekDB.Execute SQL, , adCmdText
Rs_Barang.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil dihapus", vbOKOnly + vbInformation, "Informasi"
End If
End Sub
Private Sub cmdInput_Click()
If cmdInput.Caption = "&Input" Then
Call Aktif
cmdInput.Caption = "&Simpan"
cmdTutup.Caption = "&Batal"
txtKode.SetFocus
Else
If txtKode.Text = "" Then
MsgBox "Kode Barang tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtKode.SetFocus
ElseIf txtNama.Text = "" Then
MsgBox "Nama Barang tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtNama.SetFocus
ElseIf cbSatuan.Text = "" Then
MsgBox "Satuan tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
cbSatuan.SetFocus
ElseIf txtStok.Text = "" Then
MsgBox "Stok tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtStok.SetFocus
ElseIf Not IsNumeric(txtStok.Text) Then
MsgBox "Stok harus diisi dengan tipe number!", vbInformation + vbOKOnly,
"Informasi"
txtStok.Text = ""
txtStok.SetFocus
Else
SQL = ""
SQL = "SELECT * FROM Barang WHERE Kode_Brg = '" & txtKode.Text & "'"
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Rs_Barang.BOF Then
With Rs_Barang
.AddNew
.Fields!Kode_Brg = Trim(txtKode.Text)
.Fields!Nama_Brg = Trim(txtNama.Text)
.Fields!Satuan = Trim(cbSatuan.Text)
.Fields!Stok = Trim(txtStok.Text)
.Update
End With

Eko Sugiharto, S.Kom

Rs_Barang.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil tersimpan", vbOKOnly + vbInformation, "Informasi"
Else

MsgBox "Data tidak tersimpan", vbOKOnly + vbInformation, "Informasi"


End If
End If
End If
End Sub
Private Sub cmdTutup_Click()
If cmdTutup.Caption = "&Tutup" Then
If MsgBox("Apakah Anda mau menutup
"Konfirmasi") = vbYes Then
Unload Me
End If
Else
Call Kosong
Call NonAktif
End If
End Sub

form

ini?",

vbYesNo

vbQuestion,

Private Sub Form_Load()


Call BukaDatabase
Call TampilGrid
Call NonAktif
End Sub
Sub AktifGrid()
With GridData
.Cols = 5
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "No"
.CellFontBold = True
.ColWidth(0) = 400
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.RowHeightMin = 300
.Col = 1
.Row = 0
.Text = "Kode Barang"
.CellFontBold = True
.ColWidth(1) = 1750
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Nama Barang"
.CellFontBold = True
.ColWidth(2) = 2500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Satuan"
.CellFontBold = True
.ColWidth(3) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 4
.Row = 0
.Text = "Stok"
.CellFontBold = True
.ColWidth(4) = 1000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub

Eko Sugiharto, S.Kom

Sub TampilGrid()
Dim baris As Integer
GridData.Clear
Call AktifGrid
GridData.Rows = 2
baris = 0
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open "SELECT * FROM Barang", KonekDB, adOpenDynamic, adLockOptimistic
If Rs_Barang.BOF Then
Exit Sub
Else
With Rs_Barang
.MoveFirst
Do While Not .EOF
On Error Resume Next
baris = baris + 1
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = baris
GridData.TextMatrix(baris, 1) = !Kode_Brg
GridData.TextMatrix(baris, 2) = !Nama_Brg
GridData.TextMatrix(baris, 3) = !Satuan
GridData.TextMatrix(baris, 4) = !Stok
.MoveNext
Loop
End With
End If
End Sub
Private Sub GridData_DblClick()
GridBaris = GridData.Row
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open
"SELECT
*
FROM
Barang
WHERE
Kode_Brg='"
GridData.TextMatrix(GridBaris, 1) & "'", KonekDB, adOpenDynamic, adLockOptimistic

&

If Rs_Barang.BOF Then
MsgBox "TABEL MASIH KOSONG!", vbOKOnly + vbInformation, "Error"
Exit Sub
Else
Rs_Barang.MoveFirst
Do While Not Rs_Barang.EOF
On Error Resume Next
txtKode.Text = Rs_Barang!Kode_Brg
txtNama.Text = Rs_Barang!Nama_Brg
cbSatuan.Text = Rs_Barang!Satuan
txtStok.Text = Rs_Barang!Stok
Rs_Barang.MoveNext
Loop
cmdEdit.Enabled = True
cmdHapus.Enabled = True
cmdTutup.Caption = "&Batal"
cmdInput.Caption = "&Input"
cmdInput.Enabled = False
Call Aktif
txtKode.Enabled = False
txtNama.SetFocus
End If
End Sub

12. Simpan form tersebut dengan nama frmBarang

Eko Sugiharto, S.Kom

13. Tambahkan form baru dan rancanglah form Data Supplier dengan menambahkan 5 Label, 5 TextBox,
1 Frame, 4 CommandButton dan 1 MsFlexGrid seperti contoh berikut ini:

14. Atur properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmSupplier
Caption
Data Supplier
Label1
Caption
Kode Supplier
Label2
Caption
Nama Supplier
Label3
Caption
Alamat
Label4
Caption
Kota
Label5
Caption
Telepon
Text1
Name
txtKode
Text
(Kosongkan)
Text2
Name
txtNama
Text
(Kosongkan)
Text3
Name
txtAlamat
Text
(Kosongkan)
Text4
Name
txtKota
Text
(Kosongkan)
Text5
Name
txtTelepon
Text
(Kosongkan)
Frame1
Caption
Proses
Command1
Name
cmdInput
Caption
&Input
Command2
Name
cmdEdit
Caption
&Edit
Command3
Name
cmdHapus
Caption
&Hapus
Command4
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData

Eko Sugiharto, S.Kom

15. Sehingga tampilan akhirnya menjadi seperti berikut ini :

16. Kemudian tambahkan kode program seperti contoh berikut ini :


Dim GridBaris As Byte
Sub NonAktif()
txtKode.Enabled = False
txtNama.Enabled = False
txtAlamat.Enabled = False
txtKota.Enabled = False
txtTelepon.Enabled = False
cmdEdit.Enabled = False
cmdHapus.Enabled = False
cmdInput.Enabled = True
cmdInput.Caption = "&Input"
cmdTutup.Caption = "&Tutup"
End Sub
Sub Aktif()
txtKode.Enabled = True
txtNama.Enabled = True
txtAlamat.Enabled = True
txtKota.Enabled = True
txtTelepon.Enabled = True
End Sub
Sub Kosong()
txtKode.Text = ""
txtNama.Text = ""
txtAlamat.Text = ""
txtKota.Text = ""
txtTelepon.Text = ""
End Sub
Private Sub cmdEdit_Click()
If MsgBox("Apakah Anda yakin mau mengedit data ini?", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
If txtNama.Text = "" Then
MsgBox "Nama Supplier tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtNama.SetFocus
ElseIf txtAlamat.Text = "" Then
MsgBox "Alamat tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtAlamat.SetFocus
ElseIf txtKota.Text = "" Then
MsgBox "Kota tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtKota.SetFocus
ElseIf txtTelepon.Text = "" Then
MsgBox "No. Telepon tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtTelepon.SetFocus

Eko Sugiharto, S.Kom

10

Else
SQL = ""
SQL = "SELECT * FROM Supplier WHERE Kode_Supp = '" & txtKode.Text & "'"
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Not Rs_Supplier.BOF Then
With Rs_Supplier
.Fields!Kode_Supp = Trim(txtKode.Text)
.Fields!Nama_Supp = Trim(txtNama.Text)
.Fields!Alamat = Trim(txtAlamat.Text)
.Fields!Kota = Trim(txtKota.Text)
.Fields!Telepon = Trim(txtTelepon.Text)
.Update
End With
Rs_Supplier.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil diedit", vbOKOnly + vbInformation, "Informasi"
Else
MsgBox "Data gagal diedit", vbOKOnly + vbInformation, "Informasi"
End If
End If
End If
End Sub
Private Sub cmdHapus_Click()
If MsgBox("Apakah Anda yakin mau menghapus data ini?", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
SQL = "DELETE FROM Supplier WHERE Kode_Supp='" & txtKode.Text & "'"
KonekDB.Execute SQL, , adCmdText
Rs_Supplier.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil dihapus", vbOKOnly + vbInformation, "Informasi"
End If
End Sub
Private Sub cmdInput_Click()
If cmdInput.Caption = "&Input" Then
Call Aktif
cmdInput.Caption = "&Simpan"
cmdTutup.Caption = "&Batal"
txtKode.SetFocus
Else
If txtKode.Text = "" Then
MsgBox "Kode Supplier tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtKode.SetFocus
ElseIf txtNama.Text = "" Then
MsgBox "Nama Supplier tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtNama.SetFocus
ElseIf txtAlamat.Text = "" Then
MsgBox "Alamat tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtAlamat.SetFocus
ElseIf txtKota.Text = "" Then
MsgBox "Kota tidak boleh kosong!", vbInformation + vbOKOnly, "Informasi"
txtKota.SetFocus
ElseIf txtTelepon.Text = "" Then
MsgBox "No. Telepon tidak boleh kosong!", vbInformation + vbOKOnly,
"Informasi"
txtTelepon.SetFocus
ElseIf Not IsNumeric(txtTelepon.Text) Then
MsgBox "No. Telepon harus diisi dengan tipe Number!", vbInformation +
vbOKOnly, "Informasi"
txtTelepon.Text = ""
txtTelepon.SetFocus
Else
SQL = ""
SQL = "SELECT * FROM Supplier WHERE Kode_Supp = '" & txtKode.Text & "'"
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Rs_Supplier.BOF Then
With Rs_Supplier
.AddNew
.Fields!Kode_Supp = Trim(txtKode.Text)

Eko Sugiharto, S.Kom

11

.Fields!Nama_Supp = Trim(txtNama.Text)
.Fields!Alamat = Trim(txtAlamat.Text)
.Fields!Kota = Trim(txtKota.Text)
.Fields!Telepon = Trim(txtTelepon.Text)
.Update
End With
Rs_Supplier.Requery
Call Kosong
Call NonAktif
Call TampilGrid
MsgBox "Data berhasil tersimpan", vbOKOnly + vbInformation, "Informasi"
Else

MsgBox "Data tidak tersimpan", vbOKOnly + vbInformation, "Informasi"


End If
End If
End If
End Sub
Private Sub cmdTutup_Click()
If cmdTutup.Caption = "&Tutup" Then
If MsgBox("Apakah Anda mau menutup
"Konfirmasi") = vbYes Then
Unload Me
End If
Else
Call Kosong
Call NonAktif
End If
End Sub

form

ini?",

vbYesNo

vbQuestion,

Private Sub Form_Load()


Call BukaDatabase
Call TampilGrid
Call NonAktif
End Sub
Sub AktifGrid()
With GridData
.Cols = 6
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "No"
.CellFontBold = True
.ColWidth(0) = 400
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.RowHeightMin = 300
.Col = 1
.Row = 0
.Text = "Kode Supplier"
.CellFontBold = True
.ColWidth(1) = 1750
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Nama Supplier"
.CellFontBold = True
.ColWidth(2) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Alamat"
.CellFontBold = True
.ColWidth(3) = 3000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 4
.Row = 0
.Text = "Kota"
.CellFontBold = True
.ColWidth(4) = 1500
.AllowUserResizing = flexResizeColumns

Eko Sugiharto, S.Kom

12

.CellAlignment = flexAlignCenterCenter
.Col = 5
.Row = 0
.Text = "Telepon"
.CellFontBold = True
.ColWidth(5) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub
Sub TampilGrid()
Dim baris As Integer
GridData.Clear
Call AktifGrid
GridData.Rows = 2
baris = 0
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open "SELECT * FROM Supplier", KonekDB, adOpenDynamic, adLockOptimistic
If Rs_Supplier.BOF Then
Exit Sub
Else
With Rs_Supplier
.MoveFirst
Do While Not .EOF
On Error Resume Next
baris = baris + 1
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = baris
GridData.TextMatrix(baris, 1) = !Kode_Supp
GridData.TextMatrix(baris, 2) = !Nama_Supp
GridData.TextMatrix(baris, 3) = !Alamat
GridData.TextMatrix(baris, 4) = !Kota
GridData.TextMatrix(baris, 5) = !Telepon
.MoveNext
Loop
End With
End If
End Sub
Private Sub GridData_DblClick()
GridBaris = GridData.Row
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open
"
SELECT
*
FROM
Supplier
WHERE
Kode_Supp='"
GridData.TextMatrix(GridBaris, 1) & "'", KonekDB, adOpenDynamic, adLockOptimistic

&

If Rs_Supplier.BOF Then
MsgBox "TABEL MASIH KOSONG!", vbOKOnly + vbInformation, "Error"
Exit Sub
Else
Rs_Supplier.MoveFirst
Do While Not Rs_Supplier.EOF
On Error Resume Next
txtKode.Text = Rs_Supplier!Kode_Supp
txtNama.Text = Rs_Supplier!Nama_Supp
txtAlamat.Text = Rs_Supplier!Alamat
txtKota.Text = Rs_Supplier!Kota
txtTelepon.Text = Rs_Supplier!Telepon
Rs_Supplier.MoveNext
Loop
cmdEdit.Enabled = True
cmdHapus.Enabled = True
cmdTutup.Caption = "&Batal"
cmdInput.Caption = "&Input"
cmdInput.Enabled = False
Call Aktif
txtKode.Enabled = False
txtNama.SetFocus
End If
End Sub

17. Simpan form tersebut dengan nama frmSupplier

Eko Sugiharto, S.Kom

13

18. Tambahkan komponen Microsoft Windows Common Controls-2.6.0

19. Kemudian tambahkan form baru dan rancanglah form Data Pembelian dengan menambahkan 8 Label,
7 TextBox, 1 DTPicker, 1 Frame, 6 CommandButton seperti contoh berikut ini :

20. Atur properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmPembelian
Caption
Data Pembelian
Label1
Caption
No. Faktur
Label2
Caption
Tanggal
Label3
Caption
Kode Supplier
Label4
Caption
Nama Supplier
Label5
Alignment
Center
BackColor
(Pilih Warna)
Caption
Kode Barang
Label6
Alignment
Center
BackColor
(Pilih Warna)
Caption
Nama Barang

Eko Sugiharto, S.Kom

14

Label7

Alignment
Center
BackColor
(Pilih Warna)
Caption
Jumlah
Label8
Caption
Total
Text1
Name
txtNoFak
Text
Kosongkan
Text2
Name
txtKdSupp
Text
Kosongkan
Text3
Name
txtNmSupp
Text
Kosongkan
Text4
Name
txtKdBrg
Text
Kosongkan
Text5
Name
txtNmBrg
Text
Kosongkan
Text6
Name
txtJumlah
Text
Kosongkan
Text7
Name
txtTotal
Text
Kosongkan
DTPicker1
Name
dtTanggal
Frame1
Caption
Proses
Command1
Name
cmdCariSupp
Caption
...
Command2
Name
cmdCariBrg
Caption
...
Command3
Name
cmdOK
Caption
&OK
Command4
Name
cmdSimpan
Caption
&Simpan
Command5
Name
cmdBatal
Caption
&Batal
Command6
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData
21. Sehingga tampilan akhirnya menjadi seperti berikut ini :

Eko Sugiharto, S.Kom

15

22. Kemudian tambahkan kode program seperti contoh berikut ini :


Dim i, baris As Integer
Private Sub cmdBatal_Click()
Kosong
End Sub
Private Sub cmdCariSupp_Click()
frmCariSupplier.Show
End Sub
Private Sub cmdCariBrg_Click()
frmCariBarang.Show
End Sub
Private Sub Kosong()
txtNoFak.Text = ""
dtTanggal.Value = Format(Now, "dd-mm-yyyy")
txtKdSupp.Text = ""
txtNmSupp.Text = ""
txtKdBrg.Text = ""
txtNmBrg.Text = ""
txtJumlah.Text = ""
txtTotal.Text = ""
baris = 1
GridData.Clear
GridData.Rows = 2
AktifGridData
End Sub
Private Sub cmdOK_Click()
On Error Resume Next
If txtKdBrg = "" Then
MsgBox "Kode Barang tidak boleh kosong..!!", vbInformation + vbOKOnly,
"Informasi"
txtKdBrg.SetFocus
ElseIf txtNmBrg = "" Then
MsgBox "Kode Barang tidak terdaftar..!", vbInformation + vbOKOnly, "Informasi"
txtKdBrg = ""
txtJumlah = ""
txtKdBrg.SetFocus
ElseIf txtJumlah = "" Then
MsgBox "Jumlah tidak boleh kosong..!!", vbInformation + vbOKOnly, "Informasi"
txtJumlah.SetFocus
ElseIf Not IsNumeric(txtJumlah) Then
MsgBox "Jumlah harus diisi dengan tipe Number!", vbInformation + vbOKOnly,
"Informasi"
txtJumlah = ""
txtJumlah.SetFocus
Else
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = txtKdBrg.Text
GridData.TextMatrix(baris, 1) = txtNmBrg.Text
GridData.TextMatrix(baris, 2) = txtJumlah.Text
txtTotal.Text = Val(txtTotal.Text) + Val(txtJumlah.Text)
baris = baris + 1
txtKdBrg = ""
txtNmBrg = ""
txtJumlah = ""
txtKdBrg.SetFocus
End If
Rs_Barang.Requery
End Sub
Private Sub AktifGridData()
With GridData
.Cols = 3
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "Kode Barang"
.CellFontBold = True
.ColWidth(0) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter

Eko Sugiharto, S.Kom

16

.Col = 1
.Row = 0
.Text = "Nama Barang"
.CellFontBold = True
.ColWidth(1) = 4000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Jumlah"
.CellFontBold = True
.ColWidth(2) = 1000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub
Private Sub cmdSimpan_Click()
If baris <> 1 Then
If txtNoFak = "" Then
MsgBox "No. Faktur tidak boleh kosong!", vbOKOnly + vbInformation, "Informasi"
txtNoFak.SetFocus
ElseIf txtKdSupp = "" Then
MsgBox "Kode Supplier tidak boleh kosong!", vbOKOnly + vbInformation,
"Informasi"
txtKdSupp.SetFocus
Else
'Proses penyimpanan ke Pembelian
SQL = ""
SQL
=
"INSERT
INTO
Pembelian(No_Faktur,Tanggal,Kode_Supp,Nama_Supp,Total)
VALUES('" & txtNoFak.Text & "','" & dtTanggal.Value & "','" & txtKdSupp.Text & "','" &
txtNmSupp.Text & "','" & txtTotal.Text & "')"
KonekDB.Execute SQL, , adCmdText
'Proses penyimpanan ke Detail_Beli
For i = 1 To baris - 1
SQL = ""
SQL = "INSERT INTO Detail_Beli(No_Faktur,Kode_Brg,Nama_Brg,Jumlah) VALUES('"
& txtNoFak.Text & "','" & GridData.TextMatrix(i, 0) & "','" & GridData.TextMatrix(i, 1)
& "','" & GridData.TextMatrix(i, 2) & "')"
KonekDB.Execute SQL, , adCmdText
Dim StokBaru As Integer
Dim Kode As String
StokBaru = Val(GridData.TextMatrix(i, 2))
Kode = GridData.TextMatrix(i, 0)

Kode & "'"

Else

SQL = ""
SQL = "UPDATE Barang SET Stok=Stok + " & StokBaru & " WHERE Kode_Brg='" &

KonekDB.Execute SQL, , adCmdText


Next i
MsgBox "Data Pembelian telah tersimpan.", vbInformation + vbOKOnly, "Informasi"
Kosong
End If

MsgBox "Maaf!
"Informasi"
End If
End Sub

Data

pembelian

barang

masih

kosong.",

vbOKOnly

vbInformation,

Private Sub cmdTutup_Click()


If MsgBox("Apakah Anda mau menutup form ini?", vbYesNo + vbQuestion, "Konfirmasi") =
vbYes Then
Unload Me
End If
End Sub
Private Sub Form_Load()
Call BukaDatabase
Call Kosong
End Sub
Private Sub TampilBarang()
If txtKdBrg <> "" Then
SQL = ""
SQL = "SELECT * FROM Barang WHERE Kode_Brg='" & txtKdBrg.Text & "'"
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic

Eko Sugiharto, S.Kom

17

If Not Rs_Barang.BOF Then


txtNmBrg = Rs_Barang.Fields!Nama_Brg
txtJumlah.SetFocus
End If
End If
End Sub
Private Sub TampilSupplier()
If txtKdSupp <> "" Then
SQL = ""
SQL = "SELECT * FROM Supplier WHERE Kode_Supp='" & txtKdSupp.Text & "'"
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Not Rs_Supplier.BOF Then
txtNmSupp = Rs_Supplier.Fields!Nama_Supp
txtKdBrg.SetFocus
End If
End If
End Sub
Private Sub txtKdBrg_Change()
TampilBarang
End Sub
Private Sub txtKdSupp_Change()
TampilSupplier
End Sub

23. Simpan form tersebut dengan nama frmPembelian


24. Tambahkan form baru dan rancanglah form Pencarian Supplier dengan menambahkan 1 Frame, 1
TextBox, 1 CommandButton dan 1 MsFlexGrid seperti contoh berikut ini :

25. Atur properti masing-masing seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmCariSupplier
Caption
Pencarian
Frame1
Caption
Kata Kunci
Text1
Name
txtCari
Text
(Kosongkan)
Command1
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData

Eko Sugiharto, S.Kom

18

26. Sehingga tampilan akhirnya menjadi seperti berikut ini :

27. Tambahkan kode program seperti contoh berikut ini :


Private Sub cmdTutup_Click()
Unload Me
End Sub
Private Sub Form_Load()
Call BukaDatabase
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open "SELECT * FROM Supplier", KonekDB, adOpenDynamic, adLockOptimistic
Call TampilGridData
GridData.Cols = 6
End Sub
Sub AktifGridData()
With GridData
.Cols = 6
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "No"
.CellFontBold = True
.ColWidth(0) = 400
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 1
.Row = 0
.Text = "Kode Supplier"
.CellFontBold = True
.ColWidth(1) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Nama Supplier"
.CellFontBold = True
.ColWidth(2) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Alamat"
.CellFontBold = True
.ColWidth(3) = 3500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 4
.Row = 0
.Text = "Kota"
.CellFontBold = True
.ColWidth(4) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter

Eko Sugiharto, S.Kom

19

.Col = 5
.Row = 0
.Text = "Telepon"
.CellFontBold = True
.ColWidth(5) = 1800
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub
Sub TampilGridData()
Dim baris As Byte
GridData.Clear
Call AktifGridData
GridData.Rows = 2
baris = 0
If Rs_Supplier.BOF Then
MsgBox "Data Supplier Masih Kosong..", vbInformation + vbOKOnly, "Informasi"
Exit Sub
Else
With Rs_Supplier
.MoveFirst
Do While Not .EOF
baris = baris + 1
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = baris
GridData.TextMatrix(baris, 1) = !Kode_Supp
GridData.TextMatrix(baris, 2) = !Nama_Supp
GridData.TextMatrix(baris, 3) = !Alamat
GridData.TextMatrix(baris, 4) = !Kota
GridData.TextMatrix(baris, 5) = !Telepon
.MoveNext
Loop
End With
End If
End Sub
Private Sub GridData_DblClick()
Dim b As Byte
b = GridData.Row
If GridData.Rows <> 1 Then
With frmPembelian
.txtKdSupp.Text = GridData.TextMatrix(b, 1)
.txtNmSupp.Text = GridData.TextMatrix(b, 2)
.txtKdBrg.SetFocus
End With
Else
Exit Sub
End If
Unload Me
End Sub
Private Sub txtCari_Change()
If txtCari.Text <> Empty Then
Set Rs_Supplier = New ADODB.Recordset
Rs_Supplier.Open "SELECT * FROM Supplier WHERE Kode_Supp LIKE '%" & txtCari.Text
&
"%'
OR
Nama_Supp
LIKE'%"
&
txtCari.Text
&
"%'",
KonekDB,
adOpenDynamic,
adLockBatchOptimistic
If Rs_Supplier.BOF Then
MsgBox "Data Yang Anda Cari Tidak Ditemukan..!", vbInformation + vbOKOnly,
"Informasi"
txtCari.Text = ""
txtCari.SetFocus
Else
Call TampilGridData
End If
End If
End Sub

28. Simpan form tersebut dengan nama frmCariSupplier

Eko Sugiharto, S.Kom

20

29. Tambahkan form baru dan rancanglah form Pencarian Barang dengan menambahkan 1 Frame, 1
TextBox, 1 CommandButton dan 1 MsFlexGrid seperti contoh berikut ini :

30. Atur properti masing-masing seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmCariBarang
Caption
Pencarian
Frame1
Caption
Kata Kunci
Text1
Name
txtCari
Text
(Kosongkan)
Command1
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData
31. Sehingga tampilan akhirnya menjadi seperti berikut ini :

32. Tambahkan kode program seperti contoh berikut ini :


Private Sub cmdTutup_Click()
Unload Me
End Sub
Private Sub Form_Load()
Call BukaDatabase
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open "SELECT * FROM Barang", KonekDB, adOpenDynamic, adLockOptimistic
Call TampilGridData
GridData.Cols = 4
End Sub
Sub AktifGridData()
With GridData
.Cols = 4
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "No"
.CellFontBold = True
.ColWidth(0) = 400
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter

Eko Sugiharto, S.Kom

21

.Col = 1
.Row = 0
.Text = "Kode Barang"
.CellFontBold = True
.ColWidth(1) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Nama Barang"
.CellFontBold = True
.ColWidth(2) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Stok"
.CellFontBold = True
.ColWidth(3) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub
Sub TampilGridData()
Dim baris As Byte
GridData.Clear
Call AktifGridData
GridData.Rows = 2
baris = 0
If Rs_Barang.BOF Then
MsgBox "Data Barang Masih Kosong..", vbInformation + vbOKOnly, "Informasi"
Exit Sub
Else
With Rs_Barang
.MoveFirst
Do While Not .EOF
baris = baris + 1
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = baris
GridData.TextMatrix(baris, 1) = !Kode_Brg
GridData.TextMatrix(baris, 2) = !Nama_Brg
GridData.TextMatrix(baris, 3) = !Stok
.MoveNext
Loop
End With
End If
End Sub
Private Sub GridData_DblClick()
Dim b As Byte
b = GridData.Row
If GridData.Rows <> 1 Then
With frmPembelian
.txtKdBrg.Text = GridData.TextMatrix(b, 1)
.txtNmBrg.Text = GridData.TextMatrix(b, 2)
.txtJumlah.SetFocus
End With
Else
Exit Sub
End If
Unload Me
End Sub
Private Sub txtCari_Change()
If txtCari.Text = Empty Then
'
Else
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open "SELECT * FROM Barang WHERE Kode_Brg LIKE '%" & txtCari.Text &
"%'
OR
Nama_Brg
LIKE'%"
&
txtCari.Text
&
"%'",
KonekDB,
adOpenDynamic,
adLockBatchOptimistic

Eko Sugiharto, S.Kom

22

If Rs_Barang.BOF Then
MsgBox "Data Yang Anda Cari Tidak Ditemukan..!", vbInformation + vbOKOnly,
"Informasi"
txtCari.Text = ""
txtCari.SetFocus
Else
Call TampilGridData
End If
End If
End Sub

33. Simpan form tersebut dengan nama frmCariBarang


34. Tambahkan form baru dan rancanglah form Data Pengeluaran dengan menambahkan 7 Label, 6
TextBox, 1 DTPicker, 1 Frame, 5 CommandButton, dan MsFlexGrid seperti contoh berikut ini :

35. Aturlah properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmPengeluaran
Caption
Data Pengeluaran
Label1
Caption
No. Keluar
Label2
Caption
Tanggal
Label3
Alignment
Center
BackColor
(Pilih Warna)
Caption
Kode Barang
Label4
Alignment
Center
BackColor
(Pilih Warna)
Caption
Nama Barang
Label5
Alignment
Center
BackColor
(Pilih Warna)
Caption
Stok
Label6
Alignment
Center
BackColor
(Pilih Warna)
Caption
Qty Minta
Label7
Caption
Total Minta
Text1
Name
txtNo
Text
Kosongkan
Text2
Name
txtKdBrg
Text
Kosongkan
Text3
Name
txtNmBrg
Text
Kosongkan
Text4
Name
txtStok
Text
Kosongkan
Text5
Name
txtJumlah
Text
Kosongkan

Eko Sugiharto, S.Kom

23

Text6
DTPicker1
Frame1
Command1
Command2
Command3
Command4
Command5
MsFlexGrid1

Name
Text
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name

txtTotal
Kosongkan
dtTanggal
Proses
cmdCariBrg
...
cmdOK
&OK
cmdSimpan
&Simpan
cmdBatal
&Batal
cmdTutup
&Tutup
GridData

36. Sehingga tampilan akhirnya menjadi seperti berikut ini :

37. Tambahkan kode program seperti contoh berikut ini ;


Dim i, baris As Integer
Private Sub cmdBatal_Click()
Kosong
End Sub
Private Sub cmdCariBrg_Click()
frmCariBarang2.Show
End Sub
Private Sub Kosong()
txtNo.Text = ""
dtTanggal.Value = Format(Now, "dd-mm-yyyy")
txtKdBrg.Text = ""
txtNmBrg.Text = ""
txtJumlah.Text = ""
txtTotal.Text = ""
baris = 1
GridData.Clear
GridData.Rows = 2
AktifGridData
End Sub

Eko Sugiharto, S.Kom

24

Private Sub cmdOK_Click()


On Error Resume Next
Dim cekKode As String
If txtKdBrg = "" Then
MsgBox "Kode Barang tidak boleh kosong..!!", vbInformation + vbOKOnly,
"Informasi"
txtKdBrg.SetFocus
ElseIf txtNmBrg = "" Then
MsgBox "Kode Barang tidak terdaftar..!", vbInformation + vbOKOnly, "Informasi"
txtKdBrg = ""
txtJumlah = ""
txtKdBrg.SetFocus
ElseIf txtJumlah = "" Then
MsgBox "Jumlah tidak boleh kosong..!!", vbInformation + vbOKOnly, "Informasi"
txtJumlah.SetFocus
ElseIf Not IsNumeric(txtJumlah) Then
MsgBox "Jumlah harus diisi dengan tipe Number!", vbInformation + vbOKOnly,
"Informasi"
txtJumlah = ""
txtJumlah.SetFocus
ElseIf Val(txtJumlah.Text) > Val(txtStok.Text) Then
MsgBox "Stok barang tidak mencukupi!", vbInformation + vbOKOnly, "Informasi"
txtJumlah = ""
txtJumlah.SetFocus
Else
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = txtKdBrg.Text
GridData.TextMatrix(baris, 1) = txtNmBrg.Text
GridData.TextMatrix(baris, 2) = txtStok.Text
GridData.TextMatrix(baris, 3) = txtJumlah.Text
txtTotal.Text = Val(txtTotal.Text) + Val(txtJumlah.Text)
baris = baris + 1
txtKdBrg = ""
txtNmBrg = ""
txtStok = ""
txtJumlah = ""
txtKdBrg.SetFocus
End If
Rs_Barang.Requery
End Sub
Private Sub AktifGridData()
With GridData
.Cols = 4
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "Kode Barang"
.CellFontBold = True
.ColWidth(0) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 1
.Row = 0
.Text = "Nama Barang"
.CellFontBold = True
.ColWidth(1) = 3500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Stok"
.CellFontBold = True
.ColWidth(2) = 1000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Qty Minta"
.CellFontBold = True
.ColWidth(2) = 1200
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub

Eko Sugiharto, S.Kom

25

Private Sub cmdSimpan_Click()


If baris <> 1 Then
If txtNo = "" Then
MsgBox "No. Keluar tidak boleh kosong!", vbOKOnly + vbInformation, "Informasi"
txtNo.SetFocus
Else
'Proses penyimpanan ke Pengeluaran
SQL = ""
SQL = "INSERT INTO Pengeluaran(No_Keluar,Tanggal,Total) VALUES('" & txtNo.Text &
"','" & dtTanggal.Value & "','" & txtTotal.Text & "')"
KonekDB.Execute SQL, , adCmdText
'Proses penyimpanan ke Detail_Keluar
For i = 1 To baris - 1
SQL = ""
SQL = "INSERT INTO Detail_Keluar(No_Keluar,Kode_Brg,Nama_Brg,Stok,Jumlah)
VALUES('"
&
txtNo.Text
&
"','"
&
GridData.TextMatrix(i,
0)
&
"','"
&
GridData.TextMatrix(i,
1)
&
"','"
&
GridData.TextMatrix(i,
2)
&
"','"
&
GridData.TextMatrix(i, 3) & "')"
KonekDB.Execute SQL, , adCmdText
Dim JumKeluar As Integer
Dim Kode As String
JumKeluar = Val(GridData.TextMatrix(i, 3))
Kode = GridData.TextMatrix(i, 0)

Kode & "'"

SQL = ""
SQL = "UPDATE Barang SET Stok=Stok - " & JumKeluar & " WHERE Kode_Brg='" &

KonekDB.Execute SQL, , adCmdText


Next i
MsgBox
"Data
Pengeluaran
telah
tersimpan.",
vbInformation
+
vbOKOnly,
"Informasi"
Kosong
End If
Else
MsgBox "Maaf! Data Pengeluaran barang masih kosong.", vbOKOnly + vbInformation,
"Informasi"
End If
End Sub
Private Sub cmdTutup_Click()
If MsgBox("Apakah Anda mau menutup form ini?", vbYesNo + vbQuestion, "Konfirmasi") =
vbYes Then
Unload Me
End If
End Sub
Private Sub Form_Load()
Call BukaDatabase
Call Kosong
End Sub
Private Sub TampilBarang()
If txtKdBrg <> "" Then
SQL = ""
SQL = "SELECT * FROM Barang WHERE Kode_Brg='" & txtKdBrg.Text & "'"
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open SQL, KonekDB, adOpenDynamic, adLockOptimistic
If Not Rs_Barang.BOF Then
txtNmBrg = Rs_Barang.Fields!Nama_Brg
txtJumlah.SetFocus
End If
End If
End Sub
Private Sub txtKdBrg_Change()
TampilBarang
End Sub

38. Simpan form tersebut dengan nama frmPengeluaran

Eko Sugiharto, S.Kom

26

39. Tambahkan form baru dan rancanglah form Pencarian Barang dengan menambahkan 1 Frame, 1
TextBox, 1 CommandButton dan 1 MsFlexGrid seperti contoh berikut ini :

40. Atur properti masing-masing seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmCariBarang2
Caption
Pencarian
Frame1
Caption
Kata Kunci
Text1
Name
txtCari
Text
(Kosongkan)
Command1
Name
cmdTutup
Caption
&Tutup
MsFlexGrid1
Name
GridData
41. Sehingga tampilan akhirnya menjadi seperti berikut ini :

42. Tambahkan kode program seperti contoh berikut ini :


Private Sub cmdTutup_Click()
Unload Me
End Sub
Private Sub Form_Load()
Call BukaDatabase
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open "SELECT * FROM Barang", KonekDB, adOpenDynamic, adLockOptimistic
Call TampilGridData
GridData.Cols = 4
End Sub
Sub AktifGridData()
With GridData
.Cols = 4
.RowHeightMin = 300
.Col = 0
.Row = 0
.Text = "No"
.CellFontBold = True
.ColWidth(0) = 400
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter

Eko Sugiharto, S.Kom

27

.Col = 1
.Row = 0
.Text = "Kode Barang"
.CellFontBold = True
.ColWidth(1) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 2
.Row = 0
.Text = "Nama Barang"
.CellFontBold = True
.ColWidth(2) = 2000
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
.Col = 3
.Row = 0
.Text = "Stok"
.CellFontBold = True
.ColWidth(3) = 1500
.AllowUserResizing = flexResizeColumns
.CellAlignment = flexAlignCenterCenter
End With
End Sub
Sub TampilGridData()
Dim baris As Byte
GridData.Clear
Call AktifGridData
GridData.Rows = 2
baris = 0
If Rs_Barang.BOF Then
MsgBox "Data Barang Masih Kosong..", vbInformation + vbOKOnly, "Informasi"
Exit Sub
Else
With Rs_Barang
.MoveFirst
Do While Not .EOF
baris = baris + 1
GridData.Rows = baris + 1
GridData.TextMatrix(baris, 0) = baris
GridData.TextMatrix(baris, 1) = !Kode_Brg
GridData.TextMatrix(baris, 2) = !Nama_Brg
GridData.TextMatrix(baris, 3) = !Stok
.MoveNext
Loop
End With
End If
End Sub
Private Sub GridData_DblClick()
Dim b As Byte
b = GridData.Row
If GridData.Rows <> 1 Then
With frmPengeluaran
.txtKdBrg.Text = GridData.TextMatrix(b, 1)
.txtNmBrg.Text = GridData.TextMatrix(b, 2)
.txtStok.Text = GridData.TextMatrix(b, 3)
.txtJumlah.SetFocus
End With
Else
Exit Sub
End If
Unload Me
End Sub
Private Sub txtCari_Change()
If txtCari.Text = Empty Then
'
Else
Set Rs_Barang = New ADODB.Recordset
Rs_Barang.Open "SELECT * FROM Barang WHERE Kode_Brg LIKE '%" & txtCari.Text &
"%'
OR
Nama_Brg
LIKE'%"
&
txtCari.Text
&
"%'",
KonekDB,
adOpenDynamic,
adLockBatchOptimistic

Eko Sugiharto, S.Kom

28

If Rs_Barang.BOF Then
MsgBox "Data Yang Anda Cari Tidak Ditemukan..!", vbInformation + vbOKOnly,
"Informasi"
txtCari.Text = ""
txtCari.SetFocus
Else
Call TampilGridData
End If
End If
End Sub

43. Simpan form tersebut dengan nama frmCariBarang2


44. Tambahkan form baru untuk membuat form Login seperti contoh berikut ini :

45. Aturlah properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmLogin
Caption
Login
Label1
Caption
Username
Label2
Caption
Password
Text1
Name
txtUser
Text
(Kosongkan)
Text2
Name
txtPassword
PasswordChar *
Text
(Kosongkan)
Command1
Name
cmdOK
Caption
&OK
Command1
Name
cmdBatal
Caption
&Batal
46. Sehingga tampilan akhirnya menjadi seperti berikut ini :

47. Tambahkan kode program seperti contoh berikut ini :


Dim
Dim
Dim
Dim

db As ADODB.Connection
rs As ADODB.Recordset
SQL As String
salah As Byte

Sub koneksi()
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
db.Open
"Provider=Microsoft.Jet.OLEDB.4.0;Data
"\database.mdb;Persist Security Info=False"
End Sub

Source="

&

App.Path

&

Private Sub cmdBatal_Click()


End
End Sub
Private Sub cmdOK_Click()
If txtUser = "" Then
MsgBox "Nama user tidak boleh kosong..!!", vbOKOnly + vbInformation, "Login"
txtUser.SetFocus

Eko Sugiharto, S.Kom

29

ElseIf txtPassword = "" Then


MsgBox "Password tidak boleh kosong..!!", vbOKOnly + vbInformation, "Login"
txtPassword.SetFocus
Else
koneksi
SQL = "SELECT * FROM admin WHERE username='" & txtUser.Text & "' AND password='"
& txtPassword.Text & "'"
Set rs = db.Execute(SQL)
'Jika data user ditemukan
If Not rs.BOF Then
frmUtama.Show
Unload Me
Else
If salah < 2 Then
MsgBox "Nama user atau Password Salah..!! Silakan ulangi lagi..",
vbCritical + vbOKOnly, "Login"
txtUser.Text = ""
txtPassword.Text = ""
txtUser.SetFocus
salah = salah + 1
Else
MsgBox "Kesalahan Password 3 kali berturut-turut.., Silakan Login
ulang..", vbCritical + vbOKOnly, "Login"
salah = 0
End
End If
End If
End If
End Sub
Private Sub txtPassword_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
cmdOK_Click
End If
End Sub
Private Sub txtUser_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
txtPassword.SetFocus
End If
End Sub
Private Sub txtUser_Change()
txtPassword.Text = ""
End Sub

48. Simpan form tersebut dengan nama frmLogin


49. Tambahkan form baru sebagai form utama Program Aplikasi Stok Barang, kemudian tambahkan menu
dan submenu menggunakan Menu Editor sesuai dengan ketentuan berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmUtama
Caption
Aplikasi Persediaan Barang
WindowState
Maximized
Menu Editor
Caption
&Master
Name
mnuMaster
Caption
Data &Barang
Name
mnuBarang
Caption
Data &Supplier
Name
mnuSupplier
Caption
Name
mnuGaris
Caption
&Keluar
Name
mnuKeluar
Caption
&Transaksi
Name
mnuTransaksi
Caption
Pembelian
Name
mnuPembelian
Caption
Pengeluaran
Name
mnuPengeluaran
Caption
Laporan
Name
mnuLaporan

Eko Sugiharto, S.Kom

30

Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name

Barang
mnuLapBarang
Supplier
mnuLapSupplier
mnuGaris2
Pembelian
mnuLapBeli
Pengeluaran
mnuLapKeluar

Keterangan : Untuk membuat sub menu seperti Data Barang yaitu dengan klik ikon panah arah ke
kanan (
)
50. Tambahkan kode program seperti contoh berikut ini :
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Apakah Anda yakin mau keluar dari aplikasi ini???", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
End
Else
Cancel = 1
End If
End Sub
Private Sub mnuBarang_Click()
frmBarang.Show
End Sub
Private Sub mnuKeluar_Click()
If MsgBox("Apakah Anda yakin mau keluar dari aplikasi ini???", vbYesNo + vbQuestion,
"Konfirmasi") = vbYes Then
End
End If
End Sub
Private Sub mnuLapBarang_Click()
lapBarang.Refresh
lapBarang.Show
End Sub
Private Sub mnuLapBeli_Click()
frmLapBeli.Show
End Sub
Private Sub mnuLapKeluar_Click()
frmLapKeluar.Show
End Sub

Eko Sugiharto, S.Kom

31

Private Sub mnuLapSupplier_Click()


LapSupplier.Refresh
LapSupplier.Show
End Sub
Private Sub mnuPembelian_Click()
frmPembelian.Show
End Sub
Private Sub mnuPengeluaran_Click()
frmPengeluaran.Show
End Sub
Private Sub mnuSupp_Click()
frmSupplier.Show
End Sub

51. Simpan form tersebut dengan nama frmUtama


52. Tambahkan form baru dan rancanglah form Laporan Pembelian dengan menambahkan 1 Label, 1
Frame, 4 OptionButton, 1 ComboBox, 3 DTPicker, dan 2 CommandButton seperti contoh berikut
ini:

53. Aturlah properti masing-masing objek seperti tertera pada tabel berikut ini :
Nama Objek
Properti
Nilai Pengaturan
Form1
Name
frmLapBeli
Caption
Laporan
Label1
Alignment
2 - Center
Caption
Laporan Pembelian Barang
Font (Size)
14
Frame1
Caption
Kategori
Option1
Name
opt1
Caption
No. Faktur
Tab Index
1
Option2
Name
opt2
Caption
Tanggal
Tab Index
2
Option3
Name
opt3
Caption
Per Periode
Tab Index
3
Option4
Name
opt4
Caption
Seluruh
Tab Index
0
Combo1
Name
cbNo
Text
(Kosongkan)
DTPicker1
Name
dtTanggal
DTPicker2
Name
dtAwal
DTPicker3
Name
dtAkhir
Command1
Name
cmdTampilkan
Caption
Tampilkan

Eko Sugiharto, S.Kom

32

Command2

Name
cmdTutup
Caption
Tutup
54. Sehingga tampilan akhirnya menjadi seperti berikut ini :

55. Tambahkan kode seperti contoh berikut ini :


Private Sub NonAktif()
cbNo.Clear
dtTanggal = Format(Date, "dd-mm-yyyy")
dtAwal = Format(Date, "dd-mm-yyyy")
dtAkhir = Format(Date, "dd-mm-yyyy")
cbNo.Enabled = False
dtTanggal.Enabled = False
dtAwal.Enabled = False
dtAkhir.Enabled = False
NoFaktur
End Sub
Private Sub NoFaktur()
Set Rs1 = New ADODB.Recordset
Rs1.Open
"SELECT
No_Faktur
adOpenDynamic, adLockOptimistic

FROM

Pembelian

ORDER

BY

No_Faktur",

KonekDB,

cbNo.Clear
Do While Not Rs1.EOF
cbNo.AddItem Rs1!No_Faktur
Rs1.MoveNext
Loop
End Sub
Private Sub Lap_PembelianNo()
If cbNo = "" Then
MsgBox "Pilihan No. Faktur tidak boleh kosong..!!", vbOKOnly + vbInformation,
"Informasi"
cbNo.SetFocus
Else
DELaporan.rsPembelian.Filter = "No_Faktur='" & cbNo.Text & "'"
LapBeli.Refresh
LapBeli.Show
End If
End Sub
Private Sub Lap_PembelianTanggal()
DELaporan.rsPembelian.Filter = "Tanggal='" & dtTanggal.Value & "'"
LapBeli.Refresh
LapBeli.Show
End Sub
Private Sub Lap_PembelianPeriode()
If dtAwal > dtAkhir Then
MsgBox "Tanggal Awal lebih besar dari Tanggal Akhir..!!", vbOKOnly +
vbInformation, "Informasi"
dtAwal.SetFocus
Else
DELaporan.rsPembelian.Filter = "Tanggal>='" & dtAwal.Value & "' AND Tanggal<='"
& dtAkhir.Value & "'"
LapBeli.Refresh
LapBeli.Show

Eko Sugiharto, S.Kom

33

End If
End Sub
Private Sub LapPembelianAll()
DELaporan.rsPembelian.Filter = ""
LapBeli.Refresh
LapBeli.Show
End Sub
Private Sub cmdTampil_Click()
If opt1 Then
'menampilkan laporan per No. Faktur
Lap_PembelianNo
ElseIf opt2 Then
'menampilkan laporan per Tanggal
Lap_PembelianTanggal
ElseIf opt3 Then
'menampilkan laporan per Periode
Lap_PembelianPeriode
Else
'menampilkan laporan seluruh data
NonAktif
LapPembelianAll
End If
End Sub
Private Sub cmdTutup_Click()
Unload Me
End Sub
Private Sub Form_Load()
BukaDatabase
NonAktif
End Sub
Private Sub opt1_Click()
NonAktif
cbNo.Enabled = True
cbNo.SetFocus
End Sub
Private Sub opt2_Click()
NonAktif
dtTanggal.Enabled = True
dtTanggal.SetFocus
End Sub
Private Sub opt3_Click()
NonAktif
dtAwal.Enabled = True
dtAkhir.Enabled = True
dtAwal.SetFocus
End Sub
Private Sub opt4_Click()
NonAktif
End Sub

56. Simpan form dengan nama frmLapBeli


57. Tambahkan form baru untuk frmLapKeluar yang secara keseluruhan objek yang digunakannya hampir
sama dengan frmLapBeli
58. Pengaturan properti objeknya pun sama dengan frmLapBeli pada halaman sebelumnya

Eko Sugiharto, S.Kom

34

59. Hingga tampilan akhirnya menjadi seperti berikut ini :

60. Tambahkan kode seperti berikut ini :


Private Sub NonAktif()
cbNo.Clear
dtTanggal = Format(Date, "dd-mm-yyyy")
dtAwal = Format(Date, "dd-mm-yyyy")
dtAkhir = Format(Date, "dd-mm-yyyy")
cbNo.Enabled = False
dtTanggal.Enabled = False
dtAwal.Enabled = False
dtAkhir.Enabled = False
NoKeluar
End Sub
Private Sub NoKeluar()
Set Rs1 = New ADODB.Recordset
Rs1.Open "SELECT No_Keluar
adOpenDynamic, adLockOptimistic

FROM

Pengeluaran

ORDER

BY

No_Keluar",

KonekDB,

cbNo.Clear
Do While Not Rs1.EOF
cbNo.AddItem Rs1!No_Keluar
Rs1.MoveNext
Loop
End Sub
Private Sub Lap_PengeluaranNo()
If cbNo = "" Then
MsgBox "Pilihan No. Keluar tidak boleh kosong..!!", vbOKOnly + vbInformation,
"Informasi"
cbNo.SetFocus
Else
DELaporan.rsPengeluaran.Filter = "No_Keluar='" & cbNo.Text & "'"
LapKeluar.Refresh
LapKeluar.Show
End If
End Sub
Private Sub Lap_PengeluaranTanggal()
DELaporan.rsPengeluaran.Filter = "Tanggal='" & dtTanggal.Value & "'"
LapKeluar.Refresh
LapKeluar.Show
End Sub
Private Sub Lap_PengeluaranPeriode()
If dtAwal > dtAkhir Then
MsgBox "Tanggal Awal lebih
vbInformation, "Informasi"
dtAwal.SetFocus
Else
DELaporan.rsPengeluaran.Filter
Tanggal<='" & dtAkhir.Value & "'"
LapKeluar.Refresh
LapKeluar.Show
End If
End Sub

Eko Sugiharto, S.Kom

besar

dari

Tanggal

"Tanggal>='"

&

Akhir..!!",

dtAwal.Value

vbOKOnly

&

"'

AND

35

Private Sub LapPengeluaranAll()


DELaporan.rsPengeluaran.Filter = ""
LapKeluar.Refresh
LapKeluar.Show
End Sub
Private Sub cmdTampil_Click()
If opt1 Then
'menampilkan laporan per No. Keluar
Lap_PengeluaranNo
ElseIf opt2 Then
'menampilkan laporan per Tanggal
Lap_PengeluaranTanggal
ElseIf opt3 Then
'menampilkan laporan per Periode
Lap_PengeluaranPeriode
Else
'menampilkan laporan seluruh data
NonAktif
LapPengeluaranAll
End If
End Sub
Private Sub cmdTutup_Click()
Unload Me
End Sub
Private Sub Form_Load()
BukaDatabase
NonAktif
End Sub
Private Sub opt1_Click()
NonAktif
cbNo.Enabled = True
cbNo.SetFocus
End Sub
Private Sub opt2_Click()
NonAktif
dtTanggal.Enabled = True
dtTanggal.SetFocus
End Sub
Private Sub opt3_Click()
NonAktif
dtAwal.Enabled = True
dtAkhir.Enabled = True
dtAwal.SetFocus
End Sub
Private Sub opt4_Click()
NonAktif
End Sub

61. Simpan form dengan nama frmLapKeluar

Eko Sugiharto, S.Kom

36

Langkah selanjutnya adalah membuat laporan menggunakan Data Report dengan cara sebagai
berikut :
1. Klik Project More ActiveX Designers Data Environment

2.

Sehingga muncul tampilan berikut ini :

3.
4.

Atur properti name DataEnvironment1 menjadi DELaporan dan Connection1 menjadi Conn
Selanjutnya klik kanan pada Conn kemudian klik Properties

Eko Sugiharto, S.Kom

37

5.

Pilih Microsoft Jet 4.0 OLE DB Provider, kemudian klik Next

6.

Pilih database yang akan dikoneksikan dengan cara klik tombol browse dan pilih database.mdb atau
dengan mengetik nama database yaitu database.mdb pada bagian Select or enter a database name.
Tetapi dengan catatan penyimpanan database.mdb harus satu folder/direktori dengan project VB yang
kita buat.

Eko Sugiharto, S.Kom

38

7.

Untuk memastikan koneksi, Anda bisa menekan tombol Test Connection. Jika ada pesan sukses,
berarti kita sukses untuk membuat koneksi ke database. Selanjutnya klik OK

Sebelum dilanjutkan, kita buka file database.mdb pada program aplikasi Microsoft Access 2007
untuk menambahkan 2 buah query yang digunakan untuk laporan Pembelian dan laporan Pengeluaran
dengan langkah-langkah berikut ini :
1. Buka file database.mdb
2. Klik tombol Create, kemudian klik Query Design pada Ribbon

3.

Pilih tabel Pembelian dan Detail_Beli kemudian klik Add lalu klik Close

4.

Tambahkan field No_Faktur, Tanggal dan Nama_Supp dari tabel Pembelian dengan cara double klik
pada masing-masing nama field

Eko Sugiharto, S.Kom

39

5.
6.

Tambahkan pula field Kode_Brg, Nama_Brg dan Jumlah dari tabel Detail_Beli
Sehingga menjadi seperti contoh berikut ini :

7.
8.
9.

Simpan dengan nama QBeli


Buat 1 buah query lagi dengan cara klik Create Query Design
Tambahkan tabel Pengeluaran dan Detail_Keluar kemudian klik Add lalu klik Close

10. Tambahkan field No_Keluar dan Tanggal dari tabel Pengeluaran dan field Kode_Brg, Nama_Brg dan
Jumlah dari tabel Detail_Keluar
11. Sehingga menjadi seperti contoh berikut ini :

12. Simpan dengan nama QKeluar

Eko Sugiharto, S.Kom

40

Setelah selesai membuat 2 buah query pada Microsoft Access, kita kembali lagi ke Data Environment
pada project Visual Basic. Kemudian ikuti langkah-langkah berikut ini :
1. Klik kanan pada Conn kemudian klik Add Command

2.

Klik kanan pada Command1 kemudian klik Properties

3.

Atur sesuai dengan contoh berikut ini :

Eko Sugiharto, S.Kom

41

4.

Tambahkan command baru pada bagian Conn, kemudian atur sesuai contoh berikut ini :

5.

Tambahkan command baru pada bagian Conn, kemudian atur sesuai contoh berikut ini :

Eko Sugiharto, S.Kom

42

6.

Terakhir tambahkan command baru pada bagian Conn, kemudian atur sesuai contoh berikut ini :

7.

Sehingga tampilan akhir dari Data Environment menjadi seperti berikut ini :

8.
9.

Selanjutnya menambahkan Data Report dengan cara klik Project Add Data Report
Kemudian atur propertiesnya sesuai dengan ketentuan berikut ini :
Nama Objek
Properti
Nilai Pengaturan
DataReport1
Name
LapBarang
Caption
Laporan Barang
DataSource
DELaporan
DataMember
Barang
GridX
10
GridY
10
WindowState
2 - vbMaximized

Eko Sugiharto, S.Kom

43

10. Klik tahan (drag) command Barang pada Data Environment ke bagian Detail (Section1) pada Data
Report

11. Sehingga tampilannya menjadi seperti berikut ini :

Eko Sugiharto, S.Kom

44

12. Modifikasi report dengan memindahkan objek Label ke bagian Page Header (Section2) dan mengatur
lebar masing-masing label sehingga menjadi seperti berikut ini :

13. Kita juga dapat menambahkan label pada bagian Report Header (Section4), mengatur Alignment
label, kita juga dapat menambahkan RptShape dan RptLine untuk membuat bingkai pada report yang
telah kita buat. Sehingga hasil akhirnya menjadi seperti berikut ini :

14. Beralih ke bagian Code, kemudian tambahkan kode berikut ini :


Private Sub DataReport_Terminate()
DELaporan.rsBarang.Close
End Sub

15. Simpan dengan nama LapBarang


16. Tambahkan Data Report baru dengan cara klik Project Data Report
17. Kemudian atur propertiesnya sesuai dengan ketentuan berikut ini :
Nama Objek
Properti
Nilai Pengaturan
DataReport1
Name
LapSupplier
Caption
Laporan Supplier
DataSource
DELaporan
DataMember
Supplier
GridX
10
GridY
10
WindowState
2 - vbMaximized
18. Desain report hingga tampilan akhirnya menjadi seperti berikut ini :

Eko Sugiharto, S.Kom

45

19. Pada bagian code, tambahkan kode berikut ini :


Private Sub DataReport_Terminate()
DELaporan.rsSupplier.Close
End Sub

20. Simpan dengan nama LapSupplier


21. Tambahkan pula Data Report baru untuk membuat laporan Pembelian Barang
22. Atur propertiesnya sesuai ketentuan berikut ini :
Nama Objek
Properti
Nilai Pengaturan
DataReport1
Name
LapBeli
Caption
Laporan Pembelian Barang
DataSource
DELaporan
DataMember
Pembelian
GridX
10
GridY
10
WindowState
2 - vbMaximized
23. Desain report hingga tampilan akhirnya menjadi seperti berikut ini :

24. Tambahkan kode berikut ini :


Private Sub DataReport_Terminate()
DELaporan.rsPembelian.Close
End Sub

25. Simpan dengan nama LapBeli


26. Terakhir tambahkan Data Report baru untuk membuat laporan Pengeluaran Barang
27. Atur propertiesnya sesuai ketentuan berikut ini :
Nama Objek
Properti
Nilai Pengaturan
DataReport1
Name
LapKeluar
Caption
Laporan Pengeluaran Barang
DataSource
DELaporan
DataMember
Pengeluaran
GridX
10
GridY
10
WindowState
2 - vbMaximized
28. Desain report hingga tampilan akhirnya menjadi seperti berikut ini :

Eko Sugiharto, S.Kom

46

29. Tambahkan kode berikut ini :


Private Sub DataReport_Terminate()
DELaporan.rsPengeluaran.Close
End Sub

30. Simpan dengan nama LapKeluar


Dan langkah terakhir adalah mengatur frmLogin sebagai Startup Project pada Project Properties
sebagai form awal yang tampil pada Program Aplikasi Persediaan Barang dengan cara klik Project
Project (StokBarang) Properties kemudian atur seperti contoh berikut ini :

Dan untuk menjalankan program aplikasi kita bisa menekan tombol F5 dengan catatan tabel admin
untuk field username dan password sudah diisi dengan username dan password yang digunakan untuk
proses Login. Pada contoh Tutorial ini username dan password adalah admin.

.: Semoga Bermanfaat :.
TERIMA KASIH

Eko Sugiharto, S.Kom

47

Anda mungkin juga menyukai