BL Konsep Dan Implementasi VB
BL Konsep Dan Implementasi VB
Kata Pengantar ...................................................................................... v Daftar Isi............................................................................................... ix BAB 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 BAB 2 2.1 2.2 2.3 2.4 2.5 2.6 KONSEP DASAR .............................................................. 1 Type Data ............................................................................ 3 Membuat Primary Key dan Foreign Key .............................. 4 Mengubah Posisi Field ......................................................... 4 Menyalin Tabel .................................................................... 6 Menghapus dan Mengganti Nama Tabel .............................. 8 Menghapus Isi Tabel ............................................................ 9 Membuat Tabel Hasil Query ................................................ 9 Menyalin Form dan Listing Program .................................. 11 Mencari dan Mengganti Kata ............................................. 13 Merancang Tabel dari Bentuk Output ................................ 14 Penyebutan Nama Tabel, Data Control, dan Tabel Definitif............................................................. 18 PROGRAM DASAR ........................................................ 21 Program Pengolahan Data Barang ...................................... 23 Program Pengolahan Data Kasir......................................... 31 Program Pengolahan Data Pemasok ................................... 37 Program Pengolahan Data Pelanggan ................................. 42 Membuat Database............................................................. 47 Membuat Tabel dan Index.................................................. 48 ix
2.7 2.8 BAB 3 3.1 3.2 3.3 3.4 3.5 3.6 BAB 4 4.1 4.2 4.3 4.4 4.5 BAB 5 5.1 5.2 5.3 5.4 5.5 5.6
Pengolahan Data Model InputBox...................................... 50 Pengolahan Data Model Grid ............................................. 53 PROGRAM PASSWORD DATABASE ......................... 63 Program Cek Password File Database ................................. 63 Membuat Password Database.............................................. 66 Mengubah Password Database ............................................ 67 Menghapus Password Database........................................... 68 Password Tiga Kali Kesempatan........................................ 69 Password Berlapis............................................................... 72 PROGRAM REKAM MEDIS .......................................... 77 Program Rekam Medis....................................................... 79 Pencarian Berdasarkan Nomor Rekam Medis...................... 86 Pencarian Berdasarkan Nama Pasien................................... 88 Hasil Pencarian Data Pasien ............................................... 90 Normalisasi File ................................................................. 92 4.5.1 Bentuk-Bentuk Normalisasi .................................. 93 PROGRAM PENJUALAN ............................................ 101 Program Password............................................................ 104 Program Cek Format Tanggal .......................................... 106 Program Penjualan Model Pertama................................... 108 Program Penjualan Model Kedua ..................................... 120 Program Rincian Penjualan .............................................. 130 Laporan Penjualan ............................................................ 132 5.6.1 Laporan Harian.................................................... 135 5.6.2 Laporan Mingguan .............................................. 137 5.6.3 Laporan Bulanan.................................................. 138 Normalisasi File ............................................................... 140 PROGRAM AKADEMIK ............................................. 145 Proses Kegiatan Akademik............................................... 146 Pendaftaran Mahasiswa Baru ............................................ 148 Data Mata kuliah ............................................................. 157 6.3.1 Pencetakan Data Mata Kuliah ............................. 158 6.3.2 Hasil Pencetakan Data Mata Kuliah .................... 161
6.4 6.5
6.10 6.11
6.12
Updating Data Master...................................................... 161 Pencetakan Absen Kelas ................................................... 163 6.5.1 Pencetakan KTM ................................................ 163 6.5.2 Pencetakan KRS.................................................. 164 Pencetakan Absen UTS .................................................... 165 Transfer Data dari Excel ke Access dan Update Data......... 166 Menyalin Isi Tabel dan Updating Data............................. 173 Pendaftaran Her ............................................................... 175 6.9.1 Pencetakan Data Her........................................... 181 6.9.2 Pencetakan KPU Her .......................................... 185 6.9.3 Pencetakan Absen Ujian Her ............................... 185 6.9.4 Entri Nilai Her ................................................... 186 6.9.5 Pencetakan Nilai Her .......................................... 191 Updating Nilai Transkrip ................................................ 193 Pencetakan Nilai .............................................................. 194 6.11.1 Membuat Laporan dengan Posisi NIM Terurut.... 200 6.11.2 Membuat Laporan dengan Posisi Mata Kuliah Terurut ............................................................... 206 6.11.3 Pencetakan Nilai Urut NIM................................ 206 6.11.4 Pencetakan Nilai Urut Mata Kuliah .................... 206 6.11.5 Pencetakan Nilai Semester................................... 207 6.11.6 Pencetakan Transkrip Nilai ................................. 207 Membuat Formula di Transkrip Nilai .............................. 208 6.12.1 Mutu................................................................... 208 6.12.2 Total SKS dan Total Mutu .................................. 209 6.12.3 IPS ...................................................................... 210 6.12.4 Predikat .............................................................. 211 PROGRAM PELENGKAP ............................................ 213 Program Trial .................................................................. 213 Program Animasi Sederhana............................................. 214 7.2.1 Form Datang dari Bawah..................................... 215 7.2.2 Form Terbuka Melebar ........................................ 216 7.2.3 Form Ditutup Bergerak ke Bawah ....................... 217 7.2.4 Form Ditutup Bergerak ke Kanan ....................... 217 7.2.5 Objek Berkedip................................................... 218 7.2.6 Teks Berjalan ...................................................... 219 xi
7.2.7 Program OLE ...................................................... 220 7.2.8 Program Pesan Baris............................................ 222 Membuka Dua Tabel Berbeda Database............................ 222 Menampilkan Struktur Tabel ........................................... 224 Membuat Program Backup............................................... 226 Menampilkan Sejumlah Data............................................ 228 Memanggil Mail Merge dengan Visual Basic .................... 230
Daftar Pustaka....................................................................................239
xii
BAB 4
Pendahuluan: Dalam program ini digambarkan proses diagnosa pasien oleh dokter, dimana datanya akan disajikan berupa informasi rekam medis. Fokus program ini adalah laporan rekam medis pasien, bukan masalah pembayaran dan keuangan dari proses rekam medisnya. Catatan: Database yang diakses adalah Medical.Mdb yang berada di lokasi C:\Program Rekam Medis. Rancangan database:
Nama Objek Medical Pasien Dokter Obat RekamMedis Resep TRResep Keterangan File Database Tabel Tabel Tabel Tabel Tabel Tabel Temporer
77
Tabel 1. Tabel Pasien Nama Field KodePsn NamaPsn Umur Jnskelamin AlamatPsn TeleponPsn PekerjaanPsn Pasiendex Tabel 2. Tabel Dokter Nama Field KodeDkt NamaDkt AlamatDkt TeleponDkt Spesialisasi Tabel 3. Tabel Obat Nama Field KodeObt NamaObt JenisObt JumlahObt ObatDex Type Text Text Text Text Lebar 5 35 15 4 File index Keterangan Field index Type Text Text Text Text Text Lebar 5 35 35 15 30 Keterangan Field Index Type Text Text Text Text Text Text Text Lebar 5 35 3 10 35 15 30 File Index Keterangan Field Index
78
Tabel 4. Tabel Resep Nama Field NomorRkm KodeObt Dosis Type Text Text Text Lebar 5 5 3 Keterangan
Tabel 5. Tabel Rekam Medis Nama Field NomorRkm TglPeriksa KodePsn KodeDkt Diagnosis Keterangan Rekamdex Type Text Date Text Text Text Text Lebar 5 8 5 5 50 25 File Index Keterangan Field Index
Untuk menghemat ruang dan waktu, pembuatan program untuk data pasien, obat dan dokter tidak disajikan di sini, silakan dibuat sendiri dengan merujuk pada Bab 2 (program dasar) dengan panduan struktur tabel yang telah dijelaskan di atas, atau Anda dapat membuka CD program pendukung buku ini, lalu melihat programnya satu per satu.
79
Listing program:
'definsikan database dan tabel Dim DB As Database Dim RSObat As Recordset Private Sub Form_load() 'batasi jumlah karakter yg dientri TxtDiagnosa.MaxLength = 50 TxtKeterangan.MaxLength = 25 'buka database dan tabel Set DB = OpenDatabase("C:\Program Rekam Medis\Medical.mdb") Set RSObat = DB.OpenRecordset("Select * from Obat") List1.Clear 'tampilkan kode dan nama obat di list (sebelah kanan) Do Until RSObat.EOF List1.AddItem RSObat!KodeObt & vbTab & RSObat!NamaObt RSObat.MoveNext Loop End Sub Private Sub Form_activate() 'panggil nomor rekam medis otomatis Call Auto 'panggil tabel transaksi Call Tabel_Kosong DTTransaksi.Recordset.MoveFirst 'tampilkan tanggal sistem kompter TxtTanggal = Date CmdSimpan.Enabled = False End Sub
80
Private Sub TxtDiagnosa_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii = 13 Then TxtKeterangan.SetFocus End Sub Private Sub TxtKeterangan_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii = 13 Then DBGrid1.SetFocus DBGrid1.Col = 1 End If End Sub 'nomor rekam medis muncul otomatis 'akan membaca nomor terbesar lalu ditambah 1 Private Sub Auto() Dim Urutan As String * 5 Dim Hitung As Byte With DTRekamMedis.Recordset If .RecordCount = 0 Then Urutan = "00001" Else .MoveLast Hitung = Val(Right(.Fields("NomorRkm"), 5)) + 1 Urutan = Right("00000" & Hitung, 5) End If TxtNomorRkm = Urutan End With End Sub 'menyiapkan tabel kosong untuk transaksi 'akan dihapus datanya jika masih ada yg tersisa Function Tabel_Kosong() If Not DTTransaksi.Recordset.RecordCount = 0 Then DTTransaksi.Recordset.MoveFirst Do While Not DTTransaksi.Recordset.EOF DTTransaksi.Recordset.Delete DTTransaksi.Recordset.MoveNext Loop For i = 1 To 10 DTTransaksi.Recordset.AddNew DTTransaksi.Recordset!Nomor = i DTTransaksi.Recordset.Update Next i End If End Function Private Sub CboPasien_Keypress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub
81
'mencari data pasien Private Sub CboPasien_Change() If Len(CboPasien.Text) < 5 Then Exit Sub With DTPasien.Recordset .Index = "Pasiendex" .Seek "=", CboPasien If Not .NoMatch Then TxtNamaPsn = !NamaPsn CboDokter.SetFocus End If End With End Sub Private Sub CboDokter_Keypress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub 'mencari data dokter Private Sub CboDokter_Change() If Len(CboDokter.Text) < 5 Then Exit Sub With DTDokter.Recordset .Index = "Dokterdex" .Seek "=", CboDokter If Not .NoMatch Then TxtNamaDkt = !NamaDkt TxtDiagnosa.SetFocus End If End With End Sub 'jika menekan tombol Escape 'data di baris tersebut akan dikosongkan Private Sub DBGrid1_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyEscape DTTransaksi.Recordset.Edit DTTransaksi.Recordset!Kode = Null DTTransaksi.Recordset!Nama = Null DTTransaksi.Recordset!Jenis = Null DTTransaksi.Recordset!Jumlah = Null DTTransaksi.Recordset.Update End Select End Sub 'semua huruf diubah jadi besar Private Sub DBGrid1_Keypress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub
82
'menampilkan data obat di Grid 'jika kodenya benar Private Sub DBGrid1_AfterColEdit(ByVal ColIndex As Integer) On Error GoTo salah If DBGrid1.Col = 1 Then If KeyAscii = 13 Then If Len(DBGrid1) < 5 Then MsgBox "Kode Harus 5 digit" DBGrid1.Col = 1 Exit Sub End If End If DTObat.Recordset.Index = "Obatdex" DTObat.Recordset.Seek "=", DBGrid1.SelText If Not DTObat.Recordset.NoMatch Then DTTransaksi.Recordset.Edit DTTransaksi.Recordset!Kode = DTObat.Recordset!KodeObt DTTransaksi.Recordset!Nama = DTObat.Recordset!NamaObt DTTransaksi.Recordset!Jenis = DTObat.Recordset!jenisObt DTTransaksi.Recordset.Update DBGrid1.Col = 4 DBGrid1.Refresh Exit Sub End If End If If DBGrid1.Col = 4 Then DTTransaksi.Recordset.Edit DTTransaksi.Recordset!Jumlah = DTTransaksi.Recordset!Jumlah DTTransaksi.Recordset.Update DTTransaksi.Recordset.MoveNext DBGrid1.Col = 1 End If On Error GoTo 0 Exit Sub salah: MsgBox "Cek Isian Data" End Sub Private Sub DBGrid1_LostFocus() CmdSimpan.Enabled = True CmdSimpan.SetFocus End Sub 'kode obat dapat dientri ke dalam DBgrid 'dengan memilih dari list sebelah kanan Private Sub List1_Click() DTTransaksi.Recordset.Edit DTTransaksi.Recordset!Kode = Left(List1, 5) DTObat.Recordset.Index = "Obatdex" DTObat.Recordset.Seek "=", DTTransaksi.Recordset!Kode DTTransaksi.Recordset!Nama = DTObat.Recordset!NamaObt DTTransaksi.Recordset!Jenis = DTObat.Recordset!jenisObt
83
DTTransaksi.Recordset.Update DBGrid1.SetFocus DBGrid1.Col = 4 End Sub Private Sub Bersihkan() CboPasien = "": CboDokter = "" TxtDiagnosa = "": TxtNamaPsn = "" TxtNamaDkt = "": TxtKeterangan = "" End Sub Private Sub CmdSimpan_Click() 'mencegah data kosong If CboPasien = "" Or CboDokter = "" Or TxtDiagnosa = "" Or TxtKeterangan = "" Then MsgBox "Cek Isi Data :" & Chr(13) & _ "Kode Pasien , Kode Dokter" & Chr(13) & _ "Diagnosa dan Keterangan ...!" Exit Sub End If 'simpan ke tabel RekamMedis DTRekamMedis.Recordset.AddNew DTRekamMedis.Recordset!NomorRkm = TxtNomorRkm DTRekamMedis.Recordset!TglPeriksa = TxtTanggal DTRekamMedis.Recordset!Kodepsn = CboPasien.Text DTRekamMedis.Recordset!KodeDkt = CboDokter.Text DTRekamMedis.Recordset!Diagnosis = TxtDiagnosa DTRekamMedis.Recordset!Keterangan = TxtKeterangan DTRekamMedis.Recordset.Update 'simpan ke tabel DetailRekamMedis DTTransaksi.Recordset.MoveFirst Do While Not DTTransaksi.Recordset.EOF If DTTransaksi.Recordset!Kode <> vbNullString Then DTResep.Recordset.AddNew DTResep.Recordset!NomorRkm = TxtNomorRkm + DTTransaksi.Recordset!Nomor DTResep.Recordset!KodeObt = DTTransaksi.Recordset!Kode DTResep.Recordset!Dosis = DTTransaksi.Recordset!Jumlah DTResep.Recordset.Update End If DTTransaksi.Recordset.MoveNext Loop 'Pengurangan Jumlah Obat DTTransaksi.Recordset.MoveFirst Do While Not DTTransaksi.Recordset.EOF If DTTransaksi.Recordset!Kode <> vbNullString Then DTObat.Recordset.Index = "Obatdex" DTObat.Recordset.Seek "=", DTTransaksi.Recordset!Kode DTObat.Recordset.Edit DTObat.Recordset!JumlahStok = DTObat.Recordset!JumlahStok - DTTransaksi.Recordset!Jumlah
84
DTObat.Recordset.Update End If DTTransaksi.Recordset.MoveNext Loop Bersihkan Form_activate CboPasien.SetFocus Call Cetak End Sub Private Sub CmdBatal_Click() Bersihkan Form_activate DBGrid1.Enabled = False CboPasien.SetFocus End Sub Private Sub CmdTutup_Click() Unload Me End Sub Sub Cetak() Tampilkan.Show Dim MGrs As String Tampilkan.Font = "Courier New" 'memilih nomor terakhir di tabel rekam medis DTResep.RecordSource = "select * from Resep Where left(Nomorrkm,5) In(Select max(left(nomorrkm,5)) From Resep)" DTResep.Refresh 'memilih nomor terakhir di tabel resep DTRekamMedis.RecordSource = "select * from rekammedis Where NomorRkm In(Select Max(NomorRkm)From rekammedis)Order By NomorRkm Desc" ', Nomor Asc" DTRekamMedis.Refresh 'mencari kode pasien di tabel rekam medis DTPasien.Recordset.Index = "Pasiendex" DTPasien.Recordset.Seek "=", DTRekamMedis.Recordset!Kodepsn 'mencari kode dokter di tabel rekam medis DTDokter.Recordset.Index = "Dokterdex" DTDokter.Recordset.Seek "=", DTRekamMedis.Recordset!KodeDkt Tampilkan.Print Tampilkan.FontBold = True Tampilkan.Print Tampilkan.FontBold = False Tampilkan.Print Tab(5); "NomorRkm : "; DTRekamMedis.Recordset!NomorRkm Tampilkan.Print Tab(5); "Tanggal : "; Format(Date, "DDMMMM-YYYY")
85
: :
"; ";
MGrs = String$(33, "-") Tampilkan.Print Tab(5); MGrs 'menampilkan obat dari tabel resep DTResep.Recordset.MoveFirst Do While Not DTResep.Recordset.EOF DTObat.Recordset.Index = "Obatdex" DTObat.Recordset.Seek "=", DTResep.Recordset!KodeObt Tampilkan.Print Tab(5); Mid(DTResep.Recordset!NomorRkm, 6, 2); Tampilkan.Print Tab(10); DTObat.Recordset!NamaObt; Tampilkan.Print Tab(30); RKanan(DTResep.Recordset!Dosis, "##"); DTResep.Recordset.MoveNext Loop Tampilkan.Print Tab(5); MGrs Tampilkan.Print Tampilkan.Print End Sub Private Function RKanan(NData, CFormat) As String RKanan = Format(NData, CFormat) RKanan = Space(Len(CFormat) - Len(RKanan)) + RKanan End Function
86
Listing program:
'definisikan file database dan tabel dengan variabel Dim DB As Database Dim RSRekam As Recordset Dim RSpasien As Recordset Private Sub Form_load() 'panggil file database Set DB = OpenDatabase("C:\Program Rekam Medis\Medical.mdb") Combo1.Clear 'pilih field nomor rekam medis dalam tabel Set RSRekam = DB.OpenRecordset("Select Distinct NomorRkm from RekamMedis") RSRekam.Requery 'tambahkan item data nomor rekam medis di combo1 Do Until RSRekam.EOF Combo1.AddItem RSRekam!NomorRkm RSRekam.MoveNext Loop End Sub Private Sub Combo1_Click() 'cari data yang nomor rekam medisnya dipilih di combo1 Set RSRekam = DB.OpenRecordset("select * from RekamMedis where nomorrkm='" & Combo1.Text & "'") RSRekam.Requery 'tampilkan tanggal di label5 If Not RSRekam.EOF Then Label5.Caption = Space(1) & RSRekam!TglPeriksa
87
'tampilkan nama pasiennya Dim CariPasien As Recordset Set CariPasien = DB.OpenRecordset("select * from Pasien where KodePsn='" & RSRekam!Kodepsn & "'") CariPasien.Requery Label6.Caption = Space(1) & CariPasien!NamaPsn 'tampilkan nama dokternya Dim CariDokter As Recordset Set CariDokter = DB.OpenRecordset("select * from Dokter where KodeDkt='" & RSRekam!KodeDkt & "'") CariDokter.Requery Label7.Caption = Space(1) & CariDokter!NamaDkt 'tampilkan nama obat, jenis, dosis di dalam grid DTSQL.RecordSource = "select NamaObt as [Nama Obat], jenisObt as [Jenis Obat],Dosis from resep,obat where resep.kodeobt=obat.kodeobt and left(nomorrkm,5)='" & Combo1.Text & "'" DTSQL.Refresh End Sub Private Sub CmdTutup_Click() Unload Me End Sub
88
Listing program:
'definisikan file database dan tabel Dim DB As Database Dim RSpasien As Recordset Private Sub Form_load() 'buka file database dan tabel Set DB = OpenDatabase("C:\Program Rekam Medis\medical.mdb") Set RSpasien = DB.OpenRecordset("pasien") End Sub Private Sub Form_activate() Text2.Enabled = False Command1.Default = True End Sub Private Sub Text1_keypress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii = 27 Then Unload Me If KeyAscii = 13 Then 'tampilkan nama dan alamat pasien yang namanya diketik di text1 DTSQL.RecordSource = "select Distinct NamaPsn as [Nama Pasien], alamatpsn as [Alamat Tinggal] From pasien,rekamMedis where pasien.kodepsn=rekammedis.kodepsn and namaPsn like '*" & Text1 & "*'" DTSQL.Refresh 'jika tidak ditemukan tampilkan pesan... If DTSQL.Recordset.EOF Then x = MsgBox("Data Tidak Ditemukan") DTSQL.RecordSource = "select Distinct NamaPsn as [Nama Pasien],AlamatPsn as [Alamat Tinggal] From pasien,rekamMedis where pasien.kodepsn=rekammedis.kodepsn" DTSQL.Refresh Text2 = "" Text1 = "" Text1.SetFocus Else 'jika ditemukan, pilih semua data pasien dan tampilkan nomor pasiennya di text2 Dim RSpasien As Recordset Set RSpasien = DB.OpenRecordset("select * from Pasien where namapsn like '*" & Text1 & "*'", dbOpenDynaset) RSpasien.Requery Text2 = RSpasien!Kodepsn End If End If End Sub
89
Private Sub Command2_Click() 'pencetakan data tidak dapat dilakukan 'jika data tidak ditemukan atau data lebih dari 1 If DTSQL.Recordset.RecordCount = 0 Or DTSQL.Recordset.RecordCount > 1 Then MsgBox "Data yang dicetak harus satu nama" DTSQL.RecordSource = "select Distinct NamaPsn as [Nama Pasien],AlamatPsn as [Alamat Tinggal] From pasien,rekamMedis where pasien.kodepsn=rekammedis.kodepsn" DTSQL.Refresh Exit Sub Else CrystalReport1.SelectionFormula = "{RekamMedis.KodePsn}='" & Text2.Text & "'" CrystalReport1.ReportFileName = "C:\Program Rekam Medis\Lap Rekam.rpt" CrystalReport1.WindowState = crptMaximized CrystalReport1.RetrieveDataFiles CrystalReport1.Action = 1 End If End Sub Private Sub Command3_Click() 'mengembalikan daftar pasien ke kondisi semula DTSQL.RecordSource = "select Distinct NamaPsn as [Nama Pasien],AlamatPsn as [Alamat Tinggal] From pasien,rekamMedis where pasien.kodepsn=rekammedis.kodepsn" DTSQL.Refresh Text1 = "" Text2 = "" Text1.SetFocus End Sub
90
91
Catatan: Untuk menghasilkan pengelompokan data berdasarkan Nomor rekam medis, tambahkan Insert Summary dengan memilih NomorRkm di ComboBox kedua. Caranya adalah dengan melakukan klik kanan di area details, setelah section #1: NomorRkm - A muncul, kemudian atur posisi tiap field seperti Gambar 4.5.
Selain itu, kita harus melihat juga fungsi No KTP, ini dapat digunakan bila sampai suatu saat mahasiswa harus memiliki Kartu Tanda Mahasiswa tetapi NIM belum keluar, maka No KTP dapat digunakan. Kunci Alternatif (Alternate Key) Kunci alternatif adalah kunci kandidat yang tidak dipakai sebagai kunci primer. Biasanya kunci ini digunakan sebagai kunci pengurutan data saja, misalnya dalam pembuatan laporan. Kunci Tamu (Foreign Key) Kunci tamu adalah satu atribut (atau satu set atribut) yang melengkapi satu hubungan yang menunjukkan ke tabel induknya. Kunci tamu biasanya ditempatkan pada entiti anak dan sama dengan kunci primer induk yang direlasikan. Hubungan antara entiti induk dengan anak adalah (biasanya) hubungan satu ke banyak (one to many).