Daftar Isi
Kata Pengantar ...................................................................................... v Daftar Isi............................................................................................... ix BAB 1
KONSEP DASAR .............................................................. 1
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11
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
BAB 2
PROGRAM DASAR ........................................................ 21
2.1 2.2 2.3 2.4 2.5 2.6
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
Pengolahan Data Model InputBox...................................... 50 Pengolahan Data Model Grid ............................................. 53
BAB 3
PROGRAM PASSWORD DATABASE ......................... 63
3.1 3.2 3.3 3.4 3.5 3.6
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
BAB 4
PROGRAM REKAM MEDIS .......................................... 77
4.1 4.2 4.3 4.4 4.5
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
BAB 5
PROGRAM PENJUALAN ............................................ 101
5.1 5.2 5.3 5.4 5.5 5.6
5.7
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
BAB 6
PROGRAM AKADEMIK ............................................. 145
6.1 6.2 6.3
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
x
6.4 6.5
6.6 6.7 6.8 6.9
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
BAB 7
PROGRAM PELENGKAP ............................................ 213
7.1 7.2
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.3 7.4 7.5 7.6 7.7
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
PROGRAM REKAM MEDIS
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
Keterangan
Medical
File Database
Pasien
Tabel
Dokter
Tabel
Obat
Tabel
RekamMedis
Tabel
Resep
Tabel
TRResep
Tabel Temporer
77
Tabel 1. Tabel Pasien Nama Field
Type
Lebar
KodePsn
Text
5
NamaPsn
Text
35
Umur
Text
3
Jnskelamin
Text
10
AlamatPsn
Text
35
TeleponPsn
Text
15
PekerjaanPsn
Text
30
Pasiendex
Keterangan Field Index
File Index
Tabel 2. Tabel Dokter Nama Field
Type
Lebar
KodeDkt
Text
5
NamaDkt
Text
35
AlamatDkt
Text
35
TeleponDkt
Text
15
Spesialisasi
Text
30
Type
Lebar
KodeObt
Text
5
NamaObt
Text
35
JenisObt
Text
15
JumlahObt
Text
4
Keterangan Field Index
Tabel 3. Tabel Obat Nama Field
ObatDex
78
Keterangan Field index
File index
Tabel 4. Tabel Resep Nama Field
Type
Lebar
NomorRkm
Text
5
KodeObt
Text
5
Dosis
Text
3
Keterangan
Tabel 5. Tabel Rekam Medis Nama Field
Type
Lebar
NomorRkm
Text
5
TglPeriksa
Date
8
KodePsn
Text
5
KodeDkt
Text
5
Diagnosis
Text
50
Keterangan
Text
25
Rekamdex
Keterangan Field Index
File 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.
4.1 Program Rekam Medis Program berikut ini berisi relasi seluruh tabel yang ada dalam database. Bentuk normalisasi dibuat hingga level ketiga dengan tujuan menghindari redudansi dan anomali lainnya. Anda dapat mengubah atau menambah keterangan lain yang diperlukan. Misalnya, data pasien ditampilkan umur dan alamatnya, data dokter ditampilkan spesialisasinya.
79
Gambar 4.1 Form rekam medis
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
Tampilkan.Print Tab(5); "Dokter DTDokter.Recordset!NamaDkt Tampilkan.Print Tab(5); "Pasien DTPasien.Recordset!NamaPsn
:
";
:
";
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
4.2 Pencarian Berdasarkan Nomor Rekam Medis Program pencarian data ini dilakukan dengan memilih nomor rekam medis yang akan menghasilkan informasi tentang nama pasien, dokter yang melakukan diagnosa, tanggal diagnosa dan obat yang diberikan oleh dokter. Anda dapat menambahkan keterangan lain untuk ditampilkan, misalnya pasien ditampilkan pula alamat dan umurnya, atau dokter ditampilkan spesialisasinya.
86
Gambar 4.2 Pencarian berdasarkan nomor rekam medis
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
4.3 Pencarian Berdasarkan Nama Pasien Program pencarian ini akan menghasilkan informasi yang sama dengan program sebelumnya tetapi dilakukan dengan mengetik nama pasiennya dan hasilnya ditampilkan berupa laporan dari Crystal Report.
Gambar 4.3 Pencarian berdasarkan nama pasien
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
4.4 Hasil Pencarian Data Pasien Laporan ini akan menampilkan data berulang-ulang karena tidak menutup kemungkinan seorang pasien didiagnosa oleh dokter berkali-kali. Hasil yang ditampilkan pada Gambar 4.4 hanya memperlihatkan bagian atasnya saja. Untuk menghasilkan bentuk laporan seperti Gambar 4.4, buatlah rancangannya dengan Crystal Report dengan bentuk seperti Gambar 4.5.
90
Gambar 4.4 Laporan hasil rekam medis
Gambar 4.5 Rancangan laporan rekam medis
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.
4.5 Normalisasi File Normalisasi file adalah suatu proses pengelompokan elemen data ke dalam tabel yang menyatakan hubungan antarentitas sehingga terwujud suatu bentuk yang memudahkan adanya perubahan dengan dampak terkecil. Proses pada pengolahan data yang mengakibatkan efek samping yang tidak diharapkan sering disebut dengan istilah anomali yang dapat terjadi akibat inserting, updating, atau deleting. Oleh karena itulah diperlukan normalisasi file. Adapun teknik penyusunan normalisasi file adalah dengan menentukan hal-hal sebagai berikut:
Kunci Atribut
Setiap file selalu mempunyai kunci berupa satu field atau satu set field yang dapat mewakili record. Sebagai contoh, pada tabel barang terdapat field kunci berupa kode barang yang mewakili nama barang, harga barang, jumlah barang dan sebagainya.
Kunci Kandidat (Candidate Key)
Kunci kandidat adalah satu atribut atau satu set minimal atribut yang mengidentifikasi secara unik suatu kejadian spesifik dari entiti. Jika kunci kandidat berisi lebih dari satu atribut, maka biasanya disebut sebagai kunci gabungan (Composite Key).
Kunci Primer (Primary Key)
Kunci primer adalah satu atribut atau satu set minimal atribut yang tidak hanya mengidentifikasi secara unik suatu kejadian spesifik, tetapi juga dapat mewakili setiap kejadian dari suatu entiti. Setiap kunci kandidat mempunyai peluang untuk menjadi kunci primer, tetapi sebaiknya dipilih satu saja yang dapat mewakili secara menyeluruh terhadap entiti yang ada. Contohnya adalah NIM, sifatnya unik dan tidak mungkin ganda dan mewakili secara menyeluruh terhadap entiti mahasiswa dan setiap mahasiswa selalu memiliki NIM. 92
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).
4.5.1 Bentuk-Bentuk Normalisasi
Bentuk Tidak Normal
Bentuk ini merupakan kumpulan data yang akan disimpan. Tidak ada keharusan mengikuti suatu format tertentu, dapat saja data tidak lengkap atau terduplikasi dan dikumpulkan apa adanya sesuai dengan bentuk asalnya. Contohnya dapat dilihat pada Gambar 4.6. Contoh data dapat dilihat pada tabel di bawah ini: Kode Dokter
Nama Dokter
Spesialisasi
Nama Pasien
D1
Bashri
Kandungan
Rini Santi
D2
Andarini
Kulit
Shanti Anwar
D3
Irawan
Mata
Wijaya
Tabel di atas memberikan gambaran bahwa satu orang dokter melakukan diagnosa pada dua orang pasien atau lebih. (Lihat lebih seksama tabel kolom keempat).
93
Bentuk Normal Kesatu
Bentuk normal kesatu mempunyai ciri, yaitu setiap data dibentuk dalam flat file, data dibentuk record demi record dan nilai tiap field berupa “Atomic Value”. Tidak ada set atribut yang terduplikasi (multi value). Contohnya dapat dilihat pada Gambar 4.6. Contoh data dapat dilihat pada tabel di bawah ini: Kode Dokter
Nama Dokter
Spesialisasi
Nama Pasien
D1
Bashri
Kandungan
Rini
D1
Bashri
Kandungan
Santi
D2
Andarini
Kulit
Shanti
D2
Andarini
Kulit
Anwar
D3
Irawan
Mata
Wijaya
Bentuk Normal Kedua
Bentuk normal kedua mempunyai syarat, yaitu bentuk data telah memenuhi syarat normal kesatu. Atribut bukan kunci harus bergantung secara fungsional pada kunci primer, sehingga untuk membentuk normal kedua haruslah ditentukan kunci-kunci field dan kunci-kunci itu harus unik dan dapat mewakili atribut lain yang menjadi anggotanya. Contohnya dapat dilihat pada Gambar 4.7. Contoh data terlihat pada tabel di bawah ini: Kode Dokter
Spesialisasi
D1
Bashri
Kandungan
D2
Andarini
Kulit
D3
Irawan
Mata
Kode Dokter
94
Nama Dokter
Nama Pasien
D1
Rini
D1
Santi
D2
Shanti
D2
Anwar
D3
Wijaya
Bentuk Normal Ketiga
Syarat bentuk normal ketiga adalah data telah memenuhi syarat normal kedua dan semua atribut yang bukan kunci primer tidak mempunyai hubungan transitif. Dengan kata lain, setiap atribut bukan kunci harus bergantung hanya pada kunci primer secara meyeluruh. Contohnya dapat dilihat pada Gambar 4.8. Contoh data terlihat pada tabel berikut ini. KodeDkt
NamaDkt
KodePsn
NamaPsn
No
KodeObt
NamaObt
D1
Bashri
P1
Shanti
1
OB01
Refagan
D1
Bashri
P1
Shanti
2
OB02
Panadol
D1
Bashri
P1
Shanti
3
OB03
Balpirix
D2
Andarini
P2
Anwar
1
OB02
Panadol
D2
Andarini
P2
Anwar
2
OB01
Balpirix
D3
Irawan
P3
Wijaya
1
OB02
Panadol
D3
Irawan
P3
Wijaya
2
OB03
Balpirix
KodeObt
NamaObt
OB01
Refagan
OB02
Panadol
OB03
Balpirix
Dengan asumsi tabel pasien telah dipecah, berarti bentuk normal kedua telah terpenuhi, maka sekarang tinggal memecah tabel obat yang datanya masih terduplikasi. Jika diamati lebih seksama, nomor urut di kolom 5 tidak dapat dijadikan sebagai kunci field, karena ketika terjadi diagnosa berikutnya, nomor urut obat akan terduplikasi (kembali menjadi 1, 2, 3 dan seterusnya). Oleh karena itu, nomor rekam medis diperlukan di tabel resep (menjadi tabel detail) dengan mengambil data dari nomor rekam medis di tabel rekam medis, ditambah nomor transaksi obat. Dengan demikian, nomor rekam medis tidak akan ada yang sama, dan oleh karena itu pula, nomor rekam medis dapat dijadikan sebagai kunci primer.
95
Untuk melihat contoh sebenarnya, silakan buka CD program pendukung buku ini, kemudian jalankan program Rekam Medis lalu bukalah tabel rekammedis dan tabel resep, lalu perhatikan isi datanya. Gambar Unnormal dan Normal 1 Unnormal KodeDkt NamaDkt AlamatDkt TeleponDkt Spesialisasi KodeObt NamaObt JenisObt JumlahStok KodePsn NamaPsn Umur Jnskelamn AlamatPsn TeleponPsn Pekerjaan NomorRkm TglPeriksa KodePsn KodeDkt Diagnosis Keterangan NomorRkm KodeObt Dosis
Normal 1
KodeDkt* NamaDkt AlamatDkt TeleponDkt Spesialisasi KodeObt* NamaObt JenisObt JumlahStok KodePsn* NamaPsn Umur Jnskelamn AlamatPsn TeleponPsn Pekerjaan NomorRkm* TglPeriksa Diagnosis Keterangan Dosis
Gambar 4.6 Unnormal dan Normal 1
96
Gambar Normal 2 Dokter KodeDkt* NamaDkt AlamatDkt TeleponDkt Spesialisasi
Pasien
RekamMedis NomorRkm* TglPeriksa Diagnosis Keterangan Dosis
Obat Kodeobt* Namaobt Jenisobt Jumlahstok
KodeDkt** KodePsn** KodeObt**
KodePsn* NamaPsn Umur Jnskelamn AlamatPsn TeleponPsn Pekerjaan Gambar 4.7 Normal 2
Keterangan: * = Kunci Primer
= One To One
** = Kunci Tamu
= One To Many
97
Gambar Normal 3
Dokter
RekamMedis
Obat
KodeDkt* NamaDkt AlamatDkt TeleponDkt Spesialisasi
NomorRkm* TglPeriksa Diagnosis Keterangan
KodeObt* NamaObt jenisObt JumlahStok
KodeDkt** KodePsn**
Pasien
Resep
KodePsn* NamaPsn Umur Jnskelamn AlamatPsn TeleponPsn Pekerjaan
NomorRkm* KodeObt** Dosis
Gambar 4.8 Normal 3
Keterangan: * = Kunci Primer
= One To One
** = Kunci Tamu
= One To Many
98
Dalam Crystal Report, bentuk normalisasi pada Gambar 4.8 dihasilkan dari normalisasi dengan bentuk seperti Gambar 4.9. Itulah salah satu kelebihan menggunakan Crystal Report dengan segala fasilitasnya, kita tinggal menggunakannya. Dapat Anda perkirakan seandainya laporan dibuat secara manual (full programing), maka harus dibuat listing program yang memuat kira-kira dua halaman dengan konsep tampilan dan relasi data yang harus dipikirkan sendiri, sedangkan dengan menggunakan Crystal Report kita tinggal memilih tabel-tabel yang akan dibuat laporan dan relasi tabel akan dibaca (dilakukan) sendiri oleh Crystal Report, setelah itu kita pun tinggal menempatkan tiap field di posisi yang kita inginkan dengan melakukan drag.
Gambar 4.9 Normal 3 dalam Crystal Report
99