Modul Praktikum Visual Basic AdvanceBina Sarana Informatika
Disusun Oleh:
Syamsul Bakhri, S.KomMulia Rahmayu, S.Kom
Page 2 of 42
PERTEMUAN 1Penjelasan tugas,penentuan kelompok, penilaian tugas
Pertemuan ini menjelaskan ke siswa untuk mengerjakan sebuah projek program untuk nilai tugas, secara berkelompok (msl. 5 orang/kelompok). Pada saat mereka melakukan presentasi projek program, penilaian diambil secara individu dan kelompok.
Kriteria penilaian projek programPenlaian secara kelompok:
Penilaian database = 10% (Pembuatan Database, Tabel, Index) Penilaian form, coding dan report = 60% (Pembuatan form, Penggunaan
Objek dan Properties, Koneksi Database, Sintaks Program Dan Prosedur, Logika program)
Penilaian testing, presentasi = 30% (Eksekusi Program, Kesesuaian Tampilan, Cara Presentasi)
Penilaian secara individu (0-100):Nilai individu diketahui pada saat tanya jawab, ketika kelompok mereka melakukan presentasi.
Nilai rata-rata per individu=(total nilai kelompok + nilai individu) / 2.
Contoh: Database: 10% x 100=10Form. Coding, report = 60% x 100 = 60Testing, Presentasi = 30% x 100 = 30TOTAL NILAI KELOMPOK = 100NILAI INDIVIDU = 100Nilai rata-rata projek program per individu=(100+100)/2 =100
.
Page 3 of 42
Dengan detail penilaian kelompok seperti di bawah ini:
Minggu
Kemampuan yang diharapkan
Bahan Kajian Bentuk Pengajaran
Kriteria Penilaian
Bobot
1
Penjelasan tugas,penentuan
kelompok, penilaian tugas
Kesepakatan perkuliahan, diskusi, penjelasan tugas
Ceramah dan diskusi
2
Pembuatan database di mysql
via GUI
1. Konsep dasar database
2. Merancang database & table
3. Pengenalan perintah sql
Praktek dan diskusi
Pemahaman database,
perintah-perintah sql 10%
3-4
Merancang coding koneksi di modul,
form menu utama dan login
Membuat coding koneksi, form menu utama dan login
Praktek dan diskusi,
Pemahaman koneksi, mampu membuat form dan codingnya 10%
5-6
Membuat form barang dan form data user
beserta coding
1. Membuat form 2. Koneksi form dengan
database3. Modifikasi dengan
perintah sql
Praktek dan diskusi
Pemahaman koneksi, mampu membuat form dan codingnya
10%
7
Membuat struk pembayaran di crystal
report
Mendisain laporan Praktek dan diskusi
Mampu menggunakan
tools-tools crystal report
5%
8-9
Membuat Form Transaksi Penjualan
Membuat form transaksi penjualan sampai menampilkan struk pembayaran
Praktek dan diskusi
Mampu membuat form dan
codingnya
15%
10Membuat form ganti
password user Membuat form dan coding Praktek dan
diskusi Kreatifitas
menambah utility program
11 -12 Membuat laporan penjualan harian,
mingguan, bulanan
Mendisain laporan harian, mingguan dan bulanan
Praktek dan diskusi
Kreatifitas mendesign
laporan 10%
13 UJIAN TENGAH SEMESTER (UTS)
14
Membuat Form Laporan
Membuat form laporan yang dapat menampilkan laporan harian, mingguan, bulanan
Praktek dan diskusi
Mampu membuat form dan
codingnya
10%
15Review Review bisa juga dilakukan di
setiap akhir per pertemuan
Page 4 of 42
16 – 27
Presentasi projek program berkelompok
1. Cara presentasi yang baik
2. Evaluasi pembuatan program
presentasi Penilaian Individu dan Kelompok
30%
28 UJIAN AKHIR SEMESTER(UAS)
Contoh projek program: Pembayaran, Simpan-pinjam, Pembelian, Penggajian, Peminjaman – pengembalian, Penerimaan karyawan, Absensi pegawai, Persedian barang, kunjungan pasien, perpustakaan dan lain-lain.
PERTEMUAN 2DATABASE MYSQL
Membuat database di mysql Dalam pembuatan basis data pada MySQL software yang digunakan adalah : apache2triad dll. mysql-connector-odbc-3.51 atau yang 5.1.10-win32 (untuk mengkoneksikan
database dengan software pemrograman. Pilih saja salah satu mana yang support)
Software pemrograman yang dipakai penulis untuk pembelajaran ini adalah Visual Basic 6.0 mysql connector odbcnya yang 5.1Normalisasi bentuk ke 3
Nama databasenya: penjualan_nim Buatlah Tabel-tabel dibawah ini
Nama tabel: BarangField name Data type Field size Keterangan
Kodebarang Varchar 7 Primary KeyNamabarang Varchar 20Satuan Varchar 10Stok Int Hargasatuan Double Langsung Isi datanya:
Kodebarang*NamabarangSatuanStokhargasatuan
JumlahjualSubtotal
Notransaksi**Kodebarang**
Notransaksi *Tgljualtotalbayar
kodeuser**
Kodeuser*Namauserpasswordlevel
Barang Detailtransaksi Transaksi
Login
Page 5 of 42
Nama tabel:DetailTransaksiField name Data type Field size Keterangan
Notransaksi Varchar 10 Foreign KeyJumlahbeli Int Subtotal Double Kodebarang Varchar 7 Foreign Key
Nama tabel:TransaksiField name Data type Field size Keterangan
Notransaksi Varchar 10 Primary KeyTgljual DateTotalbayar Double Kodeuser Varchar 3 Foreign Key
Nama tabel:LoginField name Data type Field size Keterangan
Kodeuser Varchar 3 Primary KeyNamauser Varchar 50Password Varchar 6Akseslevel Varchar 4Isi datanya:
PERTEMUAN 3,4MERANCANG CODING KONEKSI, FORM MENU UTAMA DAN LOGIN
Aktifkan Microsoft Visual Basic 6.0 – Pilih STANDART EXE
Page 6 of 42
Tambahkan terlebih dahulu Reference ADO Library ke dalam project anda:Ini berkaitan dengan listing koneksi di module, biasanya ketika diketik ...as new ADODB...., ADODB nya tidak muncul.Klik menu project – reference – arahkan scrollnya ke bawah cari Microsoft ActiveX Data Objects 2.5 Library(bisa juga 2.6/2.7/2.8) – ceklist – ok
Ketika membuka code, jika terdapat tampilan option explicit artinya setiap variabel yang dibuat harus di deklarasikan. Contoh: dim k as string
Untuk menghilangkannya pilih menu tools – options – hilangkan ceklist di require variable declaration kemudian exit, tidak usah disimpan. Lalu buka kembali vb yang baru. Lihat tampilan code maka option explicit sudah tidak ada.
Page 7 of 42
Selanjutnya membuat coding koneksi di dalam modul.Klik menu project – add module – open – Ketikan script berikut pada modul untuk membuka koneksi database.
MODUL1
'MENDEFINISIKAN OBJEKPublic KON As New ADODB.ConnectionPublic rsbrg As ADODB.RecordsetPublic rsuser As ADODB.RecordsetPublic rsdetail As ADODB.RecordsetPublic rstrans As ADODB.RecordsetPublic rstemp As ADODB.Recordset
Sub koneksi()'MEMBUKA OBJEKSet KON = New ADODB.ConnectionSet rsbrg = New ADODB.RecordsetSet rsuser = New ADODB.RecordsetSet rsdetail = New ADODB.RecordsetSet rstrans = New ADODB.RecordsetSet rstemp = New ADODB.RecordsetKON.ConnectionString = "driver={mysql odbc 5.1 driver};server=localhost;uid=root;pwd=password;db=penjualan_nim;"KON.OpenEnd Sub
A. MEMBUAT FORM MENU UTAMA (name: menu)
Pilih menu TOOLS – menu editorCAPTION - NAMEFILE – MNFILEBARANG – MNBARANGDATA USER – MNUSERTRANSAKSI – MNTRANSAKSILAPORAN – MNLAPORANUTILITY – MNUTILITYGANTI PASSWORD – MNGPLOGOUT – MNLOGOUT
Ket: mulai dari ...= "driver={mysql odbc 5.1 driver};server=localhost;uid=root;pwd=password;db=penjualan_nim;" ini diketik manual. Penulis tidak membuat koneksi via adodc/ seting odbc
Page 8 of 42
untuk objek statusbar, Tambahkan komponen ini:
Listing menu utama:
Private Sub MNBARANG_Click()menu.Hidebarang.Show 'ke form barangEnd Sub
Output menu utama
StatusBar (name: STBAR)Klikkanan – propertiesTab panel - Insert panel 3 x
Page 9 of 42
Private Sub MNGP_Click()menu.HideG_USER.Show 'ke form ganti password userEnd Sub
Private Sub MNLAPORAN_Click()menu.HideForm3.Show 'ke form laporanEnd Sub
Private Sub mnlogout_Click()Me.Visible = Falselogin.Show 'ke form loginEnd Sub
Private Sub MNTRANSAKSI_Click()menu.HideForm1.Show 'ke form transaksiEnd Sub
Private Sub MNUSER_Click()menu.HideDATAUSER.Show 'ke form datauserEnd Sub
B. FORM LOGIN (name : login)
Listing form login:
Private Sub CMDBERSIH_Click()txtuser = " "txtpassword = " "txtuser.SetFocusEnd Sub
Private Sub CMDTUTUP_Click()EndEnd Sub
Private Sub Form_Activate()txtuser.Enabled = True
Output login
Page 10 of 42
txtpassword.Enabled = Falsetxtuser.SetFocustxtuser.MaxLength = 3txtpassword.PasswordChar = " * "txtlevel.Visible = FalseEnd Sub
Private Sub txtpassword_KeyPress(KeyAscii As Integer)KeyAscii = Asc(UCase(Chr(KeyAscii)))If KeyAscii = 27 Then End ‘ 27=esc,jika tekan esc maka keluar. 13=enterDim Kodeuser As StringDim user As StringIf KeyAscii = 13 Then Call koneksi rsuser.Open "Select * from login where kodeuser =' " & txtuser & " ' and Password=' " & txtpassword & " ' ", KON If rsuser.EOF Then b = b + 1 If 1 - b = 0 Then MsgBox "Kesempatan ke " & b & " Salah" txtpassword = "" txtpassword.SetFocus ElseIf 2 - b = 0 Then MsgBox "Kesempatan ke " & b & " Salah" txtpassword = "" txtpassword.SetFocus ElseIf 3 - b = 0 Then MsgBox "Kesempatan ke " & b & " Salah" Unload Me End If Else txtlevel = rsuser!akseslevel txtlevel.Enabled = False Me.Visible = False menu.Show menu.stbar.Panels(1).Text = login.txtuser ‘menu adl name dari form menu menu.stbar.Panels(2).Text = login.txtlevel
menu.stbar.Panels(3).Visible = False If menu.stbar.Panels(2).Text = "user" Then menu.MNUSER.Enabled = False
ElseIf menu.stbar.Panels(2).Text = "admin" Then menu.MNUSER.Enabled = True
Page 11 of 42
End If End IfEnd IfEnd Sub
Private Sub txtuser_KeyPress(KeyAscii As Integer)KeyAscii = Asc(UCase(Chr(KeyAscii)))If KeyAscii = 27 Then End ‘27= escIf KeyAscii = 13 Then Call koneksirsuser.Open "Select kodeuser from login where kodeuser =' " & txtuser & " ' ", KON If rsuser.EOF Then a = a + 1 If 1 - a = 0 Then ‘'chr(13) = kalimat setelahnya otomatis ke bawah MsgBox "Kesempatan ke " & a & " Salah" & Chr(13) & _ "Nama ' " & txtuser & " ' tidak dikenal" txtuser = " " txtuser.SetFocus ElseIf 2 - a = 0 Then MsgBox "Kesempatan ke " & a & " Salah" & Chr(13) & _ "Nama ' " & txtuser & " ' tidak dikenal" txtuser = "" txtuser.SetFocus ElseIf 3 - a = 0 Then MsgBox "Kesempatan ke " & a & " Salah" & Chr(13) & _ "Nama '" & txtuser & "' tidak dikenal" & Chr(13) & _ "Kesempatan habis, Ulangi dari awal" Unload Me End If Else txtuser.Enabled = False txtpassword.Enabled = True txtpassword.SetFocus End IfEnd IfEnd Sub
PERTEMUAN 5,6MEMBUAT FORM BARANG DAN DATA USER
A. Form Barang
Keterangan Name pada properties:
Cmdinput : INPUT
Cmdtutup : TUTUP
Tkode : KD BARANG
Tnama : NAMA BARANG
Cmbsat : SATUAN
Tstok : STOK
Tharga : HARGA
Grid : MSHFLEXGRID
Page 12 of 42
Outputnya setelah di tekan INPUT dan mengisi data baru:
Logika jalannya program:1. Pertama run semua textbox dan combo nonaktif, data barang tampil di grid.
INPUT DAN TUTUP aktif.2. Tekan INPUT semua textbox, combo aktif. INPUT berubah jadi SIMPAN,
TUTUP berubah jadi BATAL. Kursor muncul di kd barang.
Page 13 of 42
3. Ketikan kd barang. Jika sudah ada tampil nama,satuan,stok,harga. Kd barang nonaktif. SIMPAN berubah jadi UPDATE. Lakukan perubahan data barang untuk menyimpan tekan UPDATE, tekan BATAL untuk membatalkan perubahan data barang kembali ke kondisi no. 1
4. Ketikan kd barang. Jika tidak ada tampil pesan kode barang tidak ada. Kursor pindah ke nama barang. Isikan data barang baru, tekan SIMPAN untuk menyimpan, tekan BATAL untuk membatalkan dan kondisi kembali ke no.1
5. Tekan TUTUP keluar dari program kembali ke menu utama.
LISTING:
Sub isicsat()cmbsat.AddItem "UNIT"cmbsat.AddItem "PCS"End Sub
Sub NONAKTIF()Dim kontrol As ControlFor Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Enabled = FalseNextcmbsat.Enabled = FalseEnd Sub
Sub aktif()Dim kontrol As ControlFor Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Enabled = TrueNextcmbsat.Enabled = TrueEnd Sub
Sub bersih()For Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Text = " "Nextcmbsat = " "End Sub
Sub tampilgrid()'buka tabel barang duluCall koneksirsbrg.Open "select * from barang order by kodebarang", KON'atur grid utk tabel brg
Page 14 of 42
Set grid.DataSource = rsbrggrid.ColWidth(0) = 0grid.ColWidth(1) = 1000grid.ColWidth(2) = 1500grid.ColWidth(3) = 500grid.ColWidth(4) = 500grid.ColWidth(5) = 1000End Sub
Sub simpanbrg()simpan = "insert into barang values(' " & tkode & " ', " & _" ' " & tnama & " ', " & _" ' " & cmbsat & " ', " & _" ' " & tstok & " ', " & _" ' " & tharga & " ') "Set rsbrg = KON.Execute(simpan)End Sub
Sub updatebrg()Update = "update barang set " & _"namabarang=' " & tnama & " ', " & _"satuan=' " & cmbsat & " ', " & _"stok=' " & tstok & " ', " & _"hargasatuan=' " & tharga & " ' where kodebarang=' " & tkode & " ' "Set rsbrg = KON.Execute(Update)End Sub
Private Sub cmdinput_Click()If cmdinput.Caption = "INPUT" Thencmdinput.Caption = "SIMPAN"cmdtutup.Caption = "BATAL"Call aktiftkode.SetFocusElseIf cmdinput.Caption = "SIMPAN" ThenCall simpanbrgCall tampilgridcmdinput.Caption = "INPUT"cmdtutup.Caption = "TUTUP"Call bersihCall NONAKTIFElseIf cmdinput.Caption = "UPDATE" ThenCall updatebrgCall tampilgridCall NONAKTIFcmdinput.Caption = "INPUT"cmdtutup.Caption = "TUTUP"
Page 15 of 42
End IfEnd Sub
Private Sub cmdtutup_Click()If cmdtutup.Caption = "TUTUP" ThenUnload Memenu.ShowElseIf cmdtutup.Caption = "BATAL" ThenCall bersihCall NONAKTIFcmdtutup.Caption = "TUTUP"cmdinput.Caption = "INPUT"End IfEnd Sub
Private Sub Form_Activate()Call bersihCall NONAKTIFCall isicsatCall tampilgridEnd Sub
Private Sub Form_Load()Call koneksiEnd Sub
Private Sub grid_KeyPress(KeyAscii As Integer)'agar bisa hapus per record didalam grid.'caranya klik kode di grid yang akan dihapus tekan backspace
a = grid.Row kode = grid.TextMatrix(a, 1) Call koneksirsbrg.Open "select * from barang ", KON With rsbrgIf KeyAscii = 8 Then If Not (.BOF And .EOF) Then h = MsgBox("Bener mau dihapus ?", vbQuestion + vbYesNo, "--TaNYa--") If h = vbYes Then hapus = "delete from barang where kodebarang=' " & kode & " ' " Set rsbrg = KON.Execute(hapus) End IfEnd IfEnd If
Page 16 of 42
End WithCall tampilgridgrid.RefreshEnd Sub
Private Sub tharga_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Thencmdinput.SetFocusEnd IfEnd Sub
Private Sub tkode_KeyPress(KeyAscii As Integer)Call koneksiKeyAscii = Asc(UCase(Chr(KeyAscii)))If KeyAscii = 13 Thenrsbrg.Open "SELECT * FROM barang WHERE Kodebarang=' " & tkode & " ' ", KONWith rsbrg If .BOF And .EOF Then psn = MsgBox("KD " + tkode + " TDK ADA", vbInformation, "KONF") tnama = " " cmbsat = " " tstok = " " tharga = " " tnama.SetFocus Else tkode.Enabled = False bhapus.Enabled = True tnama = .Fields("Namabarang") cmbsat = .Fields("SATUAN") tstok = .Fields("stok") tharga = .Fields("hargaSATUAN") cmdinput.Caption = "UPDATE"End IfEnd WithEnd IfEnd Sub
Private Sub tnama_KeyPress(KeyAscii As Integer)KeyAscii = Asc(UCase(Chr(KeyAscii)))If KeyAscii = 13 Thencmbsat.SetFocusEnd IfEnd Sub
Private Sub tstok_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then
Page 17 of 42
tharga.SetFocusEnd IfEnd Sub
B. Form Data User
PERTEMUAN 7,8,9MEMBUAT STRUK PEMBAYARAN DAN FORM TRANSAKSI PENJUALAN
A. Struk Pembayaran
Untuk form data user caranya sama dengan Data Barang. Silahkan kerjakan sendiri
Page 18 of 42
Untuk menggunakan crystal report, penulis sebelumnya menginstal terlebih dahulu, yang penulis gunakan crystal report versi 8.5. Buka Crystal Report melalui langkah-langkah dibawah ini:1. Klik Start2. Pilih All Programs3. Klik Crystal Reports
4. Pilih Using as a blank report5. Lalu Klik OkMaka akan tampil Data Explorer seperti gambar dibawah ini,
6. Pilih ODBC – Create New Data Source – Add
7.
Page 19 of 42
8.
9.
10.Sesuaikan dgn nama database masing-masing
Page 20 of 42
11. Double klik/ Add semua tabel yang ada di folder tutorial lalu close
12.
Page 21 of 42
Bila belum ada garis relasinya tekan link pilih smart link. Klik ok. Tanda panah di mistar berguna untuk memudahkan pengaturan penempatan objek field,garis dll. Caranya cukup di klik di mistar sajaMenampilkan field explorer: MENU INSERT – FIELD OBJECT
Field Tabel Tgljual → transaksi
Kodeuser → transaksi
Page 22 of 42
Kodebarang → barang
Namabarang → barang
hargasatuan → barang
jumlahbeli → detailtransaksi
subtotal → detailtransaksi
Pindahkan group#1 Name ke posisi page header atur seperti di bawah ini. Untuk garis ada di menu insert – line. Bantu dengan panah di mistar utk penempatan. Toolbar utk membuat label. Save dengan nama: cetak
Grand total:Menu Insert – GrandtotalPilih subtotal dari detailtransaksi
Kendala yang mungkin terjadi ketika crystal report di preview/run: Myodbc error.... solusinya: 1. Buka regedit ( Start – Run – Regedit – Enter )2. Cari : HKEY_CURRENT_USER\Software\Seagate Software\Crystal Reports\DatabaseOptions\ODBC3. Buat key baru : Klik kanan pada ODBC, pilih New, Key4. Beri Nama : outerjoin5. Di Dalam Key OuterJoin, buat New String Value6. Beri nama : SQL2outerjoin7. Klik kanan pada String Value SQL2outerjoin, pilih Modify8. Isikan : libmyodbc3 (untuk myodbc versi 3) atau libmyodbc5 (untuk myodbc versi 5)
Setelah di PRIVIEW kosong tidak ada isi datanya. Solusinya:Cek tabel-tabelnya di database tipedata, size, isi data mungkin tidak sama. Contoh; Antara kode barang di tabel barang dengan tabel detail mungkin tidak sama type, size atau isi datanya di tabel yang satu ada di tabel lain yang berkaitan tidak ada.
No transaksi :Menu insert – groupPilih notransaksi dari tabel transaksi
Page 23 of 42
B. Form Transaksi PenjualanKomponen di form transaksi:INPUT, SIMPAN, BATAL, TUTUP, LIST BRG objeknya command buttonTimer, textbox, label, listbox, gridnya pakai MSHFLEXGRID
Outputnya:
MSHFLEXGRID
TXTUSERTXTNOTRANS
TXTTGL
Keterangan Name Pada Properties:List1 : LIST,Kode barang : TXTKDBRG Nama barang : TXTNMBRG, Satuan : TXTSATUAN, Harga : TXTHARGA, Jumlah Jual : TXTJMHJUAL, Subtotal : TXTSUBTOTAL,GRID,Uang Bayar : TXTBAYAR, Kembalian : TXTKEMBALIANInput : cmdinputSimpan : cmdsimpanBatal : cmdbatalTutup : Cmdtutup
Component Crystal Report Control. Dikasih name: CR
Timer
LBAYAR
Page 24 of 42
Logika Jalannya program:1. Pertama run tombol aktif: INPUT sama TUTUP selain itu nonaktif, tgl otomatis
muncul.2. Tekan INPUT notrans muncul otomatis dan tombol SIMPAN, BATAL aktif.
Sedangkan INPUT, TUTUP nonaktif.3. Kode barang bisa langsung di input di txtkdbrg lalu enter nama barang, satuan
harga tampil4. Atau di klik tombol list brg, tampil list barangnya klik salah satu barang maka kode
barang, nama barang,satuan, harga tampil. 5. Kursor langsung muncul di jumlah jual, input jumlah jual lalu enter muncul kotak
pesan
6. Pilih yes ulangi no. 3 atau 4, pilih no input uang bayar. 7. Jika uang bayar kurang muncul pesan8. Selain itu muncul kembalian langsung TEKAN TOMBOL SIMPAN atau BATAL.9. Jika SIMPAN tampil struk pembayaran. BATAL kembali semula.10. Di dalam grid bisa juga membatalkan salah satu barang yang di beli, caranya: klik
di dalam grid, pake panah atas bawah utk memilih barangnya lalu tekan backspace.
11.TEKAN TUTUP keluar dari program transaksi.
LISTINGNYA:
Dim ambilstok As Boolean
Page 25 of 42
Sub cetak()Call koneksicr.SelectionFormula = "Totext({TRANSAKSI.notransaksi})=' " & TXTNOTRANS & " ' " cr.ReportFileName = App.Path & "\cetak.rpt" cr.WindowState = crptMaximized cr.RetrieveDataFiles cr.Action = 1End Sub
Sub isilist()'masukin data barang ke listrsbrg.Open "select * from barang", KONDo While Not rsbrg.EOF List.AddItem rsbrg!kodebarang & Space(3) & rsbrg!namabarang & Space(3) & rsbrg!stok rsbrg.MoveNext LoopEnd Sub
Sub SEMULA()Call bersihCall NONAKTIFCMDSIMPAN.Enabled = FalseCMDINPUT.Enabled = TrueCMDTUTUP.Enabled = TrueCMDBATAL.Enabled = Falselist.Enabled = FalseList.Visible = FalseEnd Sub
Sub NONAKTIF()Dim kontrol As ControlFor Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Enabled = FalseNextList.Enabled = FalseEnd Sub
Sub aktif()Dim kontrol As ControlFor Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Enabled = TrueNextList.Enabled = TrueTXTTGL.Enabled = FalseTXTUSER.Enabled = False
Page 26 of 42
End Sub
Sub bersih()Dim kontrol As ControlLBAYAR.Caption = "Bayar"Call hapusTEMP
For Each kontrol In Me.ControlsIf TypeOf kontrol Is TextBox Then kontrol.Text = " "NextTXTUSER = menu.stbar.Panels(1).TextEnd Sub
Sub tampilgrid()Call koneksi'buka tabel barangrstemp.Open "select * from TEMP order by kodebarang", KON'atur grid utk tabel TEMPSet grid.DataSource = rstempgrid.ColWidth(0) = 50grid.TextMatrix(0, 1) = "Kode Barang"grid.ColWidth(1) = 1000grid.TextMatrix(0, 2) = "Nama Barang"grid.ColWidth(2) = 1300grid.TextMatrix(0, 3) = "Satuan"grid.ColWidth(3) = 1300grid.TextMatrix(0, 4) = "HARGA "grid.ColWidth(4) = 1300grid.TextMatrix(0, 5) = "Jumlah Jual"grid.ColWidth(5) = 1000grid.TextMatrix(0, 6) = "Subtotal"grid.ColWidth(6) = 1000End Sub
Sub bikinTEMP()' bikin tabel TEMPbikin = "create table TEMP(kodebarang varchar(7),nmbrg varchar(25),sat varchar(10),hrg double,qty int, subttl double)"Set rstemp = KON.Execute(bikin)tampilgridEnd Sub
Sub hapusTEMP()hapus = "drop table if exists TEMP"Set rstemp = KON.Execute(hapus)
Page 27 of 42
End Sub
Sub simpanTEMP()Dim simpan As Stringsimpan = "insert into TEMP() values(' " & TXTKDBRG & " ', " & _" ' " & TXTNMBRG & " ', " & _" ' " & TXTSATUAN & " ', " & _" ' " & TXTHARGA & " ', " & _" ' " & TXTJMHJUAL & " ', " & _" ' " & TXTSUBTOTAL & " ') "Set rstemp = KON.Execute(simpan, , adCmdText)End Sub
Sub nomor()TXTTGL = Format(Date, "DD/MM/YYYY")Dim cari As String'buka tabel transaksiCall koneksirstrans.Open "SELECT * FROM TRANSAKSI ORDER BY NOTRANSAKSI DESC LIMIT 1; " , KONWith rstransIf .EOF ThenTXTNOTRANS = Format(Date, "yymm") + "001"ElseTXTNOTRANS = Val(.Fields("notransaksi")) + 1End IfEnd WithEnd Sub
Sub simpantransaksijual()TXTTGL = Format(Date, "YYYY/MM/DD")simpan = "INSERT INTO transaksi() VALUES(' " & TXTNOTRANS & " ', ' " & TXTTGL & " ', ' " & Val(LBAYAR) & " ', ' " & TXTUSER & " ')"Set rstrans = KON.Execute(simpan)End Sub
Sub simpandetailjual()Dim simpan, fak, kdbrg As StringDim jmhjual As IntegerDim subttl As Double
For a = 1 To (grid.Rows - 1)fak = TXTNOTRANSkdbrg = grid.TextMatrix(a, 1) 'kdbrg berada di kolom 1jmhjual = grid.TextMatrix(a, 5) 'jmhjual berada di kolom 5subttl = grid.TextMatrix(a, 6) 'subtotal berada di kolom 6
'variabel fak,kdbrg,jmhjual,subttl utk data masukan ke tabel detailjual
Page 28 of 42
simpan = "insert into detailTRANSAKSI()values(' " & fak & " ',' " & Val(jmhjual) & " ', ' " & Val(subttl) & " ', ' " & kdbrg & " ') "Set rsdetail = KON.Execute(simpan)Next aEnd Sub
Sub ubahstok()Call koneksiIf ambilstok = True Then
kurang = "update barang set stok=stok - ' " & Val(TXTJMHJUAL) & " ' where kodebarang=' " & TXTKDBRG & " ' "Set rsbrg = KON.Execute(kurang)
ElseIf ambilstok = False Thentambah = "update barang set stok=stok + ' " & Val(TXTJMHJUAL) & " ' where kodebarang=' " & TXTKDBRG & " ' "Set rsbrg = KON.Execute(tambah)
End IfEnd Sub
Private Sub clist_Click()List.Visible = TrueEnd Sub
Private Sub CMDBATAL_Click()Call SEMULACall hapusTEMPEnd Sub
Private Sub CMDINPUT_Click()Call aktifTXTNOTRANS.Enabled = FalseCMDINPUT.Enabled = FalseCMDTUTUP.Enabled = FalseCMDSIMPAN.Enabled = TrueCMDBATAL.Enabled = Trueclist.Enabled = TrueCall hapusTEMPCall bikinTEMPCall nomorTXTKDBRG.SetFocusEnd Sub
Private Sub CMDSIMPAN_Click()Call simpantransaksijual
Page 29 of 42
Call simpandetailjualx = MsgBox("cetak?", vbYesNo, "cetak")If x = vbYes ThenCall cetaky = "delete from temp"Set rstemp = KON.Execute(y)Call tampilgridCall SEMULAElseCall SEMULAEnd IfEnd Sub
Private Sub CMDTUTUP_Click()Call hapusTEMPUnload Memenu.ShowEnd Sub
Private Sub Form_Activate()TXTNOTRANS.Enabled = FalseCall SEMULATXTUSER = menu.stbar.Panels(1).TextEnd Sub
Private Sub Form_Load()Call koneksiambilstok = TrueCall isilistEnd Sub
Private Sub grid_KeyPress(KeyAscii As Integer)'agar bisa hapus per record didalam grid. caranya klik di grid lalu pake panah'atas bawah utk pilih record yg akan dihapus lalu tekan backspace
a = grid.Row kode = grid.TextMatrix(a, 1) Call koneksirstemp.Open "select * from TEMP", KON With rstempIf KeyAscii = 8 Then If Not (.BOF And .EOF) Then h = MsgBox("Bener mau dihapus ?", vbQuestion + vbYesNo, "--TaNYa--") If h = vbYes Then
Page 30 of 42
hapus = "delete from TEMP where kodebarang=' " & kode & " ' " Set rstemp = KON.Execute(hapus) ambilstok = False Call ubahstok Me.List.Refresh grid.Refresh TXTKDBRG.Text = " " TXTNMBRG.Text = " " TXTSATUAN.Text = " " TXTHARGA.Text = " " TXTJMHJUAL.Text = " " TXTSUBTOTAL.Text = " " ttl = Val(LBAYAR.Caption)
x = Val(grid.TextMatrix(a, 6)) ttl = ttl - x
LBAYAR.Caption = ttl End If End IfEnd IfEnd WithCall tampilgridgrid.RefreshEnd Sub
Private Sub List_Click()Dim brg As Stringbrg = "select * from barang where kodebarang=' " & Left(List, 7) & " ' "Set rsbrg = KON.Execute(brg)
TXTKDBRG = rsbrg!kodebarangTXTNMBRG = rsbrg!namabarangTXTSATUAN = rsbrg!SATUANTXTHARGA = rsbrg!HARGASATUANTXTJMHJUAL.SetFocusList.Visible = FalseEnd Sub
Private Sub Timer1_Timer()TXTTGL = Format(Date, "DD/MM/YYYY")End Sub
Private Sub TXTBAYAR_KeyPress(KeyAscii As Integer)
Page 31 of 42
If KeyAscii = 13 Then If Val(LBAYAR) > Val(TXTBAYAR) Then MsgBox "uang bayar kurang" TXTBAYAR.SetFocus TXTKEMBALIAN.Enabled = False Else TXTKEMBALIAN.Enabled = True TXTKEMBALIAN = Val(TXTBAYAR) - Val(LBAYAR) CMDSIMPAN.SetFocus End IfEnd IfEnd Sub
Private Sub TXTJMHJUAL_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Call koneksirsbrg.Open "select * from barang where kodebarang=' " & TXTKDBRG & " ' ", KON If Val(TXTJMHJUAL) > rsbrg!stok Then MsgBox "stok kurang" TXTJMHJUAL.SetFocus Exit Sub ElseTXTSUBTOTAL = Val(TXTJMHJUAL) * Val(TXTHARGA)ambilstok = TrueCall ubahstokCall simpanTEMPCall tampilgrid
ttl = 0For a = 1 To (grid.Rows - 1) x = Val(grid.TextMatrix(a, 6)) ttl = ttl + x Next aLBAYAR.Caption = ttl
ambilstok = True
t = MsgBox("Mau tambah pembelian lagi?", vbQuestion + vbYesNo, "Konfirmasi") If t = vbYes Then TXTKDBRG = " " TXTKDBRG.SetFocus TXTNMBRG = " " TXTSATUAN = " "
Page 32 of 42
TXTHARGA = " " TXTJMHJUAL = " " TXTSUBTOTAL = " " Else Me.Refresh grid.Refresh TXTBAYAR.SetFocusEnd IfEnd IfEnd IfEnd Sub
Private Sub TXTKDBRG_KeyPress(KeyAscii As Integer)Call koneksiKeyAscii = Asc(UCase(Chr(KeyAscii)))If KeyAscii = 13 Thenrsbrg.Open "SELECT * FROM barang WHERE Kodebarang=' " & TXTKDBRG & " ' ", KONWith rsbrg If .BOF And .EOF Then psn = MsgBox("KD" + TXTKDBRG + "TDK ADA", vbInformation, "KONF") TXTKDBRG = " " TXTKDBRG.SetFocus Else TXTNMBRG = .Fields("Namabarang") TXTSATUAN = .Fields("SATUAN") TXTHARGA = .Fields("hargaSATUAN") TXTJMHJUAL.Enabled = True TXTJMHJUAL.SetFocusEnd IfEnd WithEnd IfEnd Sub
PERTEMUAN 10MEMBUAT FORM GANTI PASSWORD USER
Page 33 of 42
Logika jalannya program:1. Pertama run yang aktif hanya password lama. Kode user akan otomatis terisi
sesuai dengan login.2. Kursor muncul di password lama. Ketikan password lama lalu enter jika tidak ada,
muncul pesan (password ..... tidak ada). Jika ada, kursor pindah ke password baru.
3. Ketikan password baru, enter. Ketikan konfirmasi password baru lalu enter. Jika isi password baru dan konfirmasi password tidak sama, muncul pesan: (konfirmasi dan password baru berbeda). Jika sama, muncul pesan:(password telah diupdate).
4. Tekan TUTUP untuk keluar kembali ke menu utama. Untuk membatalkan tekan TUTUP aja deh.
Listingnya:
Private Sub BTUTUP_Click()Unload Memenu.ShowEnd Sub
Private Sub Form_Activate()For Each k In Me.ControlsIf TypeOf k Is TextBox Thenk.Enabled = FalseEnd IfNextTKDUSER = menu.stbar.Panels(1).TextTLAMA.Enabled = TrueTLAMA.SetFocusTLAMA.PasswordChar = " * "TBARU.PasswordChar = " * "
Name:
Tkduser : kode userTlama : passwd lamaTbaru : passwd baruTkonf : konfirmasi passwdBtutup : TUTUP
Outputnya:
Page 34 of 42
TKONF.PasswordChar = " * "End Sub
Private Sub TBARU_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenTKONF.Enabled = TrueTKONF.SetFocusEnd IfEnd Sub
Private Sub TKONF_KeyPress(KeyAscii As Integer)Call koneksiIf KeyAscii = 13 ThenIf TKONF <> TBARU ThenMsgBox "konfirmasi dan password baru berbeda"Elsersuser.Open "update LOGIN set password=' " & TKONF & " ' WHERE kodeuser=' " & TKDUSER & " ' ", KONMsgBox "password telah diupdate"Form_ActivateTLAMA = " "End IfEnd IfEnd Sub
Private Sub TLAMA_KeyPress(KeyAscii As Integer)Call koneksiIf KeyAscii = 13 Thenrsuser.Open "SELECT * FROM LOGIN WHERE password=' " & TLAMA & " ' ", KONIf rsuser.EOF ThenMsgBox "password " + TLAMA + " tidak ada"TLAMA.SetFocusElseTBARU.Enabled = TrueTBARU.SetFocusEnd IfEnd IfEnd Sub
PERTEMUAN 11,12,13MEMBUAT LAPORAN PENJUALAN HARIAN, MINGGUAN, BULANAN
Page 35 of 42
A. Laporan penjualan harian
Di pertemuan 7 pembuatan struk pembayaran, sudah membuat koneksi odbc dengan nama tutorial. Berikutnya akan kita gunakan kembali ODBC: tutorial.Buka crystal report, pilih as a blank report, di data explorer klik Add/double klik tabel barang, detailtransaksi, login, transaksi
Buat design laporan harian seperti di bawah ini hampir sama dengan struk pembayaran (save as saja dari cetak.rpt):
Field Tabel Tgljual → transaksi
Page 36 of 42
Kodeuser → transaksi
Kodebarang → barang
Namabarang → barang
hargasatuan → barang
jumlahbeli → detailtransaksi
subtotal → detailtransaksi
Bedanya dengan struk pembayaran di posisi group #1Name notransaksi
B. Laporan penjualan mingguan
Untuk mingguan, juga tinggal di save as dari laporan harian, lalu tambahkan tanggal jual dari tabel transaksi. Sedangkan untuk tanggal sekarang gunakan formula fields
Grand total:Menu Insert – GrandtotalPilih subtotal dari detailtransaksi
No transaksi :Menu insert – groupPilih notransaksi dari tabel transaksi
Page 37 of 42
– new – isikan tanggal di formula name – di formula editor ketikan CurrentDate atau double klik seperti gambar di bawah ini – lalu simpan.
C. Laporan penjualan bulanan
Lalu drag tanggal yang sudah jadi ke page header
Page 38 of 42
Untuk laporan bulanan tinggal di save as dari laporan MINGGUAN, lalu tambahkan @BULAN dan @tanggal.
Tempatnya sama di formula editor, menggunakan 2 fungsi Month(untuk menghasilkan bulan) dan monthName(untuk output bulannya nama).
PERTEMUAN 14MEMBUAT FORM LAPORAN
Untuk tahun fungsi year
Page 39 of 42
A. Form Laporan
Listingnya:
Private Sub Bkeluar_Click()Unload Memenu.ShowEnd Sub
Private Sub CBULAN_KeyPress(KeyAscii As Integer)If KeyAscii = 27 Then Unload MeEnd Sub
'LAP HARIANPrivate Sub CHARIAN_Click() 'panggil laporan yang tanggalnya = charian CR.SelectionFormula = "Totext ({ TRANSAKSI.TglJUAL})=' " & CHARIAN & " ' " CR.ReportFileName = App.Path & "\Lap_HARIAN.rpt" CR.WindowState = CRptMaximized CR.RetrieveDataFiles
Outputnya:
Crystal Report
Keterangan Name pada Properties :Combo1 : CharianCombo2 : CmingguawalCombo3 : CmingguakhirCombo4 : CbulanCombo5 : CtahunCrystal Report : CR
Page 40 of 42
CR.Action = 1End Sub
Private Sub CHARIAN_KeyPress(KeyAscii As Integer)If CHARIAN = " " Or KeyAscii = 27 Then Unload MeEnd Sub
'LAP MINGGUANPrivate Sub CMINGGUAKHIR_Click() 'cegah data kosong di CMINGGUAWAL dan cMINGGUAKHIR If CMINGGUAWAL = " " Then MsgBox "Tanggal awal kosong", , "Informasi" CMINGGUAWAL.SetFocus Exit Sub End If
'panggil laporan yang tanggal awalnya=CMINGGUAWAL dan tanggal akhirnya = CMINGGUAKHIR
CR.SelectionFormula = "{TRANSAKSI.TglJUAL} in date (" & CMINGGUAWAL.Text & ") to date (" & CMINGGUAKHIR.Text & ")" CR.ReportFileName = App.Path & "\Lap_Mingguan.rpt" CR.WindowState = CRptMaximized CR.RetrieveDataFiles CR.Action = 1End Sub
Private Sub CMINGGUAWAL_KeyPress(KeyAscii As Integer)If KeyAscii = 27 Then Unload MeEnd Sub
'LAP BULANANPrivate Sub CTAHUN_Click()'buka database Call koneksi
'cari data yang tanggal dan bulannya dipilih di CBULAN dan CTAHUN
rstrans.Open "select * from TRANSAKSI where month(TGLJUAL)=' " & Val(CBULAN) & " ' and year(TGLJUAL)=' " & (CTAHUN) & " ' ", KON
'jika tidak cocok, munculkan pesan If rstrans.EOF Then MsgBox "Data tidak ditemukan" Exit Sub CBULAN.SetFocus End If
Page 41 of 42
'jika ditemukan panggil file laporan yang 'datanya bulannya=cBULAN dan tahunnya= CTAHUN
CR.SelectionFormula = "Month({TRANSAKSI.TGLJUAL})=" & Val(CBULAN.Text) & " and Year({TRANSAKSI.TGLJUAL})=" & Val(CTAHUN.Text) CR.ReportFileName = App.Path & "\Lap_Bulanan.rpt" CR.WindowState = CRptMaximized CR.RetrieveDataFiles CR.Action = 1End Sub
Private Sub Form_Load()'buka databaseCall koneksi
'cari tanggal pembelianrstrans.Open "Select Distinct TGLJUAL From transaksi order By 1", KONrstrans.Requery'tampilkan tanggal dalam comboDo Until rstrans.EOF CHARIAN.AddItem rstrans!Tgljual CMINGGUAWAL.AddItem Format(rstrans!Tgljual, "YYYY ,MM, DD") CMINGGUAKHIR.AddItem Format(rstrans!Tgljual, "YYYY ,MM, DD") rstrans.MoveNextLoop
'buatlah looping untuk bulan dari 1-12'dan tahun mulai tahun 2010 s/d 2020For i = 1 To 12 CBULAN.AddItem iNext iFor i = 10 To 20 CTAHUN.AddItem 2000 + iNext iEnd Sub
B. Membuat FILE EXEKlik menu file – pilih make P.TUTORIAL.exe – kasih nama file : proj-tutorial - ok.
Page 42 of 42
INGATT!!Jangan lupa untuk memperesentasikan tugas membuat projek program secara berkelompok.