Friday 18 April 2008

Menyimpan Status CheckBox pada Delphi

Disalah satu bagian pada program Tugas Akhirku, terdapat 18 checkbox yg merupakan informasi dari kelengkapan data naskah (lihat postingan saya tentang Tugas Akhir). Saya berfikir bagaimana caranya menginisiasi ke 18 checkbox itu dan menyimpannya ke dalam database, begitu juga sebaliknya membaca database kemudian merepresentasikan ke dalam checkbox apakah checked=true atau false. Cara kuno yg saya dapatnya adalah cara manual dengan banyak coding dan memakan banyak field di database (harus menyediakan 18 field dalam 1 tabel)


//untuk menulis ke database atau write
if checkbox1.checked=true then table1.fieldvalues['isi1']:='1' else
table1.fieldvalues['isi1']:='0';

....
if checkbox18.checked=true then table1.fieldvalues['isi18']:='1' else table1.fieldvalues['isi18']:='0';
//=============================================================================
//untuk membaca database atau read
if table1.fieldbyname('isi1').asstring='1' then checkbox1.checked := true else checkbox1.checked:=false;
.....
if table1.fieldbyname('isi18').asstring='1' then checkbox18.checked := true else checkbox18.checked:=false;


Script diatas sangatlah tidak efisien, membutuhkan banyak waktu,tempat dan ruang. Saya bertanya sana sini, mencari sana sini bagaimana caranya hal tersebut dapat disimpan dalam database namun dengan sedikit coding dan sedikit memakan space database. Akhirnya saya mencoba men-dinamiskan ke 18 checkbox tadi, dan menjadikan semuanya dalam 1 field saja. Setelah itu diinisiasi menggunakan angka biner. Jadi untuk setiap checkbox kita tidak perlu menyediakan 18 field dalam tabel, namun cukup 1 field yg isinya merupakan angka biner yg merepresentasikan status checkbox tadi.

untuk simulasinya silahkan ikuti langkah berikut :

1. buka delphi anda dan buat aplikasi baru
2. siapkan 2 buat edit (ganti namanya menjadi Ed_masuk dan Ed_keluar), 2 button (ganti captionnya menjadi Input dan Output), dan 18 checkbox (TCheckbox, nama biarkan default)
3. simulasi pertama yaitu kita membuat inisiasi atas ke 18 checkbox menjadi 18 urutan angka biner. kemudian menyimpannya kedalam Ed_keluar (Tedit ini seolah2 adalah field dari database). Masukkan beberapa perintah berikut didalam event - Onclick Button2 (output)

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
kode : array [1..18] of string;
checkbox : array [1..18] of TCheckBox;
begin
ed_keluar.Clear;
i:=1;
for i:=1 to high(checkbox) do
begin
if TCheckbox(FindComponent('Checkbox'+IntToStr(i))).Checked = true then kode[i]:='1'
else kode[i]:='0';
ed_keluar.Text := ed_keluar.Text+kode[i];
end;
end;


Untuk mencobanya, silahkan centang beberapa checkbox kemudian klik tombol Output. Maka pada ed_keluar akan terlihat urutan 18 angka biner. angka 0/1 merepresentasikan status checkbox anda, apakah dicentang atau tidak. Urutan angka biner sesuai dengan urutan Checkbox anda.



4. Simulasi kedua adalah menerima urutan 18 angka biner (seharusnya dari database) dari Ed_masuk kemudian membaca per karakter dan merepresentasikan status Checkbox tadi. Buat event-Onclick pada button1 (Input) kemudian lengkapi prosedurnya dengan perintah berikut

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer; kode : array [1..18] of string;
begin
i:=1;
j:=1;
for i:=1 to length(ed_masuk.Text) do
begin
kode[i] := copy(ed_masuk.Text,i,j);
if kode[i]='1' then TCheckbox(FindComponent('Checkbox'+IntToStr(i))).Checked := true
else TCheckbox(FindComponent('Checkbox'+IntToStr(i))).Checked := false;
end;
end;


Untuk mencobanya silahkan masukkan 18 angka biner (0/1) kedalam ed_masuk kemudian klik tombol Input. Maka checkbox yg tercentang berasal dari angka '1' dari urutan yg anda masukkan sebelumnya.



Alhamdulillah script jadi lebih sedikit dan cuma butuh 1 field dalam tabel...so simple..... :D

terima kasih buat rekan2 di Delphi Indonesia.



Tulisan ini juga saya tulis di blog saya

Technorati Tags: , ,

Powered by ScribeFire.

No comments:

Recent Comments Blog