Arşiv Anasayfa Veritabanı Makaleleri
Sayfalar: 1
CheckListBox i veritabaninda kullanma Gönderen: dynamo Tarih: 07 April 2007 13:34:55
öncelikle veritabanında Boolean bir alan olmalı.Bu boolean alanın true/false durumuna  göre veriler CheckListBox' a seçili olarak/olmayarak gelir.Tablo'da "durum" adlı Boolean bir alanımız olsun.sql serverde Boolean alan için "Bit" seçilir.dbCheckListBox komponentimiz olmadığı için CheckListBox'ta seçilen/kaldırılan değeri bu Boolean alan ile kotrol ediyoruz.

verileri alma:

:
procedure TfrmAnaMenu.Button1Click(Sender: TObject);
var
   i:integer;
begin
   CheckListBox1.Clear;

   ADOQuery1.First;
   for i:=0 to ADOQuery1.RecordCount-1 do begin
      CheckListBox1.Items.Add(ADOQuery1.FieldByName('ad').AsString);
      if ADOQuery1.FieldByName('durum').AsBoolean=true then
         CheckListBox1.Checked[i]:=true
      else
         CheckListBox1.Checked[i]:=false;
      ADOQuery1.Next;
   end;

end;




kaydetme:
CheckListBox'ta değerleri seçme/seçmeme durumuna göre tabloya kaydetme için CheckListBox1'in OnClick olayını kullanalım:

:
procedure TfrmAnaMenu.CheckListBox1Click(Sender: TObject);
begin
   ADOQuery1.Locate('kod',IntToStr(CheckListBox1.ItemIndex+1),[]);
   if CheckListBox1.Checked[CheckListBox1.ItemIndex] then begin
      ADOQuery1.Edit;
      ADOQuery1.FieldByName('durum').AsBoolean:=true;
      ADOQuery1.Post;
   end
   else begin
      ADOQuery1.Edit;
      ADOQuery1.FieldByName('durum').AsBoolean:=false;
      ADOQuery1.Post;
   end;
end;



ADOQuery1 check edilen/kaldırılan değere Locate olması için kod alanı sıralı olmalı."CheckListBox1.ItemIndex+1" -->CheckListBox1'ın itemindex'ini "kod"un değerine eşitledik."+1" ise,indexler daima 0'dan başladığından ekledik.aksi halde check edilen/kaldırılan değerin hangi koda ait olduğunu bulamazdık. yada "kod"ların tablodaki sırası bir diziye atanarak "CheckListBox1.ItemIndex+1" bu dizinin indexine eşitlenerek ilgili koda Locate yapılabilir.