1 Mart 2014 Cumartesi

Delphi XE5 - ClientDataSet Farklı Arama Fonksiyonu


   Farklı dediysem de aslında o kadar farklı değil sadece daha önce gösterdiğim ClienDataSet ara bul fonksiyonunun daha iyi bir versiyonu. Daha önce gösterdiğim ara bul da for döngüsünü kullanmış ve verisetinin ortasında seçtiğiniz bir değeri bulmak için veri setinin sonuna geldiğinde tekrar başına dön demek zorunda kalıyorduk. Bu da veri setinin sonunda ki değeri görmemesine ve son değeri bulmasını istediğimizde sürekli sona geldiğinde başa döndüğü için bulamamasına neden oluyodu.



  Bu fonksiyonda ise for yerine while do kullanarak önceden koşulumuzu belirterek bulma işlemini yapacağız. Bunu göstermek için daha önceden yapmış olduğum veri üretme uygulamasını kullanacağım. Öncelikle bir arayüzümüze bakalım.


  Bir önceki uygulamaya ek olarak sadece aşağıya bulma fonksiyonunu gerçekleştirmek için bir tane edit ve buton ekledim. Edit 'te ad soyad girdiğimiz de bulacak. Ancak şu an çok fazla aynı isimden bulunacağı için bize ilk değeri getirecektir. Siz ad ve soyada ek olarak başka kriterler koyarak ta istediğiniz veriyi bulabilirsiniz.

  Şimdi fonksiyonumuzu oluşturmaya başlayalım. Her zamanki gibi öncelikle fonksiyon kalıbımızı oluşturalım

function adı(adı:parametre ; adı:parametre ):sonuctürü;
 begin
.
.
.
 Result
end;

 Fonksiyonumuza isim verelim ve parametrelerimizi girelim

 function arabul(clientdataset:tclientdataset; nerede:tedit):boolean;

Edit nesnesine girilen ad soyadı sütunlarımızda arama yapması için parçalamamız gerekmekte. Çünkü ad ve soyad ayrı sütunlarda ve Edit nesnesine girilen ad soyadın ad kısmını alarak ad sütununda soyad kısmınıda soyad sütununda aratmalıyız. Bunun için string işlemlerinden pos ve copyi kullanarak:

  ad := Copy(nerede.Text,1,pos(' ',nerede.Text)-1);
  soyad := copy(nerede.Text,pos(' ',nerede.Text)+1,length(nerede.Text)-length(Copy(nerede.Text,1,pos(' ',nerede.Text))));

ad ve soyad kısımlarını ayrı ayrı almış oldum. Burada yaptığım belki birçoğunuzun bildiği önce boşluğun yerini bulup boşluğa kadarki kısmı kopyalayarak adı almak. Sonrasında da soyad için boşluk pozisyonundan cümlenin sonu kadar olan kısmı kopyalamak oldu.

Bunuda fonksiyonumuza ekledikten sonra şimdide fonksiyonumuzun aslında ne yapmasını istediğimize geldi. Algoritma mantığını uygularsak

1. Veri seti kontrolünü kapat
2. Veri setinin başına git
3. Veri setinin sonuna gelinceye kadar git
4.  Eğer ad ve soyad girdiğim değerlere eşit bir değer varsa dur
5. Veri seti kontrolünü etkinleştir.

Kodlamaya dönüştürecek olursak eğer

try
    ClientDataSet.First;
       while not clientdataset.eof do
       begin
          if (ClientDataSet.FieldByName('name').Text = ad) and (ClientDataSet.FieldByName('surname').Text = soyad)  then
        begin
          bul := true;
          break;
        end;
          ClientDataSet.Next;
        end;
  finally
    clientdataset.EnableControls;
  end;

Artık fonksiyonumuz hazır bütün kodlamayı görecek olursak:

function arabul(clientdataset:tclientdataset; nerede:tedit):boolean;
var
  ad,soyad : string;
  bul : boolean;
begin
bul := False;
ClientDataSet.DisableControls;
  ad := Copy(nerede.Text,1,pos(' ',nerede.Text)-1);
  soyad := copy(nerede.Text,pos(' ',nerede.Text)+1,length(nerede.Text)-length(Copy(nerede.Text,1,pos(' ',nerede.Text))));
  try
    ClientDataSet.First;
       while not clientdataset.eof do
       begin
          if (ClientDataSet.FieldByName('name').Text = ad) and (ClientDataSet.FieldByName('surname').Text = soyad)  then
        begin
          bul := true;
          break;
        end;
          ClientDataSet.Next;
        end;
  finally
    clientdataset.EnableControls;
  end;
end;

Artık fonksiyonumuzu istediğimiz yerde kullanabiliriz. Örnek verecek olursak:

procedure TForm4.Button6Click(Sender: TObject);
begin
  arabul(ClientDataSet1,edit4);
end;

Artık edit nesnesine girdiğimiz ad ve soyadı veritabanında bulabilirsiniz.



Okuduğunuz İçin Teşekkür Ederim
Hakan UÇAR
İstatistikçi ve Amatör Programcı
İçerikler Tamamen Ücretsiz Olup Özgün Anlatımdır Paylaşırken Kaynak Belirtiniz Lütfen.

Uygulamayı Yandex Diskimden indirebilirsiniz.

Yandex Disk Benim Linkimle Her Üye olana 1 GB Size 0,5 GB Bana Extra Alan Vermekte Aşağdıdaki Resmi Tıklayıp Üye Olursanız Sevinirim.

Bumerang - Yazarkafe

0 yorum:

Yorum Gönder