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