19 Şubat 2014 Çarşamba

Delphi XE5- ClientDataSet 2 Kolona Göre Filtreleme


  Bazende veritabanın da iki veya daha fazla özelliği tutan karakteri çağırmak isteyebilirsiniz. Örneğin devasa bir veritabanın da hakan isminden yüzlerce hatta binlerce olabilir bu gibi bir durumda ayıt edici bir özellik olarak başka bir değeri de araştrırsınız. Bu yüzden bu yazıda biden fazla özellik kullanarak filtreleme yapmadan bahsedeceğim. Bir başka yazı olan ClientDataSet Kolona Göre filtreleme yazısındaki fonksiyonu biraz modifiye ederek yeni bir fonksiyon üreteceğim.


   Formumuza 2 adet Edit ekledim.Bu Editleri kullanarak ilkinde isim ikincisinde soyadi değişkeni kullanrak filtreleme yapacağım. Öncelikle kolon filtreleme yazısındaki filtreleme foksiyonunu hatırlayalım.

function filter(clientdataset:tclientdataset;combofiltre:tcombobox;aranacak:tedit):string;
var
ne,kolon:string;
begin
try
    kolon:=combofiltre.Text;
    ne:= aranacak.Text;
      clientdataset.Filtered := true;
      clientdataset.Filter := kolon+' like' +QuotedStr(ne+'%');
except
       if clientdataset.Filter <> kolon+' like' +QuotedStr(ne+'%') then
               ShowMessage('İstenilen Değer Bulunmadı');
  result:='İşlem tammdır';
end;
end;

  Burada aramayı combobox taki kolon değer kısıtı altında arıyoduk şimdi ise birinci edit kısıt olurken ikinci editte ya da tam tersi birinci edit kısıt olurken ikinci editte arama yapacağız. Kısacası arama sonucu çıkması için her iki editinde veri tabanında uyuşması gerekiyor.

 Bunun için fonksiyondaki combobox parametresini çıkarıyorum ve yerine ikinci bir edit parametresi ekliyorum. yeni eklediğim editi tanıtmam lazım


parametreler

tclientdataset
tedit
tedit

parametreleri kullanmak için verilen isimler

clientdataset
bulunacak1
bulunacak2

Fonksiyonu yazacak olursak

Function filter(clientdataset:tclientdataset;aranacak1,aranacak2:tedit):string;

gerekli tanımlamaları yaparsak

var bul1,bul2:string;

 Şimdi artık fonksiyonumuzu birleştirebiliriz

function filter(clientdataset:tclientdataset;aranacak1,aranacak2:tedit):string;
var
ara1,ara2:string;
begin
try
  ara1:= aranacak1.Text;
  ara2:= aranacak2.Text;
    clientdataset.Filtered := true;
    clientdataset.Filter := '[adi] like' +QuotedStr(ara1+'%') + 'and [soyadi] like' +QuotedStr(ara2+'%')  ;
  except
  if clientdataset.Filter <> '[adi] like' +QuotedStr(ara1+'%') + 'and [soyadi] like' +QuotedStr(ara2+'%') then
  ShowMessage('İstenilen Değer Bulunmadı');
  result:='İşlem tammdır';
end;
end;

  Bu fonksiyon sadece adi ve soyadi kolonlarında arama yapmakta siz isterseniz farklı kolonlarda arama yapabilirsin. Ayrıca yine iki tane combobox ekleyerek bir önceki yazdığım fonksiyonla birleştirerek arama yapacağı kolonlarıda siz seçtirebilirsiniz.

 Örnek üzerinde kullanımı gösterecek olursak;

procedure TForm1.Edit1Change(Sender: TObject);
begin
filter(ClientDataSet1,edit1,edit2);
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
filter(ClientDataSet1,edit1,edit2);
end;

  Artık her iki edit içindeki değerlerin uyuştuğu veriler gelecektir. DataClientSet uygulamalarınızın başka bilgisayarlarda doğru çalışması için uses kısmına midaslib eklemeyi unutmayın. Ayrıca ClientDataSet yapılandırmasınıda şu şekilde yapabilirsiniz:

procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.FileName:=ExtractFilePath(Application.ExeName  )+'veritabanıismi.cds';
ClientDataSet1.Active:=true; 
end; 

Okuduğunuz İçin Teşekkür Ederim
Hakan UÇAR
İstatistikçi ve Amatör Programcı

Uygulamayı Yandex Diskimden indirebilirsiniz.

 2 kolon filtreleme





0 yorum:

Yorum Gönder