Tampilkan postingan dengan label mysql. Tampilkan semua postingan
Tampilkan postingan dengan label mysql. Tampilkan semua postingan
aseli bikinan agus made


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.

silahkan download source code untuk Aplikasi ini disini.

Terima kasih
Agus Made K (http://agusmade.blogspot.com)

Belakangan ini saya mencoba membuat sepaket library yang nantinya dapat digunakan untuk pengelolaan DataBase berbasis Object Oriented menggunakan Delphi dengan DataBase MySQL (dapat juga diterapkan pada database yang lain, butuh sedikit modivikasi) dan Zeos untuk direct access ke MySQL. Sebenarnya besok kalo punya duit maunya sih pake MyDAC :-(

Orientasi utamanya adalah untuk memudahkan dalam pengembangan software skala Besar dengan Pola standar. Ide ini muncul bermula dari sulitnya menemukan standar pengembangan software database berbasis delphi (atau mungkin tidak harus distandarisasi), padahal menurut saya ini hal yang esensial.

Pada tahap awal ini belum banyak hal yang sempat saya tangani, namun sudah cukup banyak membantu saya dalam mengembangkan beberapa proyek.

Berikut adalah uraian beberapa class dasar yang yang saya buat dalam library ini :
TamView : Merupakan Class utama dalam pengelolaan Object Oriented Datasase. Class ini meng-handle tabel ataupun kumpulan tabel untuk dikelola, pengelolaan berupa DDL maupun DML SQL handle. Pada versi ini, belum semua DDL dan DML yang didukung. hanya pengelolaan utama yang sudah saya tangani seperti : Select (termasuk join, where, order dan limit), Insert, Delete dan Update. Jangan salah faham dulu... dalam pengembangan software anda tidak perlu menggunakan sintak SQL, karena library ini yang akan membuatnya. itulah proses utama yang dilakukan oleh library ini. Intinya menerjemahkan bahasa object pascal pada software anda menjadi sintak SQL yang selanjutnya dihubungkan ke MySqL menggunakan direct access-nya Zeos.
Bahkan dalam waktu dekat kita akan mengabaikan bahasa pascal dalam penggunaannya. karena XML jauh lebih enak dipahami. Ini yang akan saya kembangkan. tunggu saja tanggal mainnya :-)

TamDetail : Merupakan subClass dari TamView untuk pengelolaan master detail, sub detail, dan sub-nya lagi dalam tingkatan tak terhingga. Hubungan antara master dan detail dapat berupa KeyField dan MasterField (seperti standard Delphi) bahkan beberapa KeyField dan MasterField, maupun SQL Like JoinType.

TamLookup : Merupakan class pengelolaan Join beberapa tabel dengan berbagai JoinType dan beberapa field terkait.

Juga class-class lain seperti TamOrder, TamLimit, TamFilter untuk pengelolaan full custom select. namun tetap tidak kacau dalam peng-update-an data.

Dua unit yang saya buat untuk proyek ini, antara lain :
amDbObj ==> berisi class-class dasar untuk pengelolaan database.
amDbIntf ==> berisi class-class pendukung untuk user interface.

Untuk lebih jelasnya hubungan antar class pada masing-masing file dapat anda lihat pada gambar.
Dan dokumentasi library dalam format HTMLHelp (chm) ini dapat anda download.

Segala kritik dan saran ditunggu, jangan ragu kirim bug report, protes, cacian, umpatan, pujian dan sebagainya ke krisnaparta{at}gmail.com Pengembangan ini sangat membutuhkan partisipasi semua pihak.

Selamat mencoba, semoga anda mendapat proyek besar dan jangan lupa bagi2 :-)
silahkan download file chm nya di sini

Aku baru saja rampung bikin komponen delphi, untuk zeos dengan tujuan khusus, Backup dan Restore tabel. ya TamZBackup ini di buat karna terlalu banyak masalah saat menggunakan TZBackup (namanya kalo gak salah) bawaan zeos. dengan menggunakan pola yang sama yaitu SQLDump. Bug kecil pada TZBackup seperti :
1. Pemberian nilai null untuk filed yang memiliki nilai string kosong (''). Masalah ini akan terasa saat hasil backupnya kita restore, apa bila field ybs adalah pimary key.
2. Menyertakan semua field dalam SQLDump. hal ini hanya menyebabkan data backup-an ukurannya lebih besar. Jangan anggap sepele masalah ini. Pada salah satu proyek, aku ngalami selisih sampai 20MB.

Sudah diatasi dengan baik oleh komponen TamZBackup, moga gak ada bug, apalagi yang lebih parah. :)

Jadi hamat saat backup, aman saat restore. oke...
komponen beserta source codenya bisa di download sini

Selama ini aku merasa sebage programmer delphi. tapi aku senang nerobos nyebarng ketempat tetangga sebage tukang web. nah dalam perjalanan menuju tempat tersebut aku sekarang mo bikin Content Management System (CMS) sendiri dan original (gak pake nyontek). konsepnya dan siap, business role jga dah, DFD udah, DataBase & ERD jaga dah oke. pengennya sih yang OO (object oriented) banget. obyek, class dan sebagenya tersusun rapi.

tapi:
aku belum pede soal sekyiriti. gimana cara yg bener nyegah SQL Injection. selama ini aku mengunakan metode ngecek input variabel (parameter), nah variabel dinyatakan valid jika tanpa tanda baca yang berhubungan dengan sintax SQL, Javascript, VBScript, PHP bahkan HTML.
masalahnya jadi rumit jika aku sendiri yg pengen nginput sintax2 seperti itu. (apa harus allow per user ato bagemana?). nah kalo teman-temin ada yg punya solusi jitu untuk hal ini, hubungi aku lewat apa aja. ym-ku:agusmade imel:agusmade[et]yahoo[dot]com. ato lewat shout box di blogku ini. tengs banget deh sebelumnya.

More

Label

3D (1) blogger (1) Canvas (2) cerita pribadi (4) cms (1) coreldraw (1) delphi (6) freeware (1) GLScene (1) gps (1) HTML5 (2) humor (1) library (1) mysql (4) OLE/DDE (1) online tools (2) oop (2) OpenGL (1) photoshop (2) php (1) PJU (2) project (4) referensi (1) software (9) tamzbackup (1) tutorial dasar (8) zeos (3)