MODUL VII APLIKASI MULTIUSER TRANSAKSI PENJUALAN I. MAKSUD DAN TUJUAN A. MAKSUD Pengenalan memmbuat aplikasi multi user menggunakan program Visual Basic, untuk aplikasi multiuser. B. TUJUAN Memberikan kemampuan mempraktekan, aplikasi multiuser dengan pemrogram Visual Basic dan menggunakan jaringan. II. TEORI Pada bagian ini melanjutkan modul-modul yang telah dikerjakan sebelumnya. Telah terdapat tabel, Kasir : untuk menyimpan data kasir, Barang : untuk menyimpan stok barang, Trans : menyinpam transaksi penjulan, dan penju menyimpan data penjualan serta tabel param dugunakan untuk menyimpan dan mengupdate nomor nota yang terahir. Tabel barang tabel penju Tabel kasir tabel trans tabel param Pemrograman Multiuser dengan VB dan MySQL 31
Tabel Kasir Tabel Barang Kasir Pembeli Login Nota Transaksi pembelian Cek kode, dan passeord PROSES PENJUALAN Setiap barang yang dijual mengurangi stok Update No nota +1 Otomatis Tambahkan no nota satiap pembelian Tabel Param Tabel Trans Penyimpanan data Penjualan Tabel Panju Proses Login dengan kode kasir, masukan password, panggil Form Penjualan, setiap barang yang dibeli langsung potong stog di tabel barang, satiap nota pembuatan nomor urut otomatis, disimpan di penju, dan trans (merekan no,kd_kasir,tanggal). Program deklrasi publik Dim Appl As New CRAXDRT.Application 'Untuk report Dim Report As New CRAXDRT.Report 'Untuk report Dim Conn As ADODB.Connection Dim ConnAccess As ADODB.Connection Dim RS As ADODB.Recordset Program tombol keluar Private Sub CommandKeluar_Click() Pemrograman Multiuser dengan VB dan MySQL 32
Unload FormPenjualan Program tombol Simpan Private Sub CommandSimpan_Click() Dim no_nota As String Dim Kdkasir As String Kdkasir = TextKdKasir.Text no_nota = UdateNoNota() 'simpan ke transaki Conn.Execute "INSERT INTO trans values('" & Kdkasir & "','" & _ Format(DTPicker1.Value, "yyyy/mm/dd") & "','" & no_nota & "')" RS.Open "Select * from tmpjual", ConnAccess, adopenstatic While Not RS.EOF Conn.Execute "INSERT INTO penju values('" & no_nota & "','" & _ RS.Fields("kd_brg") & "'," & _ RS.Fields("hrg_sat") & "," & _ RS.Fields("jml") & ")" RS.MoveNext Wend TabelKosong TextKdBrg.SetFocus FormPreview.TextReport.Text = _ "C:\Kuliah\Modul Data Base Multi user\program\reportpen.rpt" FormPreview.Show 1 ConnAccess.Execute "DELETE FROM tmpjual " FormPreview.TextReport.Text = _ "C:\Kuliah\Modul Data Base Multi user\program\reportpen.rpt" menjalankan file ReportPen.rpt Program pada Form Load Private Sub Form_Load() Set Conn = New ADODB.Connection Set ConnAccess = New ADODB.Connection Set RS = New ADODB.Recordset Dim sql As String KonekDB Conn KonekAccess ConnAccess 'MSHFlexGrid1.AllowBigSelection = True ConnAccess.Execute "DROP TABLE tmpjual " sql = "CREATE TABLE tmpjual( " & _ "kd_brg CHAR(4)," & _ "nm_brg CHAR(20)," & _ "jml NUMBER," & _ Pemrograman Multiuser dengan VB dan MySQL 33
"sat CHAR(5)," & _ "hrg_sat NUMBER," & _ "total NUMBER );" ConnAccess.Execute sql TabelKosong Program setelah mengisikan jumlah barang tekan enter Private Sub TextJml_KeyPress(KeyAscii As Integer) Dim total As Currency If KeyAscii = 13 Then 'enter total = Val(TextHrgSat.Text) * Val(TextJml.Text) TextTotalHarga.Text = total ' potong stok PotongStok TextKdBrg.Text, Val(TextJml.Text) ConnAccess.Execute "INSERT INTO TMPJUAL VALUES('" & _ TextKdBrg.Text & "','" & TextNamaBrg.Text & "'," & _ TextJml.Text & ",'" & TextSatuan.Text & "'," & _ TextHrgSat.Text & "," & TextTotalHarga.Text & ")" TextKdBrg.Text = "" TextKdBrg.SetFocus TextNamaBrg.Text = "" TextJml.Text = "" TextSatuan.Text = "" TextHrgSat.Text = "" TextTotalHarga.Text = "" Tabel Program setelah mengisikan kode barang di TextKdBrg tekan enter Private Sub TextKdBrg_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If Not IsValueExist(Conn, "barang", "kd_brg", TextKdBrg.Text) Then MsgBox "Kode ini tidak ada...", vbokonly, "Informasi" TextKdBrg.SetFocus Exit Sub TextNamaBrg.Text = GetFieldData(Conn, "barang", "nm_brg", "kd_brg", TextKdBrg.Text) TextSatuan.Text = GetFieldData(Conn, "barang", "sat_brg", "kd_brg", TextKdBrg.Text) TextHrgSat.Text = GetFieldData(Conn, "barang", "hrg_brg", "kd_brg", TextKdBrg.Text) TextJml.SetFocus Program menampilkan tabel penjualan setiap penambahan barang Private Sub Tabel() Pemrograman Multiuser dengan VB dan MySQL 34
RS.Open "select * from tmpjual", ConnAccess, adopenstatic Set MSHFlexGrid1.DataSource = RS MSHFlexGrid1.ColHeaderCaption(0, 0) = "KD" MSHFlexGrid1.ColHeaderCaption(0, 1) = "NAMA " MSHFlexGrid1.ColHeaderCaption(0, 2) = "QTY" MSHFlexGrid1.ColHeaderCaption(0, 3) = "SAT" MSHFlexGrid1.ColHeaderCaption(0, 4) = "HARGA" MSHFlexGrid1.ColHeaderCaption(0, 5) = "J HARGA" MSHFlexGrid1.ColWidth(0) = 500 MSHFlexGrid1.ColWidth(1) = 2500 MSHFlexGrid1.ColWidth(2) = 900 MSHFlexGrid1.ColWidth(3) = 700 MSHFlexGrid1.ColWidth(4) = 1000 MSHFlexGrid1.ColWidth(5) = 1200 RS.Open "select sum(total) as jtotal from tmpjual", _ ConnAccess, adopenstatic TextTotal.Text = RS.Fields("jTotal") Membuat nomor nota otomatis Private Function UdateNoNota() As String 'baca no terakhir Dim no As Integer RS.Open "SELECT no_nota from param", Conn, adopenstatic 'RS.MoveLast no = RS.Fields("no_nota") + 1 If Len(Trim(no)) = 1 Then UdateNoNota = "000" & Trim(Str(no)) If Len(Trim(no)) = 2 Then UdateNoNota = "00" & Trim(Str(no)) If Len(Trim(no)) = 3 Then UdateNoNota = "0" & Trim(Str(no)) 'simpan no baru Conn.Execute "UPDATE param set no_nota=" & Str(no) End Function Memotong stok setiap transakasi Private Sub PotongStok(kd As String, jml As Integer) 'baca no terakhir Dim sisa As Integer sisa = Val(GetFieldData(Conn, "barang", "stok_brg", "kd_brg", kd)) - jml 'udate stok Conn.Execute "UPDATE barang set stok_brg=" & sisa & " WHERE kd_brg='" & kd & "'" Pemrograman Multiuser dengan VB dan MySQL 35
Program Koneksi ke MySQL menggunakan MYODBC Sub KonekDB(Conn As ADODB.Connection) 'Koneksi ke database MySQL Conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" & _ "SERVER=10.14.1.127;" & _ "DATABASE=penjualan;" & _ "UID=badu;" & _ "PWD=" Conn.Open If Err.Number <> 0 Then MsgBox "Problem membuka database MySQL", vbokonly, _ "Informasi" End Konknekis ke MS Access untuk proses sementara pada database lokal Sub KonekAccess(ConnAccess As ADODB.Connection) ConnAccess.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _ "Source=C:\Kuliah\Modul VB\Program\tempdb.mdb;Persist Security Info=False" ' ConnAccess.Open If Err.Number <> 0 Then MsgBox "Problem membuka database Access", vbokonly, "Informasi" End ' Fungsi membaca data dengan kunci tertentu Function GetFieldData(Conn As ADODB.Connection, TableName As String, _ SearchField As String, _ KeyField As String, KeyValue) Dim RS As ADODB.Recordset Dim sql Dim hasil Set RS = New ADODB.Recordset sql = "SELECT " & SearchField & " FROM " & _ TableName & " WHERE " & KeyField & " = '" & _ KeyValue & "';" RS.Open sql, Conn If Not RS.EOF Then hasil = RS.Fields(SearchField) Else Pemrograman Multiuser dengan VB dan MySQL 36
hasil = "" Set RS = Nothing GetFieldData = hasil End Function Fungsi Mengecek data ada atau tidak Function IsValueExist(Conn As ADODB.Connection, _ TableName As String, _ FieldName As String, Value As String) As Boolean Dim sql, hasil Dim RS As ADODB.Recordset Set RS = New ADODB.Recordset sql = "SELECT " & FieldName & " FROM " & TableName & _ " WHERE " & FieldName & " = '" & Value & "'" 'LIMIT 1;" hasil = True 'MsgBox sql RS.Open sql, Conn, adopenstatic If Err.Number <> 0 Then hasil = False Else If RS.EOF Then hasil = False Set RS = Nothing IsValueExist = hasil End Function IV. TUGAS Uji program ini dengan server tertentu, Login dengan komputer lain (dengan teman anda) Masing-masing login dengan kode kasir 01,02,03 Lakukan transaksi Penjualan. Pemrograman Multiuser dengan VB dan MySQL 37