Tutorial Database dengan Delphi tambah edit hapus tanpa coding Part 4

Melanjutkan posting sebelumnya, langkah selanjutnya adalah membuat form template.  Tambahkan form baru atau gunakan form sudah ada, karena dalam tutorial ini rancangannya adalah MDI Appication, maka anda harus mengatur beberapa property form sebagai berikut:

- Formstyle=fsMDIChild
-Position=poDefaultPosOnly

Jika sudah selesai, namai form tersebut misal FrmTemplate lalu simpan form tersebut dalam folder template*)

Dari class TfrmTemplate tersebut, kita akan menurunkan class baru untuk proses tambah edit hapus. Klik menu File->new->Other.  Setelah itu pilih tab Inheritable Items.  Lihat gambar bawah berikut:



Klik OK, lalu namai dengan FrmTemplateMaster.
 Jika sudah, kita tambahkan komponen:
1.  Zquery, kita namai dengan zqrymaster
2.  ZupdateSQL, kita namai dengan zupdsql
3.  5 buah button untuk tambah simpan edit hapus.  Kita namai masing-masing btnsimpan,btnbatal, btntambah,btnedit,btndelete

Jika sudah selesai, namai form tersebut misal FrmMaster, lalu simpan di folder template.

Tambahkan procedure berikut di bagian protected(secara default form tidak ada bagian protected untuk itu anda bisa menambahkannya sendiri)

protected
procedure setEnabledSave(isEnabled:boolean);virtual;

Dibagian implementation:

procedure TfrmTemplateMaster.setEnabledSave(isEnabled: Boolean);
begin
btnsimpan.enabled=isEnabled;
btnbatal.enabled=isEnabled;
btntambah.enabled=not isEnabled;
btnedit.enabled=not isEnabled;
btnhapus.enabled=not isEnabled;
end;

Lihat gambar berikut untuk lebih lengkap:


Anda tidak harus mengetik script di atas.  Untuk cara mudahnya anda bisa gunakan add-ins GExpert. Jika sudah anda install pilih menu GExperts->Copy Components Name lalu paste di Regex Editor seperti gambar berikut:




Jika itu sudah anda lakukan, maka langkah selanjutnya adalah menyetting beberapa properti zqrymaster sebagai berikut:
1.  CachedUpdate=true
2.  UpdateObject=zupdsql

Tambahkan beberapa kode berikut:
Pada tombol tambah:

procedure TFrmTemplateMaster.btntambahClick(Sender: TObject);
begin
  inherited;
zqrymaster.Append;
SetEnabledSave(true);
end;

Pada tombol edit:

procedure TFrmTemplateMaster.btneditClick(Sender: TObject);
begin
  inherited;
zqrymaster.Edit;
setenabledSave(true);
end;

Pada tombol hapus:

procedure TFrmTemplateMaster.btnhapusClick(Sender: TObject);
var cn:Tzconnection;
begin
  inherited;
  cn:=Tzconnection(zqrymaster.Connection);
  if not cn.InTransaction then
  cn.StartTransaction;
        try
        zqrymaster.Delete;
        zqrymaster.ApplyUpdates;
        cn.Commit;
         zqrymaster.CommitUpdates;
        except
          on E:exception do
          begin
            cn.Rollback;
            messagedlg(e.Message,mterror,[mbok],0);
            zqrymaster.CancelUpdates;
          end;
        end;
end;

Pada tombol batal:

procedure TFrmTemplateMaster.btnbatalClick(Sender: TObject);
begin
  inherited;
zqrymaster.CancelUpdates;
SetEnabledSave(false);
end;

Pada tombol simpan:

procedure TFrmTemplateMaster.btnsimpanClick(Sender: TObject);
var cn:Tzconnection;
begin
  inherited;
  cn:=Tzconnection(zqrymaster.Connection);
  if zqrymaster.state in [dsInsert,dsedit] then
  zqrymaster.post;
  if not cn.InTransaction then
  cn.StartTransaction;
  try
    zqrymaster.ApplyUpdates;
     doAfterApplyUpdates;
      if zqrymaster.Fields[0].IsNull then
       begin
         zqrymaster.Edit;
         zqrymaster.Fields[0].Value:=Fid;
         zqrymaster.Post;

       end;
    cn.Commit;

        zqrymaster.CommitUpdates;
  except
    on E:exception do
    begin
         cn.Rollback;
         messagedlg(e.Message,mterror,[mbok],0);
    end;
  end;
end;

Script lebih lengkap