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.
0 yorum:
Yorum Gönder