Subscribe:

Rabu, 09 Mei 2012

Cara mudah mengolah database MySQL dengan Delphi


Berikut kita belajar cara sangat sederhana mengelola database MySQL menggunakan Delphi dan Zeos. Latihan ini akan sangat tidak berguna jika anda sudah mahir, tapi jangan protes dulu, artikel ini saya muat di sini karena banyak teman yang minta ke saya, karena merasa terlalu awam dengan zeos.
Mula-mula, saya berasumsi zeos sudah terinstal dengan baik pada delphi anda, kalo belum silahkan download di http://www.sourceforge.net/projects/zeoslib, lalu ikuti petunjuk instalasinya.
Saya juga berasumsi bahwa MySQL sudah berjalan pada komputer anda atau setidaknya bisa diakses sepenuhnya dari komputer anda, kalo belum silahkan download di http://dev.mysql.com/downloads/, lalu ikuti petunjuk instalasinya.
dan
Saya juga berasumsi anda sudah dapat menggunakan MySQL dengan baik, entah menggunakan MySQL Front, SQLYog, PHPMyAdmin atau apa aja, yang penting bisa ..:) selanjutnya buat database "latihan" dan buat satu tabel "Anggota" dengan field "Id" varchar(15), "Nama" varchar(15), "Alamat" varchar(255), atau jalankan script berikut pada SQLEditor aplikasi anda:
create database if not exists `latihan`;
USE `latihan`;
DROP TABLE IF EXISTS `anggota`;
CREATE TABLE `anggota` (
`Id` varchar(15) NOT NULL default '',
`Nama` varchar(30) default NULL,
`Alamat` varchar(255) default NULL,
PRIMARY KEY  (`Id`)
) TYPE=MyISAM;
insert  into `anggota`(`Id`,`Nama`,`Alamat`)
values ('123','Agus Made','Yogyakarta'),
('456','Krisna Parta','Yogyakarta juga');
atau dump file "db_latihan.sql" dari source code latihan ini.
Buat proyek baru pada delphi yang kurang lebih tampilannya seperti gambar berikut :

Deklarasikan variabel gloabal "editmode" untuk pengelolaan mode tampilan dan akses terhadap setiap komponen:

//...
var
 Form1: TForm1;
 editmode:0..2=0;//0=browse 1=insert 2=edit
implementation
//...

Buat beberapa "procedure" bantu berikut, dan deklarasikan sebelum sintaks "private". kurang lebih seperti ini :
  //...
  procedure setmode;
  procedure kosong;
  procedure isi;
  //...
 private
  //...
implementation
//...
procedure TForm1.setmode;
begin
 tbTambah.Enabled:=editmode=0;
 tbEdit.Enabled:=editmode=0;
 tbSimpan.Enabled:=editmode>0;
 tbBatal.Enabled:=editmode>0;
 tbHapus.Enabled:=editmode=0;

 edId.ReadOnly:=editmode=0;
 edNama.ReadOnly:=editmode=0;
 mmAlamat.ReadOnly:=editmode=0;
end;

procedure TForm1.kosong;
begin
 edId.Text:='';
 edNama.Text:='';
 mmAlamat.Text:='';
end;

procedure TForm1.isi;
begin
 edId.Text:=zqAnggota.fieldbyname('Id').asstring;
 edNama.Text:=zqAnggota.fieldbyname('Nama').asstring;
 mmAlamat.Text:=zqAnggota.fieldbyname('Alamat').asstring;
end;

lalu berikan event OnAfterScroll pada TZReadOnlyQuery "zqAnggota" dengan sintaks berikut:
procedure TForm1.zqAnggotaAfterScroll(DataSet: TDataSet);
begin
 isi;
end;

berikan juga event OnFormShow pada TForm1 "Form1" dengan sintaks berikut:
procedure TForm1.FormShow(Sender: TObject);
begin
 setmode;
end;


lalu berikan event OnClick pada TButton "tbTambah" dengan sintaks berikut:
procedure TForm1.tbTambahClick(Sender: TObject);
begin
 case TButton(sender).tag of
  0: begin editmode:=1; kosong; setmode; end; //tambah
  1: begin editmode:=2; isi; setmode; end; //edit
  2: begin editmode:=0; isi; setmode; end; //batal
  3: begin //simpan
      if editmode = 1 then //jika data adalah tambahan
       zqProses.Script.Text:='insert into anggota(Id,Nama,Alamat)'+
       'values("'+edId.text+'","'+edNama.text+'","'+mmAlamat.Text+'")'
      else //jika data adalah editan
       zqProses.Script.Text:='update anggota set'+
       'Id="'+edId.text+'",Nama="'+edNama.text+'",Alamat= "'+
       mmAlamat.Text+'" where Id="'+
       zqAnggota.fieldbyname('Id').AsString+'"';
      zqProses.Execute;

      zqAnggota.Close; //biar refresh
      zqAnggota.Open;
      editmode:=0; setmode;
     end;
  4: begin //hapus
      zqProses.Script.Text:='delete from anggota where '+
      'Id="'+zqAnggota.fieldbyname('Id').AsString+'"';
      zqProses.Execute;
      zqAnggota.Close; //biar refresh
      zqAnggota.Open;
     end;
 end;
end;
Event OnClick yang kita buat di atas sebenarnya berlaku untuk semua tombol (tbEdit, tbBatal, tbSimpan dan tbHapus) yang kita buat, menggunakan metode pembagian kerja berdasarkan property "Tag" pada "TButton" tersebut. Jadi hubungkan event OnClick semua tombol tersebut dengan "tbTambahClick"
jika semua sudah 'dilakoni' dengan baik, 'kayaknya' program 'gak bakalan' bermasalah. Jalankan program dan lihat hasilnya, kurang lebih akan seperti ini :
Semua tombol sudah berfungsi dengan baik. Sekali lagi contoh ini sangat sedarhana tidak menggunakan penangan error dan konfirmasi apapun. Pada implementasi sesungguhnya banyak hal yang perlu di'urusi'. Namun demikian setidaknya bagi yang belum pernah 'nyoba' handle MySQL dengan Delphi, bisa menyadari betapa mudah Zeos digunakan untuk hal ini.

0 komentar:

Posting Komentar