24 Şubat 2014 Pazartesi

Delphi XE5 - ClientDataSet Rastgele Veri Üretme Fonksiyonu


  Veritabanlarının ne kadar veriyi kaldırabileceğini bilmemiz için bu durumla karşılaşmamız gerekmekte o yüzden bende ClientDataSet ' te veri üretme fonksiyonu oluşturmaya karar verdim. Amacım bir milyon veri üretip içinde filtreleme ve sorgu yapmak.





  Bunu yapmak için oluşturduğum uygulamada dört sütun oluşturdum id,name,surname ve age adında. İD sütununu otomatik yaparak satır değeri arttığında var olan satırın bir fazlasını yeni satıra ekleyecek şekilde ayarladım:

  Şimdi fonksiyonumuzu oluşturmaya başlayalım. İlk önce fonksiyon kalıbımızı hatırlayalım:

Function ....(..;..;..) : .... ;
  begin
.
 .
 .
 Result := .... ;
end;

 Öncelikle fonksiyonumuza bir isim verelim ve fonksiyonda kullanacağımız parametrelerimizi tanımlamaya başlayalım. Fonksiyon' umuzun ismi üret olsun ve bu fonksiyonda iki parametre kullanacağız. Bir tanesi clientdataset diğeri ise ne kadar üreteceğini belirlediğimiz edit parametreleri.

parametreler

TClientDataSet
TEdit

Parametre isimleri

ClientDataset
Nekadar

 Bunları yerine yazıp fonksiyonumuzu oluşturalım:

function üret(clientdataset:tclientdataset; nekadar:tedit) :boolean;

Fonksiyonumuz artık hazır şimdi de fonksiyonun neler yapacağını girelim. Algoritma mantığıyla hareket edersek.

1. Veritabanına ekle (insert) metoduyla veri ekle
2. Veriyi kabul et
3. Bir sonraki hücreye geç ve tekrar ekle
4. Biz ne kadar eklemek istiyorsak bunu o kadar tekrarla tekrarla

 Bu yolu takip ederek fonksiyonumuzun diğer adımına geçelim ve bu dediklerimizi kodlamaya başlayalım. Veritabanın da gezinmek ve yeni veri eklemek için for döngüsünü kullanacağım. For döngüsünü en son veri sayısının bir fazlasından ne kadar istediğimize kadar yapacağım. Çünkü diyelim 1000 veri ürettiniz sonra 1000 daha üreteceksiniz, kaldığınız yerden yani 1001 veriden başlayarak ekleyecek.

var i : integer;

gerekli tanımlamalar yapıldıktan sonra

    for i := (clientdataset.RecordCount+1) to (clientdataset.RecordCount+strtoint(nekadar.Text))
   begin
     clientdataset.insert;
     clientdataset.FieldByName( FieldName ).Value := ??????????;
     clientdataset.Post;
     clientdataset.Next;
   end;

 Artık hücrelere ne ekleyeceğimize bakalım. İd sütununa her yeni eklenen veride bir ardışık numara versin istiyorum bunun içinde hücre sayısı her arttığında yeni hücrenin sayısı eski hücre sayılarının toplamının bir fazlası olarak eklensin diyeceğim. Bunun için

 clientdataset.FieldByName('id').Value := i;

demem yeterli olacaktır.

 Age sütunu içinde belli yaş arasında rastgele veriler girmek istiyorum. Bunun içinde RandomRange komutunu kullanacağım Bu komutla belli değerler arasında sayılar üreteceğim. Bu sayılarıda hücrelere aktaracağım. Bu komutu kullanabilmek için

uses: Math; 

eklemeniz gerekmektedir. Yoksa çalışmayacaktır.

clientdataset.FieldByName('age').Value := RandomRange(13,65);

13 ile 65 arasında sayı üretip age sütunun hücrelerine yazdırabiliyorum artık. Şimdi de name ve surname sütun hücrelerinin oluşturulması işlemine geldi. Bunun için öncelikle bir ad ve soyad havuzu oluşturmam lazım. Bunu bir kaç metotla yapabilirsiniz. Ben array kullanmaya karar verdim siz isterseniz listboxtan veya memodan rastgele  çekebilirsinizde.

  Bunun için iki tane dizi(array) tanımlama gerek bunlarda bir tanesi ad için diğeride soyad için const  bu dizileri (arrayleri) formun her yerinde kullanmak için implementation üzerine yerleştirdim

const
isim: array [1..16] of string = ('hakan',
    'murat', 'merve', 'selin', 'kerim',
    'serkan', 'evrim', 'neslihan', 'kadircan', 'bayram',
    'kaan', 'ahmet', 'çağla', 'ali',
    'özlem', 'mustafa');
soyisim: array [1..16] of string = ('kabarcık',
    'zerdali', 'aşgar', 'keklik', 'erdir',
    'demir', 'uçar', 'keskin', 'koca', 'türk',
    'erdil', 'kuzey', 'ceben', 'biber',
    'karaman', 'köstekçi');

implementation

  on altı farklı isim ve soyisimi iki dizi (array) de eklemiş oldum. Şimdi bunları hücrelere rastgele eklememiz gerekiyor. Bunun için yine 1 ile 16 arasında sayı üretip bu sayılara denk gelen dizi elemanını çekmem gerekiyor. RandomRange metodunu kullanarak yeni bir değişken olan rnd yi tanımlıyorum ve bir ile on altı arasında sayı üretiyorum. İsterseniz tanımlamayıp age kodunda olduğu gibi direkt kodun içinde de kullanabilirsiniz.

var i , rnd1, rnd2 :integer;
begin
rnd1: RandomRange(1,16);
rnd2: RandomRange(1,16);

 Artık isim ve soyisimleri hücrelere ekleyebilirim. Daha önce yaptığımız gibi.

     clientdataset.FieldByName('name').Value := isim[rnd];
     clientdataset.FieldByName('surname').Value := soyisim[rnd]; 

name ve surname sütununa artık rastgele isim ver soyisimde ekleyebiliyorum. Başka verileride siz dizi(array) tanımlayarak ekleyebilirsiniz. Fonksiyonun son hali:

function üret(clientdataset:tclientdataset; nekadar:tedit) :real;
var
 i , rnd1, rnd2 : integer;
begin
  for i := (clientdataset.RecordCount+1) to (clientdataset.RecordCount+strtoint(nekadar.Text)) do
   begin
    rnd1 := RandomRange(1,16);
    rnd2 := RandomRange(1,16);
     clientdataset.insert;
     clientdataset.FieldByName('id').Value := i;
     clientdataset.FieldByName('age').Value := RandomRange(13,65);
     clientdataset.FieldByName('name').Value := isim[rnd1];
     clientdataset.FieldByName('surname').Value := soyisim[rnd2];
     clientdataset.Post;
     clientdataset.Next;
   end;
end;

 Bunu nasıl kullanacağız örneğin:

procedure TForm4.Button1Click(Sender: TObject);
begin
üret(ClientDataSet1,edit1);
end;

Verilerin tamamını silmek için:

procedure TForm4.Button2Click(Sender: TObject);
begin
ClientDataSet1.DisableControls;
 try
   ClientDataSet1.EmptyDataSet;
 finally
   ClientDataSet1.EnableControls;
 end;
end;


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.

Uygulamanın kaynak kodlarına göz atmak isterseniz Yandex Diskimden inderebilirsiz.


Bumerang - Yazarkafe




0 yorum:

Yorum Gönder