Aplikasi Seleksi
Karyawan VB 6.0
Dalam
program seleksi penerimaan karyawan baru ini akan disajikan dua buah model,
model pertama dengan bentuk relasi ONE TO ONE yang dapat dilihat bentuk form
dan codingnya pada form Nilai dan model kedua dengan model relasi ONE TO MANY
yang dapat dilihat bentuk form dan codingnya pada form Nilai1.
Normalisasi File
Setelah
mencoba membuat beberapa program aplikasi, kami berasumsi bahwa tidak semua
program harus dipola dengan bentuk relasi one to many. Pola relasi tersebut dipengaruhi
oleh situasi dan kondisi juga dipengaruhi oleh kebutuhan sistem informasi yang
dihasilkan oleh program itu sendiri. Contoh bentuk normalisasi dengan pola one to many terlihat pada gambar
di bawah ini.
Database Dan Tabel
Untuk
mengetahui file database dan struktur masing-masing tabel berikut type data dan
kunci primer maupun kunci tamunya silakan buka CD pendukung buku ini.
Catatan
:
1.
Tabel
Nilai digunakan untuk menyimpan data nilai dengan pola relasi one to one.
2.
Tabel
Nilai1 dan DetailNilai1 digunakan untuk menyinpan data nilai dengan pola relasi
one to many.
3.
Dalam
kasus yang sebenarnya data pelamar harus didata selengkap mungkin, misalnya
dengan menambahkan field No KTP, jenis kelamin, agama, pendidikan dan
sebagainya. Tabel di atas hanya sebagai contoh saja.
4.
Tabel
jadwal digunakan untuk memberitahukan kepada para pelamar jadwal testing yang
harus diikuti setelah lamaran diseleksi
Membuat Module
Aktifkan
VB dan buatlah Module dengan coding sebagai berikut kemudian simpan Module
tersebut.
Public Conn As New ADODB.Connection
Public RSPelamar As ADODB.Recordset
Public RSJadwal As ADODB.Recordset
Public RSNilai As ADODB.Recordset
Public RSNilai1 As ADODB.Recordset
Public RSDetail As ADODB.Recordset
Public RSHasil As ADODB.Recordset
Public Sub BukaDB()
Set Conn = New ADODB.Connection
Set RSPelamar = New ADODB.Recordset
Set RSJadwal = New ADODB.Recordset
Set RSNilai = New ADODB.Recordset
Set RSNilai1 = New ADODB.Recordset
Set RSDetail = New ADODB.Recordset
Set RSHasil = New ADODB.Recordset
Conn.Open
"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &
"\ADOSeleksi.mdb"
End Sub
Entri Jadwal Testing
Dengan
asumsi program pengolahan data pelamar telah dibuat, sekarang kita akan membuat
program transfer jadwal testing. Dalam kasus ini, entri jadwal testing
ditentukan sebagai berikut:
1.
Perserta
testing dikelompokan dengan jumlah 5 orang per kelompok Anda dapat mengubah
jumlah per kelompok sesuai banyaknya pelamar dan daya tampung tempat testing.
2.
Tiap
kelompok berbeda tanggal testing dengan selisih waktu satu hari.
3.
Proses
entri jadwal ujian tidak perlu dilakukan secara manual dengan cara menginput
data satu persatu, dapat dibayangkan jika jumlah pelamar mencapai ribuan orang,
maka pekerjaan entri jadwal ujian untuk masing-masing peserta menjadi sangat
tidak efektif dan efisien. Dalam kasus
ini proses entri akan dilakukan cukup dengan membuat sebuah otomasi dengan
sekali klik. Oleh karena itu buatlah GUI
seperti Gambar 7.3 berikut ini.
Listing Program :
Private Sub Form_Activate()
DT.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path &
"\ADOSeleksi.mdb"
DT.RecordSource = "Jadwal"
DT.Refresh
End Sub
Private Sub Command1_Click()
Call BukaDB 'buka database
Dim Hapus As String 'defiisikan sebuah
variabel
Hapus = "delete from jadwal"
'hapus isi data jadwal terlebih dahulu
Conn.Execute (Hapus) 'eksekusi
penghapusan
RSPelamar.Open "Select * from
pelamar", Conn
'buka tabelpelamar
RSPelamar.MoveFirst 'mulailah dari data
pertama
Do While Not RSPelamar.EOF 'baca tabel
pelamar sampai record terakhir
Dim Tgl As Date 'definisikan tanggal
DT.Refresh 'data jadwal direfresh
If DT.Recordset.RecordCount < 4 Then 'jika jumlah data 5..
Tgl = Date + 10 'tanggal test 10 hari kemudian
Grup = 1 'grup 1
ElseIf DT.Recordset.RecordCount >= 4 And DT.Recordset.RecordCount
< 8 Then 'jika data 6-10
Tgl = Date + 11 'tanggal test 11 hari kemudian
Grup = 2 'grup 2
ElseIf DT.Recordset.RecordCount >= 9 Then 'jika jumlah data 11 lebih
Tgl = Date + 12 'tgl test 12 hari kemudian
Grup = 3 'grup 3
End If
Tempat = "Aula" 'tempat test di Aula
Test1 = "Ruang 1"
Test2 = "Ruang 2"
Test3 = "Ruang 3"
Test4 = "Ruang 4"
'simpan data pelamar ke tabel jadwal sesuai kriteria di atas
Dim Simpan As String
Simpan = "insert into
jadwal(Nomorlmr,Tanggal,Tempat,Grup,Test1,Test2,Test3,Test4) " &
Chr(13) & _
"values ('" & RSPelamar!NomorLmr & "','"
& Tgl & "','" & Tempat & "','" & Grup
& "','" & Test1 & "','" & Test2 &
"','" & Test3 & "','" & Test4 &
"')"
Conn.Execute (Simpan)
RSPelamar.MoveNext
Loop
Conn.Close
MsgBox "Transfer Jadwal
Sukses" 'tampilkan pesan sukses
Menu.mnjadwal.Visible = False 'menu
transfer disembunyikan
Unload Me 'form langsung ditutup
End Sub
Jika program di atas dijalankan akan
menghasilkan data sebagai berikut:
Transfer Data Pelamar
Program
ini digunakan untuk menyalin data pelamar (nomor lamaran dan nama pelamar) ke
tabel nilai. Hal ini dilakukan mengingat jumlah pelamar yang sangat banyak
tidak mungkin dientri satu persatu secara manual. Buatlah GUI di VB seperti Gambar
7.5 di bawah ini.
Listing Program :
Private Sub Command1_Click()
Call BukaDB 'buka database
Dim HapusNilai As String 'definisikan
variabel string
HapusNilai = "delete * from
Nilai" 'hapus dulu isi tabel nilai
Conn.Execute (HapusNilai) 'eksekusi
penghapusan
RSPelamar.Open "Select * from
pelamar", Conn
'buka tabel pelamar
RSPelamar.Requery
RSPelamar.MoveFirst 'mulailah dari
reord pertama
Do While Not RSPelamar.EOF 'baca tabel
pelamar hingga record terakhir
Dim Transfer As String
'simpan nomor lamaran dan nama pelamar ke tabel nilai
Transfer = "insert into Nilai(Nomorlmr,Nama) " & Chr(13)
& _
"values ('" & RSPelamar!NomorLmr & "','"
& RSPelamar!Nama & "')"
Conn.Execute (Transfer)
RSPelamar.MoveNext
Loop
MsgBox "Transfer Data Pelamar
Sukses" 'tampilkan pesan sukses
Menu.mntransfer.Visible = False 'menu
transfer data disembunyikan
Unload Me 'form langsung ditutup
End Sub
Jika
program di atas dijalankan akan menghasilkan data sebagai berikut:
Entri Nilai Testing (Model Pertama)
Data
nilai dientri langsung dalam DataGrid, di mana nomor lamaran dan nama pelamar
telah ditransfer oleh program sebelumnya. Buatlah GUI dengan bentuk seperti Gambar
7.7 berikut ini.
Listing Program :
Private Sub Form_Activate()
Adodc1.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path &
"\ADOSeleksi.mdb"
Adodc1.RecordSource = "Nilai"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
End Sub
Private Sub Command1_Click() 'jika
command1 diklik
Pesan = MsgBox("yakin akan
dihapus..?", vbYesNo, "konfirmasi") 'tampilkan pesan..
If Pesan = vbYes Then 'jika dijawab YES
Adodc1.Recordset.MoveFirst 'mulailah dari record pertama
Do Until Adodc1.Recordset.EOF 'baca tabel sampai record terakhir
For i = 1 To Adodc1.Recordset.RecordCount 'lakukan berulang-ulang
sebanyak data nilai
Adodc1.Recordset!Nilai1 = 0 'nilai1
kosongkan (dan seterusnya)
Adodc1.Recordset!Nilai2 = 0
Adodc1.Recordset!Nilai3 = 0
Adodc1.Recordset!Nilai4 = 0
Adodc1.Recordset!Total = 0
Adodc1.Recordset!Skor = 0
Adodc1.Recordset!Ket = vbNullString
Next i
Adodc1.Recordset.MoveNext
Loop
End If
End Sub
Private Sub Command2_Click() 'jika
command2 diklik
Call BukaDB 'buka database
Dim HapusHasil As String
HapusHasil = "delete * from Hasil" 'hapus dulu isi tabel nilai
Conn.Execute (HapusHasil) 'eksekusi
penghapusan
Adodc1.Recordset.MoveFirst 'mulailah
dari baris awal
Do Until Adodc1.Recordset.EOF 'lakukan
sampai baris akhir
If Adodc1.Recordset!Ket = "LULUS" Then 'jika keteragannya
LULUS
Dim SimpanHasil As String
'simpan data yang lulus tersebut
SimpanHasil = "insert
into hasil(Nomorlmr,nama,Nilai1,Nilai2,Nilai3,Nilai4,Total,Skor,ket) values
" & Chr(13) & _
"('" & Adodc1.Recordset!NomorLmr & "','"
& Adodc1.Recordset!Nama & "', " & Chr(13) & _
"'" & Adodc1.Recordset!Nilai1 & "','" &
Adodc1.Recordset!Nilai2 & "', " & Chr(13) & _
"'" & Adodc1.Recordset!Nilai3 & "','" &
Adodc1.Recordset!Nilai4 & "', " & Chr(13) & _
"'" & Adodc1.Recordset!Total & "','" &
Adodc1.Recordset!Skor & "','" & Adodc1.Recordset!Ket &
"')"
Conn.Execute (SimpanHasil)
'eksekusi penyimpanan
End If
Adodc1.Recordset.MoveNext
Loop
MsgBox "Data Yang Lulus Berhasil
Disimpan" 'tampilkan pesan
End Sub
Private Sub
DataGrid1_AfterColUpdate(ByVal ColIndex As Integer) 'setelah kolom diedit (diisi
data)
On Error GoTo salah
If DataGrid1.Col = 2 Then 'jika saat
itu kursor berada di kolom 3 (nilai1)
Nilai 'jalankan prosedur pencari nilai
Adodc1.Recordset.MoveNext 'kursor pindah ke baris berikutnya
DataGrid1.Col = 2 'kursor pindah ke kolom 3 (nilai1)
ElseIf DataGrid1.Col = 3 Then
Nilai
Adodc1.Recordset.MoveNext
DataGrid1.Col = 3
ElseIf DataGrid1.Col = 4 Then
Nilai
Adodc1.Recordset.MoveNext
DataGrid1.Col = 4
ElseIf DataGrid1.Col = 5 Then
Nilai
Adodc1.Recordset.MoveNext
DataGrid1.Col = 5
End If
On Error GoTo 0
Exit Sub
salah:
MsgBox "Cek isi data, harus
angka"
End Sub
Private Sub Form_Load()
DataGrid1.Col = 2
End Sub
'prosedur mencari nilai
Sub Nilai()
'Total=(Nilai1+Nilai2+Nilai3+Nilai4)
DataGrid1.Columns(6) = Val(Adodc1.Recordset!Nilai1) +
Val(Adodc1.Recordset!Nilai2) + Val(Adodc1.Recordset!Nilai3) +
Val(Adodc1.Recordset!Nilai4)
'Skor=Total/4
Adodc1.Recordset!Skor = DataGrid1.Columns(6) / 4
'Ket=Jika skor >=80 maka LULUS
If Val(Adodc1.Recordset!Skor) >= 80 Then Adodc1.Recordset!Ket =
"LULUS" Else Adodc1.Recordset!Ket = "GAGAL"
End Sub
Data
di tabel nilai seperti Gambar 7.9 sifatnya dinamis, artinya setiap kali terjadi
perubahan maka data tersebut secara otomatis akan disimpan. Ketika command
“Simpan Pelamar Yang Lulus” di klik akan menghasilkan data sebagai berikut:
Entri Nilai Testing (Model Kedua)
Pada
model kedua ini pola relasi berbentuk one to many dimana data disimpan pada
tabel Nilai1 dan DetailNilai1. buatlah form seperti gambar berikut ini.
Coding:
'mencari nomor otomatis
Private Sub Auto()
Call BukaDB
'baca tabelNilai1 yang IDnya paling
akhir
RSNilai1.Open "select * from
Nilai1 Where ID In(Select Max(ID)From Nilai1)Order By ID Desc", Conn
RSNilai1.Requery
Dim Urutan As String * 10
Dim Hitung As Long
With RSNilai1
'jika tidak ditemukan maka...
If .EOF Then
Urutan = Right(Date, 2) + Mid(Date,
4, 2) + Left(Date, 2) + "0001"
'no IDnya adalah YYMMDD0001
LblID = Urutan
Else
'jika ganti hari maka... nomor
IDnya
If Left(!ID, 6) <>
Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then
'YYMMDD0001
Urutan = Right(Date, 2) +
Mid(Date, 4, 2) + Left(Date, 2) + "0001"
Else
'jika harinya sama maka...
YYMMDD0001+1
Hitung = (!ID) + 1
Urutan = (Right(Date, 2) +
Mid(Date, 4, 2) + Left(Date, 2)) + Right("0000" & Hitung, 4)
End If
End If
ID = Urutan
End With
End Sub
Private Sub Form_Activate()
Adodc1.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path &
"\ADOBeli.mdb"
Adodc1.RecordSource =
"Transaksi"
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
Call BukaDB
RSPelamar.Open "Pelamar", Conn
Combo1.Clear
Do Until RSPelamar.EOF
Combo1.AddItem RSPelamar!NomorLmr
RSPelamar.MoveNext
Loop
Call Tabel_Kosong
Adodc1.Recordset.MoveFirst
Call Auto
End Sub
Private Sub Combo1_Keypress(Keyascii As
Integer)
On Error Resume Next
Keyascii = Asc(UCase(Chr(Keyascii)))
If Keyascii = 13 Then
If Combo1 = "" Then
MsgBox "pilih kode Pelamar...!"
Combo1.SetFocus
Exit Sub
Else
Call BukaDB
RSPelamar.Open "Select * from Pelamar where NomorLmr='" &
Combo1 & "'", Conn
If Not RSPelamar.EOF Then
RSDetail.Open "Select distinct
nomorlmr from DetailNilai1 where nomorlmr='" & Combo1 &
"'", Conn
If Not RSDetail.EOF Then
MsgBox "Data nilai sudah
dientri"
Combo1.SetFocus
Exit Sub
Else
Nama = RSPelamar!Nama
DataGrid1.SetFocus
DataGrid1.Col = 2
End If
Else
MsgBox "nomor pelamar tidak
terdaftar"
Combo1.SetFocus
Exit Sub
End If
End If
End If
If Keyascii = 27 Then Unload Me
End Sub
Private Sub Combo1_Click()
Call BukaDB
RSPelamar.Open "Select * from Pelamar where NomorLmr='" &
Combo1 & "'", Conn
If Not RSPelamar.EOF Then
Nama = RSPelamar!Nama
End If
Conn.Close
End Sub
Function Tabel_Kosong()
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Loop
For i = 1 To 1
Adodc1.Recordset.AddNew
Adodc1.Recordset!Nomor = i
Adodc1.Recordset!Test = "Nilai" + Str(i)
Adodc1.Recordset.Update
Next i
DataGrid1.Col = 1
End Function
Function Tambah_Baris()
For i = Adodc1.Recordset.RecordCount To Adodc1.Recordset.RecordCount
Adodc1.Recordset.AddNew
Adodc1.Recordset!Nomor = i + 1
Adodc1.Recordset!Test = "Nilai " + Adodc1.Recordset!Nomor
Adodc1.Recordset.Update
Next i
End Function
Private Sub DataGrid1_Keypress(Keyascii
As Integer)
If DataGrid1.Col = 2 Then
If Not (Keyascii >= Asc("0") And Keyascii <=
Asc("9") Or Keyascii = vbKeyBack Or Keyascii = vbKeyReturn) Then
Keyascii = 0
End If
End Sub
Private Sub
DataGrid1_AfterColEdit(ByVal ColIndex As Integer)
On Error Resume Next
If DataGrid1.Col = 2 Then
Adodc1.Recordset!Nilai = DataGrid1.SelText
Adodc1.Recordset.Update
DataGrid1.Refresh
Call Tambah_Baris
Adodc1.Recordset.MoveNext
DataGrid1.Col = 2
Adodc1.Recordset.MoveLast
Total = Format(TotalNilai, "#,###,###")
Skore = Total / 4
If Skore >= 80 Then
Ket = "Lulus"
Else
Ket = "Gagal"
End If
If Adodc1.Recordset.RecordCount = 6 Then
DataGrid1.Enabled = False
Cmdsimpan.SetFocus
End If
End If
End Sub
Private Sub Bersihkan()
Total = ""
Skore = ""
Ket = ""
Nama = ""
End Sub
Private Sub CmdSimpan_Click()
If Combo1 = "" Or Total =
"" Or Skore = "" Or Ket = "" Then
MsgBox "Data belum lengkap"
Exit Sub
Else
If Total = "" Then
MsgBox "tidak ada entri nilai"
Exit Sub
End If
End If
Call BukaDB
'simpan transaksi ke tbl Nilai1
Dim SimpanNilai1 As String
SimpanNilai1 = "Insert Into Nilai1(id,Total,Skor,Ket)" & _
"values('" & ID & "','" & Total &
"','" & Skore & "','" & Ket &
"')"
Conn.Execute (SimpanNilai1)
'simpan data transaksi ke tabel DetailNilai1
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
If Adodc1.Recordset!Nilai <> vbNullString Then
Dim SQLDetail As String
SQLDetail = "Insert Into
DetailNilai1(id,Nomorlmr,Test,Nilai) " & _
"values ('" & ID
& "','" & Combo1 & "','" &
Adodc1.Recordset!Test & "','" & Adodc1.Recordset!Nilai &
"')"
Conn.Execute (SQLDetail)
End If
Adodc1.Recordset.MoveNext
Loop
Bersihkan
Form_Activate
Combo1.SetFocus
End Sub
Private Sub CmdBatal_Click()
Call Bersihkan
Combo1.SetFocus
Form_Activate
End Sub
Function TotalNilai()
Set TTLNilai = New ADODB.Recordset
TTLNilai.Open "select sum(Nilai) as JumTotal from Transaksi", Conn
TTLNilai.Requery
TotalNilai = TTLNilai!JumTotal
End Function
Private Sub Cmdtutup_Click()
Bersihkan
Call Tabel_Kosong
Unload Me
End Sub
Membuat Laporan
Laporan Jadwal Ujian
1.
Buatlah
laporan jadwal ujian dengan rancangan seperti Gambar
7.12 berikut ini kemudian simpan dengan nama Lap Data Jadwal.
Cara
menyisipkan pengelompokkan tanggal adalah dengan melakukan klik kanan pada
salah satu field di area detail kemudian pilih insert sumary. Pilihlah
pengelompokkan berdasarkan tanggal, lalu klik OK.
2.
Buatlah sebuah menu di
menu utama untuk memanggil laporan data jadwal, kemudian tulis coding berikut
ini dan jangan lupa menambahkan objek Crystal Report (Ubah namanya menjadi CR1)
di form menu.
Private
Sub mnlapjadwal_Click()
'memanggil
file laporan
CR1.ReportFileName
= App.Path & "\Lap Jadwal.rpt"
'tampilkan
satu layar penuh
CR1.WindowState
= crptMaximized
'jika
ada perubahan data direfresh
CR1.RetrieveDataFiles
'tampilkan
le layar
CR1.Action
= 0
End
Sub
3.
Jika program dijalankan
akan menghasilkan laporan sebagai berikut.
Laporan
di atas hanya diambil sebagian saja, dalam kondisi sebenarnya akan terlihat
laporan lain di bawahnya yaitu tanggal 24/09/07, Grup 2, dimulai dari nomor
lamaran 0006 sampai 0010.
Laporan Nilai Ujian
Buatlah
form dengan bentuk sebagai berikut dengan mengubah nama objek Crystal Report
menjadi CR.
Coding:
Private Sub Command1_Click()
'panggil file laporan
CR.ReportFileName = App.Path &
"\Lap Nilai.rpt"
'jika ada perubahan data direfresh
CR.WindowState = crptMaximized
'tampilkan satu layar penuh
CR.RetrieveDataFiles
'tampilkan ke layar
CR.Action = 0
End Sub
Private Sub Command2_Click()
CR.ReportFileName = App.Path &
"\Lap Cadangan.rpt"
CR.WindowState = crptMaximized
CR.RetrieveDataFiles
CR.Action = 0
End Sub
Private Sub Form_Load()
List1.AddItem "LULUS"
List1.AddItem "GAGAL"
End Sub
Private Sub List1_Click()
'panggil laporan nilai yang
keterangannya = list1
CR.SelectionFormula =
"{Nilai.Ket}='" & List1 & "'"
CR.ReportFileName = App.Path &
"\Lap Nilai.rpt"
CR.WindowState = crptMaximized
CR.RetrieveDataFiles
CR.Action = 0
End Sub
1.
Selain itu rancanglah
laporan data hasil (pelamar yang dinyatakan lulus). Di sini Anda tidak perlu
membuat rancangan laporan dari awal, cukup dengan menyimpan file Lap Data Nilai
melalui menu Save As, kemudian ganti nama filenya setelah itu ganti judul
laporan. Untuk menyaring data pelamar yang lulus saja klik kanan field KET di
baris detail kemudian pilih Select Record Expert. Dalam menu klik combobox
kemudian pilih Equal To dan klik juga combobox di sebelah kanannya lalu pilih
LULUS lalu klik OK
2.
Anda juga dapat membuat
laporan data pelamar yang gagal untuk mengantisipasi pelamar yang dinyatakan
lulus tetapi mengundurkan diri. Dengan laporan data pelamar yang gagal kita
dapat mempertimbangkan pelamar dengan nilai tertinggi. Cara membuat
rancangannya cukup dengan membuka file laporan nilai, simpan dengan Save As,
ubah judul laporan, saring data berdasarkan yang gagal dan urutkan berdasarkan
skor secara descending. Caranya adalah klik field Skor di baris detail, Klik
menu report > Sort Records > klik Nilai.Skor > Add > Descending.
Perhatikanlah
nomor pelamar, terlihat tidak terurut. Tetapi kita lihat skor telah diurutkan
dengan nilai tertinggi. Laporan seperti ini dapat membantu mempermudah mencari
data yang diperlukan dengan cara mengurutkan data skor dengan nilai terbesar.
EmoticonEmoticon