MEMBUAT FORM TRANSAKSI PERSEWAAN VCD
1. Buatlah desain seperti gambar berikut ini. Desain kali ini sedikit lebih rumit karena didalamnya kita akan menggunakan dua buah Panel, yang masing-masing panel mewakili satu tabel, yang diletakkan pada halaman pertama Page Control :
2. Ubahlah properties untuk desain form diatas :
Componen Pallete Object Inspector
Tab Object Properties Keterangan
Win32
Page Control TabSheet1, Caption I&nput dan Edit Sewa TabSheet2, Caption &Lihat Data Persewaan DateTimePicker1 Name DtpTglSewa
Standard
Edit Name EdNoSewa
Button1 Name BtCek
Caption &Cek
Button2 Name BtInputPLG
Caption Input P&elanggan
Button3 Name BtBatal2
Caption Bata&l
Button4 Name BtTambahVCD
Button5 Name BtHapusDaftar Caption Hapus Dari Daftar
Button6 Name BtTambah
Caption &Tambah
Button7 Name BtEdit
Caption &Edit
Button8 Name BtSimpan
Caption &Simpan
Button9 Name BtBatal
Caption &Batal
Button10 Name BtKeluar
Caption &Keluar
ListBox1 Name LstKode
ListBox2 Name LstJudul
ListBox3 Name LstJenis
Additional StaticText1 Name StKodePlg BorderStyle SbsSunken AutoSize False StaticText2 Name StNamaPLG BorderStyle SbsSunken AutoSize False StaticText3 Name StAlamatPLG BorderStyle SbsSunken AutoSize False StaticText4 Name StStatus BorderStyle SbsSunken AutoSize False StaticText5 Name StTotal BorderStyle SbsSunken AutoSize False StaticText6 Name StJMLVCD BorderStyle SbsSunken AutoSize False StaticText7 Name StTarif BorderStyle SbsSunken AutoSize False StaticText8 Name StLamaSewa BorderStyle SbsSunken AutoSize False BDE Table1 DatabaseName RentalVCD Name tVCD TableName VCD.db AutoRefresh True Active True
Name tPelanggan TableName Pelanggan.db AutoRefresh True Active True Table3 DatabaseName RentalVCD Name tTarif TableName Bantu.db AutoRefresh True Active True Table4 DatabaseName RentalVCD Name tSewa TableName Persewaan.db AutoRefresh True Active True Table5 DatabaseName RentalVCD Name tVCD2 TableName VCD.db AutoRefresh True Active True Table6 DatabaseName RentalVCD Name tPelanggan2 TableName Pelanggan.db AutoRefresh True Active True DataAccess DataSource DataSet tVCD Name DsVCD
DataSource DataSet tPelanggan
Name DsPelanggan
DataSource DataSet tSewa
Name DsSewa
3. Berikutnya masukan Panel ke Dalam PageControl pada halaman 1 untuk membuat desain tampilan tabel pelanggan seperti dibawah ini :
4. Rubah Propertiesnya :
Componen Pallete Object Inspector
Tab Object Properties Keterangan
Standard
Panel Name PnPelanggan
Caption (Kosongi)
Edit Name EdCariNama
Text (Kosongi)
Button1 Name BtBatal3
Caption B&atal
Additional StaticText
Caption
Double Klick Untuk Memasukan Data Pelanggan
BorderStyle sbsSunken Auto Size False
DataControl DBGrid DataSource DsPelanggan
Win32 Animate Name AnmPelanggan
CommonAVI aviFindFile Panel Edit Button
DBGrid
Active False
5. Berikutnya buat sub desain form yang kedua, yang masih berada pada halaman1 PageControl. Sebagai berikut :
6. Atur Propertiesnya :
Componen Pallete Object Inspector
Tab Object Properties Keterangan
Standard
Panel Name PnVCD
Caption (Kosongi)
Edit Name EdCariJudul
Text (Kosongi)
Button1 Name BtBatal4
Caption Batal
Additional StaticText
Caption Double Klick Untuk Memasukan Data VCD BorderStyle sbsSunken
Auto Size False Panel
Edit Button
Animate StaticText
DataControl DBGrid DataSource DsVCD Win32 Animate
Name AnmVCD
CommonAVI aviFindFile
Active False
7. Selanjutnya Desain PageControl Halaman ke 2 sebagai berikut :
8. Atur Propertiesnya :
Componen Pallete Object Inspector
Tab Object Properties Keterangan
Standard
Edit Name EdCari
Button1 Name BtHapus1
Caption Hap&us Satu
Button2 Name BtHapusBanyak
Caption Hapus / Transaksi
RadioGroup Name RgCari
Items Nomor Sewa
Tanggal Sewa Kode Pelanggan DBGrid StaticText1 StaticText2 StaticText3 StaticText4 DBNavigator RadioGroup Edit DateTimePicker Button1 Button2
Kode VCD Caption Pencarian Data
Win32 DateTimePicker Name DtpCari
Visible False
Additional
StaticText1 Name StCariNama
BorderStyle sbsSunken
StaticText2 Name StCariAlamat
BorderStyle sbsSunken
StaticText3 Name StCariJudul
BorderStyle sbsSunken
StaticText4 Name StCariJenis
BorderStyle sbsSunken DataControl DBGrid DataSource DsSewa
DBNavigator DataSource DsSewa
VisibleButtons [nbFirst, nbPrior, nbNext, nbLast] 9. Deklarasikan beberapa procedure berikut ini :
….. procedure SeleksiItem(Lst:TListBox); procedure BuatNoSewa; procedure AktifkanKode; procedure Aktifkan; procedure CariKeterangan; …..
10. Deklarasikan beberapa Variabel Global, sbb : ….. var FrmSewa: TFrmSewa; Konfirmasi:Integer; Edit, Ketemu:Boolean; Nomor:String[10];
11. Buat kode program untuk procedure SeleksiItem :
Procedure TFrmSewa.SeleksiItem(Lst:TListBox); begin LstKode.ItemIndex:=Lst.ItemIndex; LstJudul.ItemIndex:=Lst.ItemIndex; LstJenis.ItemIndex:=Lst.ItemIndex; end;
//Double Klick LstKode
procedure TFrmSewa.LstKodeClick(Sender: TObject); begin
SeleksiItem(LstKode); end;
//Double Klick LstJudul
procedure TFrmSewa.LstJudulClick(Sender: TObject); begin
SeleksiItem(LstJudul); end;
//Double Klick LstJenis
procedure TFrmSewa.LstJenisClick(Sender: TObject); begin
SeleksiItem(LstJenis); end;
12. Buat kode program untuk membuat Nomor Sewa yang akan dibuat dengan format : ttmm.99999
tt : untuk menampung 2 digit tahun terakhir mm : untuk menampung 2 digit angka bulan
99999 : untuk menampung urutan data yang disesuaikan atau dilengkapi dengan angka 0
Procedure TFrmSewa.BuatNoSewa;
var Tanggal, Hasil, NSewa:String[10]; Th, Bl :String[2]; NilaiU:String[5]; i, n:Integer; begin Tanggal:=FormatDateTime('dd/mm/yyyy',date); //ambil tahun for i:=9 to 10 do begin Th:=Th+Tanggal[i]; end; //ambil bulan for i:=4 to 5 do begin Bl:=Bl+Tanggal[i]; end;
if tSewa.RecordCount=0 then n:=1 else begin tSewa.IndexName:='IdxNoSewa'; tSewa.Last; NSewa:=tSewa['NoSewa'];
//ambil dari kanan sebanyak 5 karakter for i:=6 to 10 do begin NilaiU:=NilaiU+NSewa[i]; end; n:=StrToInt(NilaiU)+1; end;
//gabung hasil pembuatan NoSewa case Length(trim(IntToStr(n))) of 1: Hasil:=Th+bl+'.'+'0000'+Trim(IntToStr(n)); 2: Hasil:=Th+bl+'.'+'000'+Trim(IntToStr(n)); 3: Hasil:=Th+bl+'.'+'00'+Trim(IntToStr(n)); 4: Hasil:=Th+bl+'.'+'0'+Trim(IntToStr(n)); 5: Hasil:=Th+bl+'.'+Trim(IntToStr(n)); end; EdNoSewa.Text:=Hasil; EdNoSewa.SelStart:=length(trim(Hasil)); end;
13. Buat kode program untuk mengaktifkan komponen-komponen yang ada : procedure TFrmSewa.AktifkanKode; begin BtCek.Enabled:=True; BtCek.Default:=True; BtTambah.Enabled:=False; BtEdit.Enabled:=False; BtBatal.Enabled:=True; EdNoSewa.Enabled:=True; EdNoSewa.Color:=clWhite; if Edit=False then BuatNoSewa; EdNoSewa.SetFocus; end;
procedure TFrmSewa.Aktifkan; var Lama:Integer; begin If Edit=False then EdNoSewa.Enabled:=False; LstKode.Clear; LstJudul.Clear; LstJenis.Clear; LstKode.Enabled:=True; LstJudul.Enabled:=True; LstJenis.Enabled:=True; LstKode.Color:=clWhite; LstJudul.Color:=clWhite; LstJenis.Color:=clWhite; //atur tombol BtCek.Enabled:=False; BtCek.Default:=False; BtInputPlg.Enabled:=True; BtBAtal2.Enabled:=True; BtTambahVCD.Enabled:=True; BtHapusdaftar.Enabled:=True; BtSimpan.Enabled:=True;
//Tampilkan tarif sewa
Ketemu:=tTarif.FindKey(['S']); if Ketemu=True then StTarif.Caption:=tTarif['Nilai'] else StTarif.Caption:='0'; //tampilkan tanggal DtpTglSewa.Enabled:=True; DtpTglSewa.Color:=clWhite; DtpTglSewa.Date:=Date;
//cari ketetetapan lama sewa berdasarkan tabel bantu tTarif.IndexName:=''; Ketemu:=tTarif.FindKey(['L']); if Ketemu=True then lama:=tTArif['Nilai'] else lama:=0; StLamaSewa.Caption:=IntToStr(Lama); end;
15. Buat kode program untuk procedure CariKeterangan : procedure TFrmSewa.CariKeterangan;
begin
begin StcariNama.Caption:=''; StCariAlamat.Caption:=''; StCariJudul.Caption:=''; StCariJenis.Caption:=''; end else begin
//cari keterangan pelanggan tPelanggan2.IndexName:=''; Ketemu:=tPelanggan2.FindKey([tSewa['KodePLG']]); if Ketemu=True then begin StcariNama.Caption:=tPelanggan2['Nama']; StCariAlamat.Caption:=tPelanggan2['Alamat']; end else begin
StcariNama.Caption:='KodePLG tidak ada...'; StCariAlamat.Caption:='Data hilang...'; end; //cari keterangan VCD tVCD2.IndexName:=''; Ketemu:=tVCD2.FindKey([tSewa['KodeVCD']]); if Ketemu=True then begin StCariJudul.Caption:=tVCD2['Judul_Film']; if tVCD2['Jenis']='A' then StCariJenis.Caption:='ACTION' else if tVCD2['Jenis']='H' then StCariJenis.Caption:='HOROR' else if tVCD2['Jenis']='K' then StCariJenis.Caption:='KOMEDI' else if tVCD2['Jenis']='D' then StCariJenis.Caption:='DRAMA' else if tVCD2['Jenis']='N' then
StCariJenis.Caption:='ANAK-ANAK' else if tVCD2['Jenis']='V' then
StCariJenis.Caption:='VIDEO KLIP' else if tVCD2['Jenis']='M' then
StCariJenis.Caption:='FILM MANDARIN' else StCariJenis.Caption:='FILM DOKUMENTER'; end else begin
StCariJenis.Caption:='Data hilang...'; end;
end; end;
16. Buat kode program untuk tombol Batal pada event OnClick : procedure TFrmSewa.BtBatalClick(Sender: TObject); begin EdNoSewa.Text:=''; EdNoSewa.Enabled:=False; DtpTglSewa.Enabled:=False; EdNoSewa.Color:=clBtnFace; DtpTglSewa.Color:=clBtnFace; StKodePlg.Caption:=''; StNamaPlg.Caption:=''; StAlamatPLG.Caption:=''; StLamaSewa.Caption:=''; StTarif.Caption:=''; StJMLVCD.Caption:=''; StTotal.Caption:=''; StStatus.Caption:=''; LstKode.Clear; LstJudul.Clear; LstJenis.Clear; LstKode.Enabled:=False; LstJudul.Enabled:=False; LstJenis.Enabled:=False; LstKode.Color:=clBtnface; LstJudul.Color:=clBtnface; LstJenis.Color:=clBtnface;
//onaktifkan frame VCD dan pelanggan jika aktif BtBatal3Click(sender); BtBatal4Click(sender); //atur tombol BtCek.Enabled:=False; BtCek.Default:=False; BtTambah.Enabled:=True; BtEdit.Enabled:=True; BtSimpan.Enabled:=False; BtBatal.Enabled:=False; BtINputPlg.Enabled:=False; BtBatal2.Enabled:=False; BtTambahVCD.Enabled:=False; BtHapusDaftar.Enabled:=False; end;
17. Buat kode program untuk memanggil kembali kode program dalam tombol batal pada event onCreate dalam form melalui object inspector :
procedure TFrmSewa.FormCreate(Sender: TObject); begin
BtBatalClick(Sender);
Dbgrid2.Columns.RebuildColumns; end;
18. Buat kode program untuk tombol Tambah :
procedure TFrmSewa.BtTambahClick(Sender: TObject); begin
Edit:=False; AktifkanKode;
StStatus.Caption:='Tambah Data'; end;
19. Buat kode program untuk tombol Edit :
procedure TFrmSewa.BtEditClick(Sender: TObject); begin
Edit:=True; AktifkanKode;
StStatus.Caption:='Edit Data'; end;
20. Buat kode program untuk mengecek Nomor Sewa yang ada pada komponen Edit pada tombol Cek :
procedure TFrmSewa.BtCekClick(Sender: TObject); begin
if Length(Trim(EdNoSewa.Text))=0 then begin
Application.MessageBox('No. Sewa masih kosong...','Cek Input',MB_IconStop);
EdNoSewa.SetFocus; end
else begin
//set index tabel pada kunci utama tSewa.IndexName:='IdxNoSewa';
Ketemu:=tSewa.FindKey([Trim(EdNoSewa.Text)]); if Ketemu=True then
//jika data ketemu
//cek dulu edit atau tambah begin
if Edit=True then
//jika edit, tampilkan datanya begin
Aktifkan;
Nomor:=tSewa['NoSewa']; //digunakan untuk pengeditan //tampilkan detail
//cetak data yang sama terlebih dahulu DtpTglSewa.Date:=tSewa['TglSewa']; StLamaSewa.Caption:=tSewa['LamaSewa']; StKodePLG.Caption:=tSewa['KodePLG']; StTarif.Caption:=tSewa['TarifSewa']; //masukan data pelanggan
Ketemu:=tPelanggan.FindKey([tSewa['KodePLG']]); if ketemu=True then begin StNamaPlg.Caption:=tPelanggan['Nama']; StAlamatPlg.Caption:=tPelanggan['Alamat']; end else begin StNamaPlg.Caption:=tPelanggan['Kode pelanggan tidak ada...']; StAlamatPlg.Caption:=tPelanggan['Data hilang...']; end;
//masukan kode VCD ke dalam daftar //gunakan perulangan
Ketemu:=False;
while tSewa['NoSewa']=trim(EdNoSewa.Text) do begin
LstKode.Items.Append(tSewa['KodeVCD']); //masukan data VCD kedalam tdaftar film Ketemu:=tVCD.FindKey([tSewa['KodeVCD']]); if Ketemu=True then
begin
LstJudul.Items.Append(tVCD['Judul_Film']); LstJenis.Items.Append(tVCD['Jenis']);
//karena dalam perulangan harus dikembalikan ke false
Ketemu:=False; end
else begin LstJudul.Items.Append('Kode VCD tidak ada...'); LstJenis.Items.Append(tVCD['Data hilang...']); end; tSewa.Next; if tSewa.Eof then begin //tampilkan jumlah VCD StJMLVCD.Caption:=IntToStr(LstKode.Items.Count); //hitung biaya StTotal.Caption:=FloatToStr(LstKode.Items.Count * tSewa['TarifSewa']); exit; end; end; //tampilkan jumlah VCD StJMLVCD.Caption:=IntToStr(LstKode.Items.Count); //hitung biaya StTotal.Caption:=FloatToStr(LstKode.Items.Count * tSewa['TarifSewa']); end else begin
//jika tambah aktifkan beri pesan Nosewa sudah ada application.MessageBox('No. Sewa sudah
ada...','Cek Data',MB_IconInformation); EdNoSewa.Text:=''; EdNoSewa.SetFocus; end; end else
//jika data tidak ketemu //cek dulu edit atau tambah begin
if Edit=True then begin
//beri pesan NoSewa tidak ada
application.MessageBox('No. Sewa tidak ada...','Cek Data',MB_IconInformation); EdNoSewa.Text:='';
EdNoSewa.SetFocus; end
else
//aktifkan objek input Aktifkan;
end end; end;
21. Buat kode program pada tombol input pelanggan yang berfungsi untuk memunculkan komponen Panel yang didalamnya terdapat tabel pelanggan atau data member yang sebelumnya sudah dibuat desainnya dalam PageControl halaman 1 :
procedure TFrmSewa.BtInputPLGClick(Sender: TObject); begin
BtInputPLG.Enabled:=False; BtBatal2.Enabled:=False; pnPelanggan.Visible:=True; //atur posisi panel pelanggan
//supaya berada pada pojok kanan atas
PnPelanggan.Left:=PnSewa.Width - PnPelanggan.Width; PnPelanggan.Top:=PnSewa.Top;
EdCariNama.Text:=''; EdCariNama.SetFocus; //aktifkan animasi cari AnmPelanggan.Active:=True; //refresh tabel
tPelanggan.Active:=True; end;
22. Setelah muncul panel Pelanggan, buat kode program untuk menutup panel tersebut, melalui tombol Batal dalam komponen Panel untuk tabel pelanggan :
procedure TFrmSewa.BtBatal3Click(Sender: TObject); begin
PnPelanggan.Visible:=False; BtInputPLG.Enabled:=True; BtBatal2.Enabled:=True;
//menonaktifkan animasi find file Anmpelanggan.Active:=False;
end;
23. Untuk proses memasukan data pelanggan ke dalam form, dilakukan dengan mengklik dua kali pada komponen DBGrid. Untuk itu masukan kode program berikut ini, pada event OnDBClick pada DBGrid melalui Object Inspector :
procedure TFrmSewa.DBGrid1DblClick(Sender: TObject); begin
StKodePlg.Caption:=tPelanggan['KodePlg']; StNamaPlg.Caption:=tPelanggan['Nama']; StAlamatPlg.Caption:=tPelanggan['Alamat']; //tutup kembali tabel pelanggan
BtBatal3Click(Sender); end;
24. Setelah memasukan data ke dalam form, ada kalanya data yang dimasukan user ke dalam form salah. Untuk mengatasinya, terlebih dahulu data yang salah yang masuk ke dalam form kita hapus, kemudian proses input data pelanggan bisa diulangi lagi dari awal. Kode program berikut ini berfungsi untuk membersihkan tulisan pada komponen StaticTetx data pelanggan :
procedure TFrmSewa.BtBatal2Click(Sender: TObject); begin
stKodePLG.Caption:=''; StNamaPLG.Caption:=''; StAlamatPLG.Caption:=''; end;
25. Dalam komponen Panel pada Tabel pelanggan juga dilengkapi dengan Fasilitas untuk mencari nama pelanggan melalui komponen Edit. Buat kode program untuk mencari data pelanggan berdasarkan nama :
procedure TFrmSewa.EdCariNamaChange(Sender: TObject); begin if length(trim(EDCariNama.Text))=0 then exit else begin tPelanggan.IndexName:='IdxNama'; tPelanggan.FindNearest([trim(EDCariNama.Text)]); end; end;
26. Buat kode program untuk Tombol Tambah VCD, untuk memunculkan panel VCD yang berfungsi untuk memunculkan Panel yang berisi tabel VCD ke dalam Form :
procedure TFrmSewa.BtTambahVCDClick(Sender: TObject); begin
BtTambahVCD.Enabled:=False; BtHapusDaftar.Enabled:=False; PnVCD.Visible:=True;
//atur posisi panel VCD
//supaya berada pada pojok kiri data VCD PnVCD.Left:=GbVCD.Left;
PnVCD.Top:=GbVCD.Top; EdCariJudul.Text:=''; EdCariJudul.SetFocus; //aktifkan animasi cari AnmVCD.Active:=True; //refresh tabel
tVCD.Active:=True; end;
27. Buat kode program untuk memasukan data VCD ke dalam Form, pada event OnDBclick DBGrid yang ada pada panel VCD melalui Objek Inspector : procedure TFrmSewa.DBGrid3DblClick(Sender: TObject); var J:integer;
Cocok:Boolean; begin
//CEK DULU APAKAH ADA YANG SAMA ATAU TIDAK Cocok:=false; for j:=0 to lstkode.Items.Count-1 do begin if tVCD['KodeVCD']=LstKode.Items.Strings[J] then Cocok:=True; end; if Cocok=True then
Application.MessageBox('Data VCD sudah pernah dimasukan...','Cek data',MB_IconInformation) else
begin
//cek dulu persediaan VCD
if tvcd['JML_Persediaan']<=0 then
application.MessageBox('Persediaan habis...','Cek Perseiaan',MB_IconStop)
else begin
//kirim data dari tabel ke form transaksi LstKode.Items.Append(tVCD['KodeVCD']); LstJudul.Items.Append(tVCD['Judul_Film']); LstJenis.Items.Append(tVCD['Jenis']);
//sleksi data yang baru dimasukan
LstKode.ItemIndex:=LstKode.Items.Count-1; LstKode.Selected[LstKode.Items.Count-1]; seleksiItem(LstKode);
//tutup kembali tabel VCD BtBatal4Click(Sender);
//tampilkan jumlah VCD yang dipinjam
//Tampilkan total bayar StTotal.Caption:=FloatToStr(StrToFloat(StJMLVCD.Captio n)*StrToFloat(StTarif.Caption)); end; end; end;
28. Buat kode program untuk menghapus daftar VCD ke dalam daftar VCD yang ditampung dalam ListBox :
procedure TFrmSewa.BtHapusDaftarClick(Sender: TObject); begin if LstKode.Items.Count=0 then application.MessageBox('Daftar VCD kosong...','Akses Ditolak',MB_IconStop) else begin Konfirmasi:=application.MessageBox('Anda yakin...','Konfirmasi Hapus', MB_IconQuestion Or MB_YesNO); if Konfirmasi=IdYes Then begin LstKode.DeleteSelected; LstJudul.DeleteSelected; LstJenis.DeleteSelected; end; if Lstkode.Items.Count=0 then exit else begin LstKode.ItemIndex:=LstKode.Items.Count-1; SeleksiItem(LstKode); end; end; end;
29. Buat kode program untuk menyimpan data transaksi persewaan VCD pada tombol Simpan dalam event OnClick :
procedure TFrmSewa.BtSimpanClick(Sender: TObject); var i, JDaftar:Integer;
//buat precedure di dalam procedure
Procedure KurangiPersediaan(KVCD:String); begin
tVCD.IndexName:='';
Ketemu:=tVCD.FindKey([KVCD]); if Ketemu=True then
begin if tVCD['JML_Persediaan']<=0 then exit else begin tVCD.Edit; tVCD['JML_Persediaan']:=tVCD['JML_Persediaan']-1; tVCD.Post; tVCD.Refresh; end; end else exit; end; begin
//Cek input user
if Length(Trim(StKodeplg.Caption))=0 then begin
Application.MessageBox('Data pelanggan belum diisi !','Cek data',MB_IconStop);
btInputPlg.SetFocus; Exit;
end
else if LstKode.Items.Count=0 then begin
Application.MessageBox('Data VCD belum diisi !','Cek data',MB_IconStop);
BtTambahVCD.SetFocus; Exit;
end;
//jika sudah penuh semua, dapat disimpan //cek dulu simpan tambah atau edit
if Edit=False then begin
Jdaftar:=LstKode.Count-1; for i:=0 to JDaftar do begin LstKode.ItemIndex:=i; tSewa.Append; tSewa['NoSewa']:=EdNoSewa.Text; tSewa['TglSewa']:=DtpTglSewa.Date; tSewa['LamaSewa']:=StLamaSewa.Caption; tSewa['KodePLG']:=StKodePLG.Caption; tSewa['KodeVCD']:=LstKode.Items.Strings[i]; tSewa['TarifSewa']:=StTarif.Caption; tSewa.Post; KurangiPersediaan(LstKode.Items.Strings[i]);
end;
tSewa.Refresh; end
else begin
Jdaftar:=LstKode.Count-1; //untuk berulangan //hapus dulu yang tidak ada dalam daftar tSewa.IndexName:='IdxNoSewa';
Ketemu:=tSewa.FindKey([Nomor]); if Ketemu=True then
//jika ketemu lanjutkan begin
while tSewa['NoSewa']=Nomor do begin
for i:=0 to JDaftar do begin if tSewa['KodeVCD']<>LstKode.Items.Strings[i] then begin //edit persediaan tVCD.IndexName:=''; Ketemu:=tVCD.FindKey([tSewa['KodeVCD']]); if Ketemu=True then begin tVCD.Edit; tVCD['JML_Persediaan']:=tVCD['JML_Persediaan']+1; tVCD.Post; tVCD.Refresh; end;
//lanjutkan proses hapus tsewa.Delete;
end; end;
tSewa.Next;
if tSewa.Eof then tSewa.First; end;//akhir penghapusan
tsewa.Refresh; end
else
//jika tidak ketemu data berarti hilang begin application.MessageBox('Data hilang...','Cek Data',MB_IconStop); Exit; end; //simpan Edit
for i:=0 to JDaftar do begin
//cari dulu data yang akan diedit Ketemu:=False;
tSewa.IndexName:='IdxSewa'; //index dengan 2 kunci Ketemu:=tSewa.FindKey([Nomor, LstKode.Items.Strings[i]]); if Ketemu=True then tSewa.Edit else begin
tsewa.Append; //jika tidak ketemu berarti ada data baru KurangiPersediaan(LstKode.Items.Strings[i]); end; //Simpan detail tSewa['NoSewa']:=EdNoSewa.Text; tSewa['TglSewa']:=DtpTglSewa.Date; tSewa['LamaSewa']:=StLamaSewa.Caption; tSewa['KodePLG']:=StKodePLG.Caption; tSewa['KodeVCD']:=LstKode.Items.Strings[i]; tSewa['TarifSewa']:=StTarif.Caption; tSewa.Post; end; tSewa.Refresh; end;
BtBatalClick(Sender); //setelah selesai bersihkan end;
Selanjutnya kita akan membuat kode program untuk PageControl pada halaman 2 : 30. Buat kode program untuk memilih pencarian data dalam RadioGroup :
procedure TFrmSewa.RgCariClick(Sender: TObject); begin Case RgCari.ItemIndex Of 0: tSewa.IndexName:='IdxNoSewa'; 1: begin tSewa.IndexName:='IdxTglSewa'; EdCari.Visible:=False; DtpCari.Visible:=True; DtpCari.Date:=Date; DtpCari.SetFocus; Exit; end; 2: tSewa.IndexName:='IdxKodePlg'; 3: tSewa.IndexName:='IdxKodeVCD';
end; DtpCari.Visible:=False; EdCari.Visible:=True; EdCari.Text:=''; EdCari.SetFocus; end;
31. Buat kode program untuk komponen Edit yang akan digunakan untuk mencari data pada event OnChange :
procedure TFrmSewa.EdCariChange(Sender: TObject); begin if length(Trim(EdCari.Text))=0 then exit else begin if tSewa.RecordCount=0 then application.MessageBox('Tabel kosong...','Cek Data',MB_IconExclamation) else begin Case RgCari.ItemIndex Of 0: tSewa.IndexName:='IdxNoSewa'; 2: tSewa.IndexName:='IdxKodePlg'; 3: tSewa.IndexName:='IdxKodeVCD'; end; tSewa.FindNearest([EdCari.Text]); end; end; end;
32. Buat kode program untuk DateTimePicker yang berguna untuk mencari data berdasarkan tanggal sewa pada event OnChange :
procedure TFrmSewa.DtpCariChange(Sender: TObject); begin if tSewa.RecordCount=0 then application.MessageBox('Tabel kosong...','Cek Data',MB_IconExclamation) else begin tSewa.IndexName:='IdxTglSewa'; tSewa.FindNearest([DtpCari.Date]); end; end;
procedure TFrmSewa.DBGrid2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin CariKeterangan; end;
procedure TFrmSewa.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
CariKeterangan; end;
procedure TFrmSewa.DBGrid2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin
CariKeterangan; end;
procedure TFrmSewa.DBGrid2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
CariKeterangan; end;
34. Buat kode program untuk Tombol Hapus Satu :
procedure TFrmSewa.BtHapus1Click(Sender: TObject); begin if tSewa.RecordCount=0 then application.MessageBox('Tabel kosong...','Cek Tabel',MB_IconExclamation) else begin
Konfirmasi:=application.MessageBox('Anda yakin, menghapus record yang aktif?',
'Konfirmasi',MB_IconQuestion or MB_YesNo); if Konfirmasi=IdYes then tsewa.Delete;
tSewa.Refresh; CariKeterangan; end;
end;
procedure TFrmSewa.BtHapusBAnyakClick(Sender: TObject); var HapNoSewa:String[10]; begin if tSewa.RecordCount=0 then application.MessageBox('Tabel kosong...','Cek tabel',MB_IconExclamation) else begin
HapNoSewa:=InputBox('Input Hapus','Masukan Nomor Sewa :','',); if Length(Trim(HapNoSewa))=0 then exit else begin //cari data tSewa.IndexName:='IdxNoSewa'; Ketemu:=tSewa.FindKey([HapNoSewa]); if Ketemu=True then begin //beri konfirmasi Konfirmasi:=Application.MessageBox('Anda yakin...',
' Hapus Per Transaksi',MB_IconQuestion or MB_YesNO);
if Konfirmasi=IdYes then begin
//hapus dengan perulangan while Ketemu=True do begin tSewa.Delete; Ketemu:=tSewa.FindKey([HapNoSewa]); end; tSewa.Refresh; end else exit; end else
application.MessageBox('Data tidak ada...','Cari Data',MB_IconInformation);
end; end; end;
36. Buat kode program untuk komonen Timer :
begin
Lanim.Left:=LAnim.Left-1;
if (LAnim.Left + LAnim.Width)<=0 then Lanim.Left:=Panim.Width;
end;
37. Buat kode program untuk FormClose :
procedure TFrmSewa.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree; end;