![]() |
Emely.Net Banner Exchange |
1. Buka kembali program Latihan1 diatas, jalankan program diatas, dan carilah kelemahan-kelemahan yang ada, serta lengkapi program diatas untuk menutupi lubang kelemahan tersebut.
Salah satu kelemahan dari program adalah tidak memeriksa kebenaran pengetikkan tanggal pada txtTglLahir, sehingga perlu di buat Event Validate.
Private Sub txtTglLahir_Validate(Cancel As Boolean) If Not IsDate(txtTglLahir.Text) Then MsgBox "Anda perlu memasukkan tanggal lahir" Cancel = True End If End Sub
2. Lengkapi program Latihan2 dengan kemampuan memeriksa apakah data yang dimasukkan telah ada pada random file atau tidak, adapun kunci yang digunakan adalah alamat Email pada saat penyimpanan.
Solusi :
Untuk memeriksa apakah alamat Email data yang akan ditambahkan telah pernah terdaftar atau tidak, kita perlu membuat suatu fungsi pencarian berdasarkan alamat Email.
Adapun proses yang dilakukan oleh fungsi ini adalah mencari mulai dari record 1 s/d JlhRec (posisicari), dan akan mengembalikan nomor record dimana data berhasil ditemukan ( 1 s/d JlhRec). Jika pencarian tidak ditemukan, maka akan dikembalikan (JlhRec+1).
Private Function PeriksaUnique(Email As String) As Integer Static nama As String Dim posisicari As Integer posisicari = 1 'Mulai dari record 1 Do While posisicari <= JlhRec 'Sampai jlhRec Get #1, posisicari, DatPeserta 'Baca record If RTrim(DatPeserta.Email) = Email Then 'Bandingkan alamat Email Exit Do 'Kalau ketemu keluar dari looping End If posisicari = posisicari + 1 'Naikan posisicari Loop PeriksaUnique = posisicari 'Kembalikan posisi End Function 'Jika JlhRec+1 adalah tidak ketemu
Kemudian lakukan modifikasi pada bagian Update, dimana sebelum melakukan penyimpanan, perlu di periksa apakah alamat email yang sama telah ada dengan memanggil fungsi yang telah dibuat sebelumnya. Sesuatu hal yang perlu diperhatikan adalah, jika Aksi adalah flAdd maka alamat email tidak boleh ditemukan, tetapi jika flEdit, maka kalau alamat email ditemukan tidak boleh sama dengan posisi record yang sedang diperbaiki.
Private Sub cmdUpdate_Click() Dim nPeriksaUnique If Aksi = flAdd Or Aksi = flEdit Then If Trim$(txtEmail.Text) = "" Then MsgBox "Alamat Email tidak bisa kosong" txtEmail.SetFocus Exit Sub End If If Trim$(txtNama.Text) = "" Then MsgBox "Nama tidak bisa kosong" txtNama.SetFocus Exit Sub End If 'Bagian ini ditambahkan nPeriksaUnique = PeriksaUnique(txtEmail.Text) 'Periksa keberadaan email If nPeriksaUnique <= JlhRec Then 'Jika posisi <= JlhRec (Ketemu) If Aksi = flAdd Then 'Kalau Aksi adalah flAdd MsgBox "Alamat Email address telah ada" 'Buat pesan telah ada txtEmail.SetFocus 'Kembalikan fokus ke Email Exit Sub Else 'Jika flEdit If nPeriksaUnique <> Posisi Then 'Jika bukan nomor record yang sedang diPerbaiki MsgBox "Alamat Email address telah ada" txtEmail.SetFocus 'Kembalikan fokus ke Email Exit Sub End If End If End If If Aksi = flAdd Then JlhRec = JlhRec + 1 Posisi = JlhRec End If DatPeserta.Email = txtEmail.Text DatPeserta.nama = txtNama.Text DatPeserta.Alamat = txtAlamat.Text DatPeserta.Kota = txtKota.Text DatPeserta.Negara = cboNegara.Text DatPeserta.Propinsi = cboPropinsi.Text DatPeserta.Tempat = txtTempat.Text DatPeserta.TglLahir = txtTglLahir.Text DatPeserta.Pria = chkPria.Value Put #1, Posisi, DatPeserta Call Kunci End If End Sub
3. Lengkapi program Latihan2 dengan kemampuan Find Next, dimana mencari data memenuhi syarat yang berikutnya.
Solusi :
Untuk membuat fasilitas FindNext, kita perlu membuat suatu Sub Cari, dimana memiliki satu argumen yang menunjukkan apakah pencarian tersebut merupakan Find pertama kali atau merupakan Find Berikutnya. Adapun proses yang dilakukan adalah jika merupakan Find pertama kali, maka Sub akan menampilkan inputbox yang menanyakan "Nama yang akan dicari", dan melakukan pencarian mulai dari posisi record nomor 1, tetapi jika merupakan Find berikutnya, maka pencarian akan dilanjutkan dari posisi sebelumnya.
Dalam hal ini kita membutuhkan variabel Static untuk menyimpan PosisiCari dan Nama pencarian sehingga data PosisiCari dan Nama akan dipertahankan untuk pemanggilan berikutnya.
Private Sub Cari(Pertama As Boolean) Static nama As String 'Nama Static agar bisa dipertahankan isinya Static posisicari As Integer 'PosisiCari Static If Pertama Then 'Jika Find Pertama kali nama = InputBox("Masukkan nama :", "Pencarian") 'Tanya nama yang dicari posisicari = 1 'Mulai dari record 1 Else 'Find Berikutnya posisicari = posisicari + 1 'Mulai dari posisi sebelumnya + 1 End If If nama <> "" Then Do While posisicari <= JlhRec Get #1, posisicari, DatPeserta If RTrim(DatPeserta.nama) = nama Then Exit Do End If posisicari = posisicari + 1 Loop If posisicari <= JlhRec Then Posisi = posisicari Call Tampil Else MsgBox "Peserta dengan nama tersebut tidak ada", vbOKOnly + vbInformation, "Pencarian" End If End If End Sub
Lakukan modifikasi pada cmdFind
Private Sub cmdFind_Click() Cari (True) 'Find pertama kali (True) End Sub
Lakukan modifikasi pada cmdFindNext
Private Sub cmdFindNext_Click() Cari (False) 'Find berikutnya (False) End Sub
4. Buatlah semua form-form diatas ditampilkan ditengah layar pada saat di jalankan.
Solusi :
Buatlah sub Tengah dengan parameter adalah suatu form
Private Sub Tengah(x) Move (Screen.Width - x.Width) \ 2, (Screen.Height - x.Height) \ 2 End Sub
Tambahkan perintah Call Tengah(Me) pada Event Form Load.
Private Sub Form_Load() 'Subrutin ini akan dijalankan ketika form di load 'ke memory 'Isi cboNegara dengan file Negara.txt Dim Item As String Open "Negara.txt" For Input As #1 Do While Not EOF(1) Input #1, Item cboNegara.AddItem (Item) Loop Close #1 'Isi cboPropinsi dengan file Propinsi.txt Open "Propinsi.txt" For Input As #1 Do While Not EOF(1) Input #1, Item cboPropinsi.AddItem (Item) Loop Close #1 'Buka Random file Peserta.Dat Open "Peserta.Dat" For Random As #1 Len = Len(DatPeserta) JlhRec = LOF(1) / Len(DatPeserta) If JlhRec > 0 Then Posisi = 1 Else Posisi = 0 End If Call Tengah(Me) Call Tampil End Sub