Modifikasi Data

6.8. Modifikasi Data

Aplikasi database dapat melakukan perubahan data pada database. Perubahan data dapat berupa penambahan data, pengeditan data, atau penghapusan data. Semuanya dilakukan melalui dataset. Setiap jenis dataset mempunyai perilaku khusus yang berbeda dalam menangani modifikasi data. Pembahasan kali ini ditujukan untuk mempelajari modifikasi data pada ClientDataSet.

Segera setelah dataset diaktifkan, dataset akan berada dalam state dsBrowse. Untuk melakukan modifikasi data, Anda harus mengubah state dari dataset sesuai dengan yang Anda butuhkan.

Page 92

Dataset menyediakan beberapa method untuk keperluan modifikasi data.

Method Keterangan

Edit Mengubah state dari dataset menjadi dsEdit jika state dari dataset bukan dsEdit atau dsInsert.

Append Posting semua data yang dipending, menggerakkan pointer record aktif ke akhir dataset dan mengubah state dari dataset menjadi dsInsert.

Insert Posting semua data yang dipending dan mengubah state dari dataset menjadi dsInsert. Post

Mencoba untuk memposting data record aktif ke database. Cancel

Membatalkan operasi dataset yang sedang berlangsung dan mengubah state dari dataset menjadi dsBrowse.

Delete

Menghapus record aktif dan mengubah state dari dataset menjadi dsBrowse.

6.8.1. Operasi Editing Data Menambah Record

Ubah state dari dataset menjadi dsInsert menggunakan method Insert atau Append. Contohnya sabagai berikut ini :

ClientDataSet1.Insert; ClientDataSet1.FieldValues[ ‘CustNo’] := 1500;

ClientDataSet1.FieldValues[ ‘CustName’] := ‘AMIR’; ClientDataSet1.Post;

Method Insert menambahkan record baru ke dataset pada posisi tepat sebelum record aktif. Sedangkan method Append menambahkan record baru ke dataset pada posisi setelah record terakhir.

Mengedit Record

Dataset harus dalam state dsEdit sebelum dapat diedit. Gunakan method Edit untuk mengubah state dari dataset menjadi dsEdit. Contohnya sebagai berikut ini :

ClientDataSet1.Edit; ClientDataSet1.FieldValues[ ‘CustNo’] := 1450; ClientDataSet1.Post;

Menghapus Record

Gunakan method Delete untuk menghapus record aktif. Contohnya sebagai berikut ini :

ClientDataSet1.Delete;

6.8.2. Menuliskan Perubahan Data

Seperti yang telah diuraikan di atas, setelah melakukan Insert, Append, atau Edit Data, Anda harus menuliskan modifikasi atau data baru yang telah Anda buat dengan memanggil method Post atau memanggil method Cancel untuk membatalkannya. Sedangkan untuk operasi penghapusan, posting

Page 93 Page 93

Data dan Delta

ClientDataSet mempunyai property LogChanges yang bertipe Boolean. Default‐ nya, bernilai True yang berarti ClientDataSet akan mencatat semua perubahan data yang terjadi. Catatan perubahan ini dapat diakses melalui property Delta dan dicatat terpisah dari data aslinya. Anda dapat mengakses data asli ClientDataSet lewat property Data. Jika anda memanggil method Post, maka ClientDataSet akan menuliskan perubahan data yang Anda buat ke Delta. Walaupun Data dan Delta dicatat terpisah, Anda tetap melihat isi data ClientDataSet seolah‐ olah seluruh Delta telah diimplementasikan ke Data. Anda dapat mengetahui banyaknya perubahan yang telah Anda buat lewat property ChangeCount.

Membatalkan Perubahan Data

Karena semua perubahan data yang terjadi tercatat, Anda dapat membatalkan perubahan yang telah Anda buat terakhir kali dengan menggunakan method UndoLastChange. Method UndoLastChange mempunyai satu parameter yaitu FollowChange bertipe Boolean. Bila FollowChange bernilai True maka ClientDataSet akan memindahkan pointer record aktif‐ nya ke record yang dibatalkan perubahannya. Method UndoLastChange akan menghapus satu record perubahan di Delta, ini juga berarti nilai property ChangeCount akan berkurang. Selama ChangeCount masih lebih besar dari 0, Anda dapat terus menggunakan method UndoLastChange. Anda dapat menggunakan method MergeChangeLog untuk mengimplementasi semua perubahan data yang tercatat di Delta ke Data. Pemanggilan MergeChangeLog mengakibatkan Delta dikosongkan kembali dan Data ter‐ update dengan semua perubahan yang Anda lakukan. Jika property LogChanges bernilai False, semua perubahan data yang Anda buat langsung dituliskan ke Data ketika method Post dipanggil. Ini berarti Anda tidak memerlukan lagi method MergeChangeLog, karena Delta selalu kosong. Ini juga berarti Anda tidak dapat membatalkan perubahan data yang telah Anda posting.

6.8.3. Editing Data Lewat Data Control

Ketika kita mengubah nilai dari data yang ditampilkan oleh sebuah data control, misalnya DBEdit, maka apabila dataset yang bersangkutan masih dalam state dsBrowse maka secara otomatis state‐ nya berubah menjadi dsEdit. Dalam hal ini, data control yang bersangkutan memanggil method Edit secara implisit yang di‐ trigger oleh perubahan nilai di data control. Begitu pula ketika kita menggerakkan pointer record aktif pada DBGrid ke akhir baris, method Insert dipanggil secara implisit. Hal yang sama terjadi jika dataset dalam state dsInsert atau dsEdit kemudian lewat data control kita menggerakkan pointer aktif, maka secara implisit method Post dipanggil.

Anda dapat menggunakan komponen DBLookupComboBox untuk menampilkan lookup field. Komponen DBLookupComboBox akan secara otomatis menampilkan daftar pilihan nilai yang mungkin dari dataset lookup‐ nya dalam bentuk combo. Ketika Anda memilih suatu nilai untuk lookup field maka field kunci dari dataset yang bersangkutan akan secara otomatis terisi oleh nilai dari field kunci di dataset lookup‐ nya.

Berikut ini contoh program untuk editing data lewat Data Control : Program ini terdiri dari 2 (dua) buah form. Form pertama akan berisi DBGrid yang menampilkan tabel Employee dan 4 (empat) buah tombol untuk menambah data, mengedit data, menghapus data, dan membatalkan operasi. Form kedua adalah form entri untuk menambah dan mengedit data.

Page 94

Persiapan Form

 Buat aplikasi baru. Beri nama form utama aplikasi dengan nama MainForm.  Buat sebuah form lagi dan beri nama FormEntry.

Form Utama

 Letakkan sebuah komponen ClientDataSet dari Component Palette Data Access pada MainForm dengan file Employee.xml lengkap dengan path‐ nya, terletak di directory contoh data dari Delphi, biasanya ada di folder C:\Program Files\Common Files\Borland Shared\Data.

 Letakkan sebuah komponen DataSource dari Component Palette Data Access pada MainForm. Beri nama dsEmployee. Isi property Dataset dengan komponen ClientDataSet yang telah kita letakkan sebelumnya, yaitu cdsEmployee.

 Letakkan sebuah komponen DBGrid dari Component Palette Data Access pada MainForm. Beri nama dbgEmployee. Isi property DataSource dengan dsEmployee.

 Tulis kode untuk event OnShow dari MainForm untuk mengaktifkan dataset saat MainForm ditampilkan. procedure TMainForm.FormShow (Sender : TObject);

begin

cdsEmployee.Open;

end;

 Tulis kode dari event handler untuk event OnClose dari MainForm dengan tujuan untuk menonaktifkan dataset pada saat MainForm ditutup. procedure TMainForm.FormClose (Sender : TObject; var Action : TCloseAction);

begin

cdsEmployee.Close;

end;

 Letakkan sebuah komponen Button ke MainForm. Beri nama btnAdd. Set property Caption‐ nya menjadi ‘Tambah’ dan tulis kode untuk event OnClick‐ nya. procedure TMainForm.btnAddClick (Sender : TObject);

begin

cdsEmployee.Append; if FormEntry.ShowModal =mrOK then

cdsEmployee.Post

else

cdsEmployee.Cancel;

end;

 Letakkan sebuah komponen Button ke MainForm. Beri nama btnEdit. Set property Caption‐ nya menjadi ‘Edit’ dam tulis kode untuk eventOnClick‐ nya. procedure TMainForm.btnEditClick (Sender : TObject);

begin

cdsEmployee.Edit; if FormEntry.ShowModal =mrOK then

cdsEmployee.Post

else

cdsEmployee.Cancel;

end;

 Letakkan sebuah komponen Button ke MainForm. Beri nama btnDelete. Set property Caption‐ nya menjadi ‘Hapus’ dam tulis kode untuk event OnClick‐ nya. procedure TMainForm.btnDeleteClick (Sender : TObject);

begin

cdsEmployee .Delete;

end;

Page 95

 Letakkan sebuah komponen Button ke MainForm. Beri nama btnUndo. Set property Caption‐ nya menjadi ‘Undo’ dan tulis kode untuk event OnClick‐ nya. procedure TMainForm.btnUndoClick (Sender : TObject);

begin

if cdsEmployee.ChangeCount > 0 then cdsEmployee.UndoLastChange

else

raise Exception.Create (‘Tidak Ada Perubahan Data !’)

end;

Setting Form Entry

 Letakkan 6 (enam) pasang komponen Label dan DBEdit di FormEntry. Beri nama dan caption untuk komponen Label dan DBEdit sesuai dengan 6 (enam) buah field yang ada pada tabel Employee. Isi

property DataSource ke‐ 6 komponen DBEdit dengan dsEmployee dari MainForm. Isi property DataField dari ke‐ 6 komponen DBEdit dengan 6 (enam) field yang terdapat pada tabel Employee.

 Letakkan 2 (dua) buah Button di FormEntry. Beri nama btnOK dan btnCancel. Set property ModalResult dari btnOK menjadi mrOK. Set property ModalResult dari btnCancel menjadi mrCancel.

 Jalankan program.

Gambar 5‐ 6. Editing Data lewat Data Control

Cobalah untuk menambah data, mengedit data, dan menghapus data. Batalkan beberapa perubahan dengan menggunakan tombol Undo.

Gambar 5‐ 7. Entry Data

Page 96