Veri Tabanı Ve Database Desktop

12 Temmuz 2007



Veri Tabanı ve DataBase Desktop

Bu Veritabanı Uygulamaları geliştirmek makale dizisinin bu bölümünde Veritabanının ne olduğundan başlayıp, veritabanı tabanı tasarımına, veri tabanı motorlarına oradan Borland Database Engine (BDE) ve Database Desktop kullanımına değineceğim. Eğer tecrübeli bir veritabanı kullanıcısı iseniz bir bu makale dizisinin sonraki bölümünü okumanızı tavsiye ederim. Fakat anahtar,tablo ilişkileri,lookup,index terimleri ile problemleriniz varsa yada Database Desktop programını verimli kullanamadığınıza inanıyorsanız bu makaleyi okumalısınız.

Veri Tabanı Nedir?

Veritabanı; kısaca verilerin tutulduğu yer anlamına gelir. Fakat bu tanımdan kasıt verilerin tutulduğu bir dosya olmayabilir.Örneğin BDE bir veritabanını her bir dosyaya bir tablo gelecek şekilde ayırmıştır.Fakat Access için tek bir dosya söz konusudur.

Tablo:Düşünün ki bir miktar saklamak istediğiniz veriniz var. Bunlar:

Can,Kaynak,jankaynak@hotmail.com,Turkware Software Co., Mustafa,Kapsal,mustafakapsal@turkware.com,Turkware Software Co. vs.

Eğer yukarıdaki verileri guruplamak istesek:

Soyadı Gurubu:Kaynak,Kapsal

Ad Gurubu:Can,Mustafa

Şirket Gurubu:Turkware Software Co.,Turkware Software Co.

E-Mail Gurubu:jankaynak@hotmail.com,mustafakapsal@turkware.com

Gördüğünüz gibi 4 ana başlık altında toplayabildim böylece daha düzenli oldular ve aradığımı çabuk bulabilecek hale getirdim.

Yani tablo haline getirdim. Tablonun anlamı aynı niteliği betimleyen verileri tek bir gurup altında toplamaktır.Bu guruplar benim tablomun sahalarıdır. Aşağıda yukarıdaki örnek bir tablo haline getirilmiştir.

Soyadı

Adı

Şirket

E-Mail

Kaynak

Can

Turkware Software Co.

jankaynak@hotmail.com

Kapsal

Mustafa

Turkware Software Co.

mustafakapsal@turkware.com

yukarıdaki tabloda Soyadı,Adı,Şirket,E-Mail adları sahalarımı tanımlayan isimleri oluşturdu. Dikkat! bu bahsettiğim Soyadı,Adı,Şirket,E-Mail sahaları tablomun sadece sahalarını tanımlar tablomun verilerine dahil değildir.

Her satır bir kayıtı tanımlar. Kayıt, Saha adlarına uygun olarak girilmiş verilere denir.

Tabloda Birincil Anahtar:Tablo; veri tabanının en önemli özelliğine uymalıdır.Tabloda tek olma. yani tüm sahaları aynı iki kayıt bir veritabanında bulunamaz. Bunun için Veritabanını sıralayan bir sahaya daha ihtiyaca vardır. Tabi ki her zaman ayrı bir saha olacak diye bir kaide yok ama eğer sahanızda hiç tekrarı mümkün olmayan bir sahanız yoksa yeni bir saha yaratmanız kaçınılmazdır.Biz bu sahayı birincil anahtar olarak niteleriz. Yukarıdaki örneğe bir birincil saha ekleyelim.

ID(*)

Soyadı

Adı

Şirket

E-Mail

Kaynak

Can

Turkware Software Co.

jankaynak@hotmail.com

Kapsal

Mustafa

Turkware Software Co.

mustafakapsal@turkware.com

yukarıdaki örnekte ID adında bir saha daha ekledim. Bu ID sahasını sıralama değişkeni olarak kullanacağım her eklediğim kayıt öncekilerden farklı bir sayı olacak. Böylece tabloda tek olama kuralını korumuş olacağım.

Yukarıda ID sahasının yanına parantez içinde bir yıldız koydum. Yıldız işareti o sahanı bir anahtar olduğunu belirtir.Bu yıldız tanımlaması tüm programcılar tarafından kullanılan bir standarttır.

Daha önce bahsettiğim gibi her zaman birincil anahtar eklemek için farklı bir saha kullanmayabiliriz. Bunu yerine basbaya e-mail sahasını da kullanabilirdim. Çünkü herkesin kendine ait bir e-maili olacağı için tabloda tek olma kuralı yine korunmuş olur.

E-Mail(*)

Soyadı

Adı

Şirket

jankaynak@hotmail.com

Kaynak

Can

Turkware Software Co.

mustafakapsal@turkware.com

Kapsal

Mustafa

Turkware Software Co.

Tablolar arası ilişkiler:

Bazen bir veriyi topluluğunu tek bir tabloda tutmak mümkün olmayabilir. Bunun gerekçesi tek bir öğe için birden çok kaydın olmasıdır. Bunu şöyle açıklayabiliriz:

Mesela benim birden çok telefonum var.bunu iki şekilde tutabilirim. birincisi:

ID(*)

Soyadı

Adı

Birinci Telefon

İkinci Telefon

Kaynak

Can

555 45 44

555 45 45

Kapsal

Mustafa

555 73 67

yukarıdaki örnekteki gibi tutmak sağlıklı değildir. Çünkü eğer ben başka bir telefon sahibi daha olursam bunu nereye yazacağım. Bunun nihayi çözümü tablolara parçalamak olacaktır. Şöyle ki:

ID(*)

Soyadı

Adı

Kaynak

Can

Kapsal

Mustafa

Telefon

555 45 45

555 45 44

555 73 67

Gördüğünüz gibi yukarıdaki örnekteki gibi tanımlarsak iki ayrı tabloya ayırmış oluruz.Ama Telefon bilgilerini içeren tabloda bir şey eksik. Telefonları kime ait olduğu. Telefonların kime ait olduğunu belirten bir saha daha eklemeliyiz.Ekliyeceğimiz saha kişi bilgilerini içen tablodaki tekrarsız saha olmalı.Örneğimizi şu şekilde değiştiriyoruz.

ID(*)

Soyadı

Adı

Kaynak

Can

Kapsal

Mustafa

Telefon(*)

ID

555 45 45

555 45 44

555 73 67

Yukarıdaki örnekte gördüğünüz gibi telefon bilgilerini içeren tabloya eklediğimiz, kişi bilgilerini içeren tablodaki anahtar saha ile aynı niteliğe sahip saha;telefon bilgilerini kişi bilgileriyle eşleştirip anlaşılır bir kayıt kümesi oluşturdu.

İpucu: Eğer elinizde bir veri kümesi varsa ve hangilerinin hangi tabloda yer alacağına karar vermiyorsanız; şu yöntemi deneyin. Eğer bir kayıt için o saha birden çok bilgi içeriyorsa bu yeni bir tablodur.Bölün.

Eğer tabanınızda birkaç kayıt varsa veri bu işlemin işlerliliği fazladır.Fakat binlerce kayıtla uğraşıyorsanız bu tanımlarda size yetmeyebilir. Bu tabloların kendi kendine birbiri ile iletişim kurmasını istiyorsak ilişkilendirmeliyiz.

İlişkiler; bir veri tabanının içindeki tabloların birbiri ile aynı görevde olan sahalarının birbirine bağlanması şeklinde nitelendirilebilir.

İlişkiler ikiye ayrılır:

Bire-Çok ilişki

Bire-Bir ilişki

Bire-çok ilişki; bir tablodaki her bir veri için ilişkili tablodaki sahaya karşılık gelen birden çok veri varsa buna Bire-Çok ilişki denir.Örneğin Bir babaya karşılık iki çocuk varsa bu bire çok ilişkidir. Çünkü baba her ikisininde babasıdır.

Bire-Bir ilişki; Bir tablodaki her bir veri için diğer tablodaki sahaya karşılık gelen bir veri varsa buna Bire-Bir ilişki denir. Örneğin Bir kişinin bir saat takması gibi.

Bire-bir ilişkiler bir tablonun kendi sahaları arasındaki ilişkidir. Bire çok ilişkiler ise bir tablonun anahtar sahası ile başka bir tablonun aynı nitelikteki sahası ile ilişkisidir. Bu ilişkileri en iyi tasarlayabileceğiniz program MsAccess programıdır. Veritabanı uygulamalarında hiç faydalanmasanız bile sadece ilişkileri düzenleme ekranından faydalanabilirsiniz.Yandaki resim bire çok ilişkinin MSAccess programında nasıl görüntülendiğini açıklar.

Database Desktop

Database Desktop programı Delphi ile gelen bir programdır. Bu program yardımı ile tablolar ile ilgili her türlü işlemi yapabiliriz. Database Desktop pek çok veritabanı motorunu kullanmanıza izin verir.

Delphi kullanıcıları arasında en çok kullanılanı ise Paradox’tur. Çünkü Paradox büyük veri yapılarıyla çolayca başa çıkabilir. Bende bu yüzden şimdilik sadece Paradox kullanımını örnek göstererek Database Desktop’ı size anlatacağım.

Database Desktop’ta yeni bir tablo yaratmak için File/New/Table comutunu çalıştırmanız gerekiyor. Daha sonra karşınıza yandaki gibi bir ekran çıkacak buradan Paradox7′yi seçin.Eğer Daha önceki sürümleri kullanmak yada başka veritabanları kullanmak istiyorsanız yine buradan seçebilirsiniz ama ben Paradox7 ile örnekleyeceğim için Paradox7′yi seçmenizde fayda var.

Not:Paradox7 ve tüm Paradox sürümleri %100 güvenli değildirler. Şifreleme yaptığınızda bile eğer bir cracker Paradox supervisor şifrelerini biliyorsa kolaylıkla veritabanınızın içinde ne var diye bakabilir. Bunu önlemenin yolu Crypt ve DeCrypt yöntemeleri ile verilerinizi şifrelemektir.

Hata! Yer işareti tanımlanmamış.

OK tuşuna bastığınızda karşınıza yandaki menü gibi bir menü gelecek.Bu Menüde İlk olarak Field Name Type Size ve Key hücreleri olacak.

Field Name hücresine 25 karakter uzunluğunda Delphi değişken isimlendirme kurallarına uygun bir isim girmelisiniz.

Type Hücresi bir açılır menü şeklindedir. Menünün içeriği ve delphideki karşılığı:

Alpha (String)

Number(Float)

Money(Integer)

Short(ShortInt)

Long Integer(Integer)

#BCD(Double)

Date(DateTime)

Time(TDateTime)

@TimeStamp(TDateTime)

Memo(TMemo)

Formatted Memo(TRichEdit)

Graphic(TGraphic)

OLE(Tüm OLE Bileşenleri)

Logical(Boolean)

+AutoIncrement(Integer)

Binary(ikili veriler)

Bytes(Array of Char)

Alpha: Alpha tipi tüm yazdırılabilir karakterleri içerir.0-255 arasında boyutu olabilir. Delphi’de String tanımlı bir değişken tarafından kullanılabilir.

Number:Number tipi sadece pozitif/negatif işareti,ondalık işareti ve sayı içerebilir. Pozitif ve negatif ifadeler tutabilir.-10307den 10307′ye kadar değer alabilir.Delphi’de Float tanımlı bir değişken tarafından kullanılabilir.

Money:Money tipi tıpkı diğer tipler gibi sayı içerir fakat sadece gösterimi diğerlerinden farklıdır.Her üç hanede bir nokta ile ayrılır. fakat bu değerine etki etmez.Delphi’de Float tanımlı bir değişken tarafından kullanılabilir.

Short:Short Tipi -32,767′den 32,767′e kadar değer içerebilir.Delphi’de Integer tanımlı bir değişken tarafından kullanılabilir.

Long Integer:Long Integer tipi -2147483648′den 2147483647′e kadar değer içerebilir.Delphi’de LongInt tanımlı bir değişken tarafından kullanılabilir.

BCD(Binary Coded Decimal):BCD tipi ikili codlanmış sayısal veri içerir.Diğer sayısal tiplerin sağladığından daha hassas hesaplamalar yapmanız gerektiğinde BCD sahaları kullanın.Fakat hesaplamalar diğer veri tiplerinden daha yavaş olacaktır.

Date: Date tipi ile 1 Ocak 9999 M.Ö’dan 31 Aralık 9999 M.S’ye kadar ki tarihleri tutabilirsiniz.Tüm artık yılları düzgün bir şekilde tutar. Delphi’de TDateTime ile çevrimler sonucu kullanılabilir.

Time:Time tipi milisaniyeler halinde 24 saati adresler.Varsayılan saat tipini değiştirmek için Paradıx’u kullanmalısınız. Delphi’de TDateTime ile çevrimler sonucu kullanılabilir.

TimeStamp:TimeStamp tipi Time ve Date tiplerinde olan bütün özellikleri sağlayan birleşik bir tipdir. Delphi’de TDateTime ile çevrimler sonucu kullanılabilir.

Memo:Memo Tipi tüm yazdırılabilir ASCII kodları içerebilir (NULL dışında).Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.Bu tipi delphide kullanmak için TMemo nesnesini kullanabilirsiniz.Boyut olarak 1MB dan 240 MB kadar bir boyut belirtebilirsiniz

Formatted Memo:Formatted Memo tipi bir Richeditin içerebileceği tüm içeriği sağlar.(renk,font,bold vs.).Tüm yazdırılabilir ASCII kodları içerebilir (NULL dışında).bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.Bu tipi Delphi’de kullanmak için TRichEdit nesnesini kullanabilirsiniz..Boyut olarak 1MB dan 240 MB kadar bir boyut belirtebilirsiniz

Graphic:Graphic tipi .BMP, .PCX, .TIF, .GIF, ve .EPS dosya formatlarını destekler. Bu dosya formatlarını BMP dosya formatınıa çevirip bu şekilde saklar.Graphic tipinin boyut tanımlamaya ihtiyacı yoktur çünkü tablodan farklı bir dosyada tutulurlar.Bu tipi Delphi’de kullanmak için TImage nesnesini kullanabilirsiniz.

OLE:OLE tipini her çeşit dosyayı tutmak için kullanabilirsiniz.OLE sahası bu tip verileri göstermek ve değiştirmek için bir yol sağlar.Fakat ne yazık ki Database Desktop bu içeriği gösteremez.OLE tipinin boyut tanımlamaya ihtiyacı yoktur çünkü tablodan farklı bir dosyada tutulurlar.Bu tipi Delphi’de kullanmak için OLE nesnesini kullanabilirsiniz.

Logical:Logical tipi TRUE yada FALSE tipinde iki değer tutabilir.Delphi’de Boolean tipi ile birlikte kullanabilirsiniz.

AutoIncrement:AutoIncrement tipi sürekli artan bir sayıyı ifade eder her kayıt eklendiğinde sahanın değeri bir artar. Böylece tekrarsız kayıtları oluşturulmuş olur. Genellikle Birincil Anahtar olarak kullanılır.Delphi’de LongInt tipi ile birlikte kullanabilirsiniz.

Binary:Binary tipi diğer tiplerle tutulamıyacak olan verilerin (genellikle kullanıcı tanımlı verilerin) tutulması için kullanılır tüm ASCII tabloyu kullanabilir.Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.

Bytes:Bytes tipi genellikle Barkod yada manyetik şeritleri tutmak için kullanılır.Bu tip Mb uzantılı bir dosyanın içinde tutulur.Asıl tabloya bağlanır.

Size hücresine hangi veriyi girmişseniz o veri ile ilgili boyutu girmelisiniz. tanımlama ekranının alt kısmında bu konuda bilgi vermektedir.

Key hücresi Anahtar saha olup olmadığını denetler. Eğer bu sahanın üzerini çift tıklarsanız o sahayı Anahtar saha yapmış olursunuz.

Tablo Özellikleri

Veritabanı Uygulamaları geliştirmek makale dizisinin bu bölümünde Paradox’un tablo özelliklerininin kullanımına değineceğim. Bu Bölümde saha geçerlilik kurallarının tanımlanması,Table lookup,secondary indexes(ikincil anahtarlar),referantial Integrity(tablo ilişkileri),Şifre güvenliği ve Tablo dilinin ayarlanması konularıolacak.Bu bölümü her Delphi programcısının en a zbir kez okumasını tavsiye ederim çünkü mutlaka benim analttığım ve sizin kullanırken gözünüzden kaçırdığınız birkaç ayrıntı olabilir.

A) Sahaların Geçerlilik Kuralları:

Bir sahanın üzerinde dolaşırken eğer tipini tanımladıysanız sahanın tipine göre saha özelliklerini belirleyebileceğiniz metin kutuları,bir onay kutusu ve bir düğme kullanılabilir hale gelir.Bu metin kutularını kullanarak sahayı istediğiniz özelliklerde belirleyebilirsiniz.

Required Field: Tabloya giriş esnasında kullanıcı sahayı atladığında hata vermesini sağlar.Böylece kullanıcını hiç bir şekilde bu sahayı boş geçmemesini sağlarız.

Minimum Value:Sahanın tip tanımlamasına uygun bir şekilde sahanın alabileceği minimum değeri içerir. Örneğin bir sepetteki elma sayısı asla eksili bir değer olamaz. Bunun için minimum değerine 0 atamalıyız.

Maximum Value:Sahanın tip tanımlamasına uygun bir şekilde sahanın alabileceği maximum değeri içerir.Örneğin iskambik kağıdı no’su tutan bir saha için iskambil kağıdı sayısı 52′den fazla olamaz.olursa hile var demektir :)

Default Value:Bu sahanın varsayılan değeridir. Minimum ile maximum değerleri arasında bir değer almalıdır.

Picture: Bu sahanın görünüm ve giriş şeklidir.Bu özelliği kullanarak sahanıza yapılan girişin sizin belirlediğiniz kurallara uygun olup olmadığını hiç bir kod yazmadan kontrol edebilirsiniz.

chr

Anlamı

Sayısal değer

Herhangi bir yazı karakteri (büyük yada küçük)

Herhangi bir yazı karakteri (büyüğe dönüşür)

Herhangi bir yazı karakteri (küçüğe dönüşür)

Herhangi bir karakter

Herhangi bir yazı karakteri (büyüğe dönüşür)

Kendinden sonra gelen karakterin kendisini yazdırır.

izleyen karakteri herhangi bir sayı kadar tekrar eder

[abc]

a,b veya c Seçimlik karakterleri

{a,b,c}

a,b veya c Seçimlik karakterleri

Örnekler:

Picture

Açıklama

Örnek

#&#&#&

Canada posta kodu

1A2B3C

#####[-####]

Amerika posta kodu

12345 yada 12345-6789

*8{!}.*{3}

MS-DOS için dosya adı

Girilen bütün karakterler büyük harf olur.

{Yes,No}

Evet yada hayır

[(0*3{#})] *3{#} *2{#} *2{#}

Türkiye Telefon Numarası

555 45 45 yada (0232) 555 45 45

(05{3,4}{2,5}) *3{#} *2{#} *2{#}

Cep Telefon Numarası

Tüm cep telefon numaraları bu kodlama ile yazılabilir.

Örneklere bakarak sizde kendi giriş formüllerinizi yazabilirsiniz.Bunun için önce yukarıdaki resimde gördüğünüz Assist düğmesine basarak yandaki resimde olduğu gibi bir ekran çıkaracaksınız. Daha sonra picture yazan metin kutusuna düşündüğünüz formatı yazacaksınız. Doğru olup olmadığını test etmek istiyorsanız Verify Syntax düğmesine basmalısınız.

Eğer yazdığınız formatı denemek istiyorsanız Sample Value metin kutusuna formatta belirttiğiniz şekilde bir veri girmelisiniz. Eğer girdiğniz verinin formata uygun girilip girilmediğini merak ediyorsanız Test Value düğmesine basın.Eğer Value is Valid mesajını görürseniz girdiğiniz veri hazırladığınız formata uygun demektir.

Hazırladığınız bu formatı kaydetmek için add to list düğmesine basmalısınız.

Eğer listedeki bir format kullanmak istiyorsanız formatı seçip Use düğmesine basmalısınız.

B) Table Lookup:

Table lookup tanımlamak için Table Properties combo kutusundan table look up seçeneğini seçip define düğmesine basmalısınız.

Karşınıza yandaki gibi bir ekran çıkacak. Burada sağda tanımlı olan sizin şu anda üzerinde çalışmakta olduğunuz ve look up tanımlayacak olduğunuz tablodur. Buradan hangi sahayı look up saha olarak tanımlamak istiyorsanız o sahayı liste kutusundan seçip FieldName metin kutusunun solundaki düğmeye basarak metin kutusuna atamalısınız.

Soldaki sahada seçilen aliasın içerdiği tabloları görüyorsunuz. Bu tablolardan look up yapmaya uygun bir tanasini seçip look up field metin kutusunun sağındaki düğmeye tıklayarak metin kutusuna atamalısınız. Burada dikkat edeceğiniz husus FieldName ile LookUp field sahalarının tiplerinin birbirine uyması. aksi taktirde hata verecektir. Unutmayın ki lookup tablonun hep ilk satırı lookup field metin kutusuna gelir.Eğer Lookup tablosu olarak kullanacağınınz tablonun ilk sahası anahtar saha olursa bu lookup yapma işlemini hızlandırır.

Look up Type

Just Current Field: Sadece Tanımlanan saha look up dan gelen bilgiler tarafından doldurulur.

All Corresponding Fields:Sadece tanımlanan look up saha değil look up tabloda bulunan ve lookup saha içeren tablonun tipleri ve adları uyan sahalarına da varsayılan değerleri atar. Örneğin içinde soyadı ve adı bulunan bir tablodan lookup yaptığımızı düşünelim. Eğer lookup yapan tabloda soyadı ve adı sahaları varsa mutlaka bu iki değeri doldurulur.

Look up Access

Fill No Help: Sahaya bir veri girerken yardımcı olmaz.

Help And Fill:Sahaya veri girerken yadımcı olur.

C) Secondary Indexes:

İkincil indeks, kayıtlar arası aramaları hızlandırmak yada farklı bir sıralama kuralına göre kayıtları dizmek için tanımlanır. İkincil indeksi bir sahadan yaratabileceğiniz gibi birden çok sahanın bir kombinasyonu olarakta yaratabilirsiniz.Not olarak ikincil indeks ile sadece bir kaydın sıralama kuralını değiştirebilirsiniz. Onun fiziksel sırasını değil.

ikincil Indeks tanımlamak için Table Properties combo kutusundan table Secondary Indexes seçeneğini seçip define düğmesine basmalısınız.

Yandaki ekran gibi bir ekran karşınıza çıkacak.Sağ tarafta üzerinde değişiklik yaptığınız tablonun sahaları görünmekte. Buradan birini yada birkaçını seçerek sağ ok düğmesine basarak Indexed Fields liste kutusuna ekleyebilirsiniz.

Alttaki change order adıyla tanımlanan düğmeleri kullanarak sahaların indekslenme sırasını değiştirebilirsiniz.

Index option grup kutusunda ise 4 özellik tanımlanmış.Bunlar:

Uniquie:İkincil indekste birden fazla kaydın aynı değeri içerip içeremeyeceğini belirtir.Eğer Uniquie işaretli ise ve Database Desktop tekrarlı bir kayda rastlarsa indeks uygulanmaz ve bir hata mesajı görüntülenir.Sahanın verisini değiştirip tekrar indekslemeye çalışabilirsiniz.

Descending:İkincil indeksin azalan yönde mi yoksa artan yönde mi sıralanacağını belirtir.Eğer işaretli değilse azalandan artana doğrudur.

Case Sensitive:Sıralamada büyük yada küçük harf oluşuna dikkat edilip edilmeyeceğini belirtir.

Eğer işaretliyse veri şu sırada konumlanır:

Abcd, aBcd, aaaa

Eğer işaretli değilse şu sırada konumlanır:

aaaa, Abcd, aBcd

Database Desktop tek sahaları,büyük küçük harf duyarlı indeksleri otomatik isimlendirir.Eğer büyük küçük harf duyarlılığı olmayan bir indeks kaydedecekseniz kaydederken bir isim vermelisiniz. Bu size büyük küçük harf duyarlılığı olan ve olmayan, aynı sahalara sahip, iki farklı indeks tanımlamanızı sağlar.

Maintained:İkincil indeksin korunup korunmayacağını belirtir.

Maintained indeksler her tablo değişikliğinde tekrar kaydedilir. Bu Sorgular gibi işlemleri hızlandırır.Maintain indeksler anahtar içeren tablolarda geçerlidir.Maintain olmayan indeksler sadece indeks kullanılırken güncellenir.Örneğin bir tabloya bağladığınızda yada bir sorguyu çalıştırdığınızda.

Bir maintain olmayan indeksi kullanan bir işlem yaptığınızda bu işlem diğerinden biraz daha uzun sürer. Çünkü ilk önce indeks tablonun değişen verilerine göre yeniden düzenlenip indeks kurallarını yeniden sıralanacaktır.Her halukarda eğer bir maintain olmayan indeks kullanmak isitiyorsanız değişmeyen bir tabloda kullanının.Mesela sadece okunabilir tablolarda maintained olmayan indeksler daha hızlıdır.

D) Referantial Integrity:

Referantial integrity tablolar arası ilişkileri tanımlar.tabloar arası ilişkilerin nasıl tanımlanacağı ve neden tanımlanması gerektiği bir önceki makalede ayrıntıları ile verilmiştir.Tablolar arası ilişkileri tanımlamak için Table Properties combo kutusundan Referantial Integrity seçeneğini seçip define düğmesine basmalısınız.

Yukarıdaki resimde gibi referantial integrity menüsü çıkacak. Fields liste kutusundan seçeceğimiz saha ile ilişkilendirmeyi düşündüğümüz tabloyu seçip table liste kutusunun yan tarafındaki düğmeye tıklamalıyız.yukarıdaki resimin sağ tarafında, üzerinde çalışmakta olduğumuz tablonun sahaları var.Bu sahalardan hangisini seçtiğimiz tablonun anahtar sahası ile ilişkilendirmek istiyorsak o sahayı seçmeliyiz. Böylece iki sahayı birbiri ile ilişkilendirmiş oluruz.

Update Rule:

Cascade:Eğer ana tabloda herhangi bir değişiklik olursa bu direk bağlı tabloya yansır.

Prohibit:Eğer ana tablodan bir veri silinecekse bağlı tabloda da bu veri kullanılmışsa silinmesine izin verilmez.

Strict Referantial integrity:Eğer bu işaretli ise; bu tablonun daha önceki paradox sürümleri tarafından kullanımı esnasında tablo ilişkisinin bozulmamasını sağlar.

E) Password Security:

Tablonuzun başkası tarafından görülmemesini istiyorsanız bir şifre belirtmelisiniz.(En azından Supervisor password’u bilmeyen biri tarafından).Bunun için Table Properties combo kutusundan Password Security seçeneğini seçip define düğmesine basmalısınız.

Karşınıza yandaki gibi bir ekran gelecek. Buradan bir şifre belirtebilirsiniz.Eğer Auxiliary Passwords düğmesine tıklayacak olursanız karşınıza aşağıdaki gibi bir ekran çıkacak. Bu ekrandan ilişkisel şifreler belirtebilirsiniz. Bu şekilde bir kişinin o tablo üzerindeki otoritesini de belirmiş olursunuz.

Not: Buraya belirteceğiniz şifre Ana şifreden mutlaka farklı olmalıdır aksi taktirde buraya şifre belirtmenin hiç bir anlamı yoktur. Tüm işlemler için aynı şifreyi belirtebileceğiniz gibi her işlem için ayrı ayrı şifreler de belirtebilirsiniz.Bunu new tuşu ile yeni bir şifre açıp şifreleyeceğniz sahaları seçip saha operasyonunu seçip şifrenizi girdikten sonra add düğmesine basmanız yeterli olacaktır.

Buradaki operrasyonlar:

Eklemek ve silmek,Sadece veri girmek, güncellemek,sadece okumak ve tüm işlemleri yapabilmek olarak sınıflandırılmıştır.

Not:Eğer gerçekten veri güvenliğine ihtiyacınız varsa Crypt veDeCrypt metotlarını kullanın.

F) Table Language:

Table Language kısaca tablonun dilini belirleyeceğiniz bölümdür.Standart olarak tablonun dili ingilizceye uygun bir kod sayfasıdır. Eğer Türkçe bir kod sayfası kullanmak istiyorsanız.Aşağıdakilerden birini kullanabilirsiniz.

Base Trk cp857

Paradox Turk

Pdox ANSI Turkish

Unutmamanız gereken asıl şey Türkçe büyük harfin küçük harfe yada küçük harfin büyük harfe çevrilirken yaşayacağınız problem.Bu tüm Database Desktop elemanları için geçerli bir sorundur. Büyük İ çevrilirken i ye çevrileceğine kod sayfasnıa göre farklı bir karaktere çevrilir. aynı şekilde I ise küçük ı ya çevrileceğine i’ye çevrilir. Bu bir fonksiyonla düzeltebilirsiniz.

BDE Administrator

Makale dizimizin bu bölümünde Borland Database EngineAdministrator (BDEA) programın özelliklerini inceleyeceğiz.alias kavramına,BDEA ile alias tanımına,BDEA sürücü özelliklerine,sistem tarih,saat ve sayı görünüm biçimleri ayarlarına,BDEA başlangıç ayarlarının özelliklerine değineceğiz.Bu bölümün sıcak konusu Ağ üzerinde veritabanı paylaşımı için gereken ayarlardır.Bu ayarların nasıl yapılacağı bir örnekle makalemizde mevcuttur.

BDEA

BDEA veri tabanlarının aliaslarını(takma ad),sürücü ayarlarını,tarih saat ve sayı tiplerinin veritabanı uygulamalarında nasıl görünmesi gerektiğini,BDE’nin başlangıç ayarlarını düzenleyebileceğimiz bir programdır.Delphi 5 ile birlikte gelir. Denetim masasındaki BDE Administrator simgesini tıklayarak yada programlar/Delphi5 menüsünden BDE Administrator itemini tıklayarak ulaşabilirsiniz.

BDEA iki sekmeye sahiptir bunlar yanda görüldüğü gibi databases ve configuration sekmesidir. Databases sekmesinde bir alias tanımını düzenleyebileceğimiz gibi yeni bir alias tanımı da yapabiliriz.Configuration sekmesinde ise sürücülerin ayarlarını tarih saat ve sayı tiplerinin veritabanı uygulamalarında nasıl görünmesi gerektiğini,BDE’nin başlangıç ayarlarını düzenleyebiliriz.

Alias:Bir veri tabanı dizini yolunun BDE tarafından kısaca takma ad ile adladırılmasıdır.Bu şekilde veritabanına ulaşmak için uzun uzun yolunu yazmak yerine BDE yardımı ile sadece aliasını kullanırız.

BDEA’da Alias şu şekilde tanımlanır. Önce Database sekmesinde iken object/new komutunu çalıştırın. karşınıza yandaki gibi bir ekran çıkacak.Bu ekranda veri tabanı türleri bulunmaktadır.Buradan biz bir paradox veritabanı oluşturacağımız için standart itemi seçili iken OK düğmesine basacağız.Bu database sekmesinin altına standard1 adında alias tanımı oluşturur.Aliasımıza hangi ismi vermek istiyorsak bu adı standard1 adıyla değiştirmeliyiz. Sonra Aliasımızı seçerek sağ tarafta özelliklerinin görüntülenmesini sağlamalıyız. PATH parametresine veritabanımızın bulunduğu yolu yazarak aliasımızı kaydetmeliyiz.

Eğer Ağ üzerinde bir veritabanı paylaştırmak yada veritabanının varsayılan dilini değiştirmek istiyorsak paradox sürücüsünün ayarlarını değiştirmeliyiz.Bunun için configuration sekmesinde drivers/native anahtarı altında bulunan Paradox driver anahtarını tıklamalıyız. Ekranın sağ bölümünde bazı özellikler görünecek bu özellikleri değiştirerek paradox sürücüsünün performanısını arttırabilir yada dosyalarımızın daha az yer kaplamalarını sağlayabiliririz.

Ağ üzerinde veritabanını paylaştırmak için paradox sürücüsünün NET DIR parametresini kullanacağız. bunu için önce veri tabanımızın bulunduğu bilgisayardaki veritabanı dizinimizi ağ üzerinde paylaştıralım. Daha sonra her bir kullanıcı için veritabanı dizinimizi yeni bir ağ sürücüsü olarak tanımlayalım.Sonra NET DIR parametresine bu eklediğimiz ağ sürücüsünün yolunu yazalım (F: gibi) ayarları kaydettiğimizde PDOXUSRS.NET dosyası bu sürücünün altına taşınacak ve diğer tüm kullanıcılar aynı veritabanı dosyalarını kullanacaklardır.

Bir Paradox tablosu tanımlarken language settings seçeneğinde ANSI gelir fakat bizim kullanıdığımız dil ‘Paradox Turk’ yada diğer türkçe sürücülerdir.Bunu her seferinde otomatik türkçeye ayarlanması için LANGDRIVER ayarını herhangi bir Türkçe dil sürücüsüne ayarlayın.

Paradox sürücüsünün parametreleri ve anlamları aşağıdaki tabloda verilmiştir.

Parametre

Anlamı

TYPE

Bağlanmada yardımcı olacak sunucunun tipi. İki değer alabilir.

SERVER ise SQL sunucu

FILE standart dosya tabanlı sunucu

NET DIR

Paradox ağ kontrol dosyası PDOXUSRS.NET’nın yolu.Aktif net dir parametresi BDE düzenleme dosyasının Paradox bölümünde tutulur ve diğer 16-bit tutulan düzenleme dosyasındaki NET DIR parametresine bir üztünlüğü vardır yada varsayılan düzenleme dosyasının Sistem Init bölümünde tutulur yada Registry de tutulur.Dieğer NetDir girişlerini hiç bir etkinliği kalmaz.Bir network sürücüsündeki bir paradox tablosuna ulaşmak için Net dir parametesinin bu network sürücüsünü işaret etmesi gerekir.

LANGDRIVER

Dil sürücüsü tablo sıralama kuralını ve karakter setini tanımlamak için kullanılır. Türkçe tablolar için:

Base Trk cp857

Paradox Turk

Pdox ANSI Turkish

karakter setlerinden herhangi birini seçebilirsiniz.

LEVEL

geçici paradox tabloları yaratmak için tablo biçimi tipidir.

Level 7 Paradox for windows 32-bit

Level 4 paradox 4.0 de STANDARD tablo formatı

Varsayılan Level 4

Eğer ileri düzey indeksleme gereçlerineihityacını olduğunda Level 7′yi seçin.

BLOCK SIZE

paradox tablo kayıtlarını tutmak için kullanılan blokların boyutları.1024 ‘ün katları şeklinde artar. Geçerli değerler tablonun biçimine göre değişir.

Level5 ve Level 7 1024, 2048, 4096, 16384 ve 32768

Level 3 and 4 1024, 2048 ve 4096

Varsayılan: 2048

FILL FACTOR

Üstünde konumlandığı disk bloğunun yüzde kaçını doldurduktan sonra bir sonraki bloğa geçeceğini belirtir.1′den 100′e kadar değer alabilir.

Varsayılan: 95

Daha Küçük değerler performansı arttırır fakat indekslerin boyutlarını büyütür. büyük değerler daha küçük indeks dosyaları yaratır fakat indeksin yaratılma süresini uzatır.

Sistem ayarları

INIT:INIT ayarları bir uygulama başlatmak için gereken BDE ayarlarıdır. Bu bilgi Windows’un Registrysinde tutulur.

Aşağıdaki tabloda parametre tüm değiştirilebilir sistem ve ağ paramatrelerini kendi varsayılan değerleri ile listeler BDE uygulamanız ilk kuruduğunda tüm değerler kendi varsayılanlarıdır.Bu değerleri değiştirerek performansı arttırabilir yada oluşturulabilecek dosya sayısını minumuma çekerek sistem kaynaklarını koruyabilirsiniz.Aşağıdaki verileri teker teker değiştirerek aralarındaki performans farklarını izleyebilirsiniz.

Parametreler

Açıklamaları

AUTO ODBC

BDE başlatıldığında her zaman tüm kurulu ODBC sürücülerini ve veri yapılarını yüklemek için TRUE atayın. Sanal düzenleme modu ayarı yüzünden AUTO ODBC’y i True yapmak gerekmez.

Varsayılan: False

DATA REPOSITORY

Aktif veri sözlüğünün adı

DEFAULT DRIVER

Sürücü TYPE FILE değerine sahipse ve table name hiçbir uzantı tanımına sahip değilse bu paramatrenin değerini ilk önce dener

LANGUAGE DRIVER

Sistem dil sürücüsü. Bir ülkenin windows versiyonu için tahsis etmek OEM sürücüyü varsayılan olarak atar.

LOCAL SHARE

BDE uygulaması ile BDE uygulaması olmayan yerel veriye erişimi paylaştırmayı aktif yada pasif hale getirir. Eğer TRUE ise BDE yada BDE uygulaması olmayan uygulama ile aynı anda kullanabilirsiniz.

Varsayılan: False

LOW MEMORY USAGE LIMIT

BDE’nin kullanmaya çalıştığı düşük hafıza miktarının kilobyte cinsinden maximum değeri.

Varsayılan 32

MAXBUFSIZE

veritabanı veri tamponu için hafıza miktarının kilobyte cinsinden maximum değeri.MINBUFFERSIZE dan büyük yerel bilgisayarın RAM miktarından küçük yada eşit olablir.128′in katları olmalıdır. Varsayılan 2048

MAXFILEHANDLES

BDE’nin kullanıdığı maksimum dosya tutamacı sayısı. 5 ila 4096 arasında olabilir. Yüksek değerler hızı arttırır fakat daha fazla windows kaynağı kullanır.

Varsayılan 48

MEMSIZE

BDE’nin kullanacağı megaByte cinsinden maksimum hafıza değeri. Varsayılan 16MB. Maksimum 205 den büyük herhangi bir rakam atandığında bu 205 olarak kabul edilir.

MINBUFSIZE

Veritabanı veri cache için hafıza miktarının kilobyte cinsinden minimum değeri.32 ila 65535 arasında olmalıdır.Windows’un sağlayabildiği RAM miktarından daha az olmalıdır.

Varsayılan:128

MTS POOLING

Eğer TRUE yparsanız açılan bir veritabanına ilk bağlantı süresinini kısaltır. Varsayılan:FALSE

SHAREDMEMLOCATION

paylaşılmış hafıza yöneticisinin adresinin sunumu. Paylaşılmış hafıza yöneticisi ve paylaşılmış buffer yöneticisi bir sunulan adrese yüklenir. Eğer bu adres kullanılırsa sistem (sadece ilk işlemde) uygun bir adres bulur. Eğer bu adres başka bir uygulama tarafından tanımlamışsa değiştirmek isteyeceksiniz. Eğer paylaşılmış yöneticiler tanımlanmış yada varsayılan adrese yüklenemiyorsa;işletim sistemine boş bir adres buldurulur.

Eğer tanımlanmış hafıza adresi sınıların dışında ise her zaman varsayılan kullanılır.

Varsayılan(Win95/98 için):0xEBDE0000

Minimum Değer (Win95/98 için): 0×90000000

Maximum Değer (Win95/98 için): 0xFFFF0000

Varsayılan (Windows NT için): 0×6BDE0000

Minimum Değer(Windows NT için): 0×10000000

Maximum Değer (Windows NT için): 0×7F000000

SHAREDMEMLOCATION için alan ayarı Win95/98 için 9000′den FFFF’ye kadardır ve Windows NT için 1000′den to 7F00′ya kadardır. SHAREDMEMLOCATION’a değer atmak için sadece büyük harfler kullanılabilir.

SHAREDMEMSIZE

BDE’nin kaynakları paylaştırmak için kullanacağı kibyte cinsinden maksimum hafıza değeri .

Varsayılan 2048 KB, Minimum 20248 KB

Eğer daha düşük bir sayı tanımlanırsa 2048 kullanılır.Dosya tutamaçları,sürücüler ve sistem istemci ve tablo nesneleri paylaştırılmış kaynaktır ve bu nesnelerden çok fazla kullanıldığında SHAREDMEMSIZE değeri arttırılmalıdır.

SQLQRYMODE

SQL verilerine sorgu tutamacı için metot. NULL,SERVER,LOCAL olabilir Eğer Borland SQL link süscüsü kurulduysa bu parametre görüntülenir.

Varsayılan NULL

Formats:Format anahtarında tarih saat ve sayı tiplerinin veritabanı uygulamalarında nasıl görünmesi gerektiği ayarlanır Bu anahtarda üç saha vardır bunlar

date

time

number

Date:Tarih tipinin veritabanı uygulamalarında nasıl görünmesi gerektiğini tanımlar. Bu anahtarın parametreleri aşağıdaki tabloda anlatılmıştır.

Parametre

Anlamı

SEPARATOR

ay gün ve yılı birbirinden ayıran karakteri belirler. Windows BDE uygulaması kurulduğunda tarih ayıracını kontrol Panelin ülke ayarlarından alır.

MODE

ay gün yıl öğelerinin sırasını belirler 0 (AGY) 1(GAY) 2(YAG) değerlerini alabilir. Windows BDE uygulaması kurulduğunda tarih sıralamasını kontrol Panelin ülke ayarlarından alır.

FOURDIGITYEAR

Sadece iki hane girildiğinde BDE’nin bun ne şekilde anlayacağını betimler normalde01/01/00 dan 12/31/49′a kadar olan bütün değerler 21′ci yüzyıl olarak tanımlanmıştır. 01/01/50 den 31/12/99′a kadar olan değerlerde 20′ci yüzyıl olarak tanımlanmıştır.Eğer bu değer TRUE yapılırsa aslına bakıldığında pek birşey değişmez. sadece 01/01/96 tarihini girdiğinde 1996 tarihi yerine 96 tarihi olarak kabul eder. ve 1996 tarihini girmek için bu tarihi 4 haneli girmek zorunda kalırız.

varsayılan:FALSE

YEARBIASED

Bu değer FourDigitYear değerinin yaptığı işin bir benzerini yapar. Örneğin eğer TRUE ise 12/12/96 tarihi 12/12/1996 tarihi olarak algılanır. Eğer yanlış ise 12/12/0096 tarihi olarak algılanır.

LEADINGZEROM

tek haneli ay girişlerinin 0 içerip içermiyeceğini tanımlar.Eğer TRUE ise bir ayı tanımlarken sıfır girmek zorunda kalırsınız. Eğer FALSE ise sıfır girmedende tek haneli bir ay belirtebilirsiniz. Varsayılan FALSE

LEADINGZEROD

tek haneli gün girişlerinin 0 içerip içermiyeceğini tanımlar.Eğer TRUE ise bir günü tanımlarken sıfır girmek zorunda kalırsınız. Eğer FALSE ise sıfır girmedende tek haneli bir gün belirtebilirsiniz. Varsayılan FALSE

Time:Saat tipinin veritabanı uygulamalarında nasıl görünmesi gerektiğini tanımlar. Bu anahtarın parametreleri aşağıdaki tabloda anlatılmıştır.

Parametre

Anlamı

TWELVEHOUR

örneğin eğer FALSE ise öğleden sonra 8:21, 20:21 şeklinde ifade edilecektir.TRUE ise 08:21 PM olarak ifade edilecektir. Varsayılan değer:TRUE

AMSTRING

Eğer TWELVEHOUR değeri TRUE isesabahı ifade edecek AM yerine geçecek ifadeyi belirtir.Varsayılan değer:TRUE

PMSTRING

Eğer TWELVEHOUR değeri TRUE ise akşamı ifade edecek PM yerine geçecek ifadeyi belirtir.Varsayılan değer:TRUE

SECONDS

Zamanın saniyeleri içerip içermeyeceğini belirtir. Eğer TRUE ise içerir. varsayılan TRUE

MILSECONDS

Zamanın salisiyeleri içerip içermeyeceğini belirtir. Eğer TRUE ise içerir. varsayılan FALSE

Number:Sayı tipinin veritabanı uygulamalarında nasıl görünmesi gerektiğini tanımlar. Bu anahtarın parametreleri aşağıdaki tabloda anlatılmıştır.

Parametre

Anlamı

DECIMALSEPARATOR

bir sayı ondalık kısmından bu karakter kullanılarak ayrılır.Windows BDE uygulaması kurulduğunda ondakık ayıracını kontrol Panelin ülke ayarlarından alır.

THOUSANDSEPARATOR

bu karakter büyük sayıları 3′er basamak ayırarak okunabilirliği kolaylaştırır.Windows BDE uygulaması kurulduğunda binlik ayıracını kontrol Panelin ülke ayarlarından alır.

DECIMALDIGITS

stirng değerleri sayı değerlerini çevirirken kullanılacak olan maksimum ondalık kısmı tanımlar. Varsayılan değer: 2

LEADINGZERON

ondalık sayıdan önce sıfır kullanımını tanımlar.Varsayılan: TRUE

Veritabanı tanımlamalarının başka bilgisayarları aktarılması gerektiğinde tüm bu tanımlamaları o bilgisayara da aktarmamız gerekir aksi taktirde veri tabanı programımız o bilgisayarda kullanılamaz.Bunun için install shield yada benzeri programlar kullanmalıyız yada eğer prosesyonel bir kullanıcı iseniz veritabanı girdilerini direk reg dosyası tanımayarak ta girebilirsiniz.

Bunun için kayıt düzenleyicisi programından HKEY_LOCAL_MACHINESOFTWAREBORLANDDATABASE DESKTOP girdisi içindeki verilerin tümünü giğer bilgisayara da aktarmalısınız ve CFG dosyasındaki verileri uygun olanları ile değiştirmelisiniz.

Veritabanı öğelerine Giriş

Makale dizimizin bu bölümünde veritabanı öğelerine ve öğelerinin kullanımına giriş yapacağız.Bu makale veritabanı öğelerinin kullanımı üzerine bir ön hazırlık niteliğinde olacaktır.Bundan sonraki makalelerimiz TTable öğesinden başlayıp Midas teorisine kadar geniş bir yelpazeyi bol örnekli ve öğelerin tüm özelliklerinin ayrıntılı açıklamaları ile devam edecektir.Bu bölüm daha önce hiç bir uygulamada veritabanı kullanmamış programcılara veritabanının uygulamalarda nasıl kullanılacağı hakkında ön bilgi verecektir.

Daha önceki makalelerimizde veritabanı oluşturmak için gerekli olan tablooluşturmayı ve bunların arasındaki ilişkileri tanımlamayı öğrendiniz bundan sonra bu tabloların aliaslar yardımı ile nasıl uygulamalarda kullanılacağını öğreneceksiniz. Tablolara erişmek için Delphi bir dizi öğe kullanır bir uygulamada eğer uygulama içinde tablonuza yeni kayıt eklemek, tablonuzdan kayıt silmek yada kayıtlarınızı değiştirmek istiyorsanız en az üç adet öğeyi kombine kullanmanız gerekecek. Bunlardan biri TTable öğesidir.

Table öğesi bir tabloya ulaşmak için kullanabileceğiniz en sorunsuz ve en kısa yoldur. Hiç bir kod yazmadan sadece Object Inspector yardımı ile bir tablo ile bağlantı kurabilirsiniz. Burada önemli olan tablonuzun bir alias altında tanımlı olmasıdır.Eğer tanımlı değilse bu tablonun içinde bulunduğu dizinin yolunu girerek de tabloya ulaşmanız mümkün olabilir.Fakat bu programınızın taşınabilirliğini azaltır.

Bu öğe çalışma anında görünmeyen bir öğedir. Bu öğe ile bağladığınız bir tabloyu elbette düzenlemek,tabloya kayıt eklemek yadatablodan kayıt silmek isteyeceksiniz. Ben bu bölümde TDBComponent’in bir üyesi olan TDBGrid’i kullanacağım. Çünkü bu öğe ile tablonuzda bulunan tüm kayıtları görebilir değiştirebilir,ekleyebilir yada silebilirsiniz. Bu öğe Delphi’nin Data Controls sekmesinin altındadır. Borland tabloların birden fazla öğe tarafından kullanılabilirliğini sağlamak için değişik bir metot geliştirmiştir. Bir TDataset kökenli veritabanı öğesi ile (TTable,TQuery vs.) bir TDBcomponent öğeleri arasında bir bağlantının kurulması için TDataSource öğesinin kullanılması gerekmektedir.

DataSource öğesi sadece ara istasyon olarak görev aln bir öğe pozisyonundadır ister yerel bir tablodan isterse uzak veritabanı birimlerinden yada TClientDataSet öğesinden gelen bir veriyi isteyen Veritabanı kontrollerine iletir. İstediğiniz kadar çok kontrol bağlayabilirsiniz.

Şimdi hep birlikte ilk veritabanı uygulamamızı yaratalım. Bunun için TTable,TDataSource,TDBGrid öğelerini kullanacağız. Ben bu uygulama örneği için DBDemos aliasının içinde olan bir tabloyu kullanmayı düşünüyüroum. Böylece sizde kendi bilgisayarınızda aynı uygulamayı gerçekleştirebilirsiniz.

yandaki şekildeki gibi bir form yaratın ve bu formun üzerine table,datasource ve dbgrid öğelerini yerleştirin. Formumuz çalıştığında table ve datasource öğeleri görünmez olacağı için bu öğeleri istediğiniz bir yere yerleştirebilirsiniz.

Table öğesini seçip object inspector’da özelliklerinin görüntülenmesini sağlayın.Table öğesinin değiştirilecek özellikleri aşağıdaki gibidir(öğenin özelliklerini değiştirirken lütfen sırayı takip edin):

Table Öğesinin Özellikleri

Özellik

Değeri

Açıklama

DatabaseName

DBDEMOS

Kullanacağımız veritabanının alias’ı.Bu özelliği kullanmadan da direk olarak tabloları çağırabiliriz fakat bu özellik taşınabilirliği büyük ölçüde arttırır.

TableName

customer.db

Kullanacağımız tablonun ismi. Açılan kutudan o veritabanında bulunan tüm tabloları görüntüleyebiliriz. biz Paradox tabloları üzerinde turduğumuzdan db uzantılı tabloları tercih edeceğiz.

Active

True

Bu özelliği TRUE yaptığımızda tablomuz Table öğesi ile kullanıma hazır hale gelecektir.

Table öğesinin bu özelliklerini sırası ile ayarladıktan sonra Datasource öğesinin özelliklerini ayarlamamız gerekiyor.Datasource öğesini seçerek özelliklerinin görüntülenmesini sağlayın.Dataset özelliğini Table1 olarak atayın. Böylece herhangi bir DBComponent’i Table1 öğesine bağlama imkanına kavuşacağız.

DbGrid öğesini özelliklerinden Datasource özelliğini Datasource1 olarak ayarlayarak uygulamamızı tamamlıyoruz. Aşağıdaki şekilde bir görüntü oluşmazsa mutlaka bir şeyi eksik yapmışsınızdır demektir.

uygulamayı çalıştırdığınızda bir kayıt eklemek isterseniz klavye tuşlarından yaralanabilirsiniz.Insert tuşu bir kayıt eklemenizi F2 tuşu üzerinde bulunduğunuz kaydı değiştirebilmenizi sağlar.Ctrl+Delete tuşu üzerinde bulunduğunuz kaydı simenizi sağlar. Kayıtlar arasında dolaşmak istiyorsanız ok tuşlarını ve tab tuşunu kullanabilirsiniz.Eğer kayıtların içinde daha rahat dolaşmak istiyorsanız TDbNavigator öğesini ekleyebilir ve Datasource özelliğini Datasource1 yapabilirsiniz.

Dikkat ettiyseniz bu uygulamada bir satır kod bile yazmadık. Bu Delphi’nin bize sağladığı öğe geliştirme teorisinin bir armağanıdır.Fakat her veritabanı uygulaması bu kadar kolay hazırlanmayabilir özellikle birbiri ile bağlı tablolarda bağlantılı tablodaki bir veriye göre anatablodan bir veri seçmemiz gerektiğinde bir kaç satır kod daha yazmamız gerekir. Bunun için TQuery öğesinin kullanılması gerekir.

TQuery öğesi ile tablolar birbiri ile birleştirilebilir iç içe sorgular yaratılabilir. TQuery öğesi TTable öğesinden daha yavaştır. Bunu çok kayıtlı bir veritabanında rahatlıkla görebilirsiniz.Fakat ağ üzerinde bir tablonun kayıtlarına ulaşılacaksa yada bir internet sunucusundan kayıtlar sorgulanacaksa TQuery öğesi Table öğesinden daha hızlı olabilir. Bu oluşumun sebebi Table nenesinin tablodaki tüm kayıtlara erişmesi sonucu veri trafiğini çok arttırmasıdır.Query öğesi ise ağ üzerinde sorguyu Ulaşılan sunucunun veritabanı motoruna yollayıp istenilen kayıtları sorgulamasını ister.Dönen kayıt miktarı, eğer tüm kayıtların listelenmesi istenmemişse, Table öğesinin döndüreceği miktardan daha azdır.

Size Veritabanı uygulaması geliştirme aşamasında verebileceğim tek öğüt gerekli olmadıkça tüm kayıtları kullanıcıya göstermeyin. sadece tabloda ekleme silme ve değiştirme yapacakca tüm kayıtları görmesine gerek yok. Insanların doğası gereği belirli bir miktar bilgiyi bir anda kafalarında sorgulayabilirler. Bu miktardan fazlası kullanıcı için gereksizdir.

TQuery öğesi SQL dilini bilmenizi gerektirir. TQuery öğesi SQL anlatıdıktan sonra açıklanacağı için burada değinmeyeceğim.Table öğesi bittikten sonra DBComponent kontrollerinin kullanımına geçeceğim ardından SQL dilini altatan bir Makale dizisiyi yayınladıktan sonra Query öğesi ile Veritabanı uygulaması geliştirmek adlı makale dizisine geri döneceğim.

Table Öğesi (TField)

Makale dizimizin bu bölümünde Table öğesinin Field altsınıfının özelliklerine değineceğiz. TField Özelliği ile verilere nasıl erişebiliriz ve Field özelliğini Fields Editor ile nasıl değişirebiliriz bu sorulara yanıt arayacağız. Ayrıca FieldsEditor ile tanımlanan TField Öğelerinin DisplayFormat, CustomConstraint, ConstraintErrorMessage, DefaultExpression, DisplayLabel, EditFormat özelliklerine göz atacağız.

Field öğesi tüm veritabanı kontol nesnelerinin bir alt sınıfıdır. Bu nesne ile alanlara kullanıcının DBComponent öğelerini kullanmasını beklemeden direkt olarak erişebiliriz.Veri Alanlarına Erişmek için iki yöntemimiz bulunmak ta. Bunlardan biri kodla sahalara direkt erişimi sağlar.Fields özelliği bir dizi olduğu için her sahaya bir sıra numarası karşılık gelir.Bunlar sıfırdan başlayıp kullanılan tablodaki saha sayısının bir eksiğine kadar tanımlıdır. Aşağıdaki örneğe bakacak olursak:

Table1.fields[0].AsInteger;

Yukarıdaki örnekte table1′in ilk alanına Integer’miş gibi erişebileceğimizi gösterir.Bu bileşenin hangi sırada olduğunu bilmiyorsak:

Table1.fieldbyName(’CustNo’).AsInteger;

Yukarıdaki örnekteki gibi kullanabiliriz.Bu şekilde sahamızın tablodaki sırası ne olursa olsun sahanın adını vererek o sahaya erişebiliriz.

Aşağıdaki örneğimizde Fields özelliğinin nasıl kullanılacağına değindik. Bu örnekte edit1′e yazılan bir ifade Fields özelliği ile tablonun birinci sahasına iletiliyor.

procedure TForm1.Edit1Enter(Sender: TObject);

begin

table1.edit;

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

Table1.ApplyRange;

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin

if edit1.text<>‘’ then Table1.Fields[0].AsInteger:=strtoint(Edit1.text)

else

Table1.Fields[0].AsInteger:=0;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in [’0′..’9′]) then key:=#0;

end;

Burada yabancı olunan edit ve ApplyRange yordamlarıdır. Edit üzerinde bulunulan kayıdı düzenlemeizi sağlayan bir yordamdır. ApplyRange ise Bu değişikliği uygulayan yordamdır.

Alternatif olarak Table nesnesinin fields editor seçeneğini kullanarak da verilere erişebiliriz. Bunun için Table nesnesinin üzerini çift tıklamalıyız Karşımıza yandaki gibi bir menü çıkacak. Bu menüyü sağ tıkladığımızda ise Add Fields, New Field, Add All Fields adında üç adet komut göreceksiniz. Bu komutlardan Add All Fields; tabloda var olan tüm sahaları FieldsEditör ekranına ekler. Add Fields komutu ise; tıklandığında; açılan ekrandan mümkün olan sahalardan birini ekleyebilir. New Field Özelliğine ise daha sonra değinilecektir.Sahalar eklendikten sonra otomatik olarak kullanılan nesne ile o sahanın isminin bileşkesi olarak isimlendirilir. Yani eğer table1 nesnesini kullanarak CustNo sahasın eklemiş iseniz; eklenen alanın adı Table1CustNo olacaktır.

Eklenen her Fields sahasının object inspectorda yayınlanmış bir kaç özelliği vardır. Eklenene sahanın özelliklerini değiştirmek için Fields Editorden değiştireceğiniz sahayı seçip Object Inspectorda özelliklerinin görüntülenmesini sağlamalısınız.

TField Öğesinin Özellikleri:

DisplayFormat:Display format özelliği sahanın tipine göre değişiklik gösterir.Bunlar NumericField ve DateTimeField tipleridir.

NumericField:Numeric Field tipine sahip olan bir Field öğesinin Display Format özelliği sayısal sahaların veri girişine müsait olan DBComponent öğelerinde nasıl görüntüleneceğini belirler. Display format özelliği çeşitli özel tanımlama karakterleri içeren bir string değişkendir.Bu değişkende bulunabilecek olan özel karakterler ve anlamları aşağıdaki tabloda verilmiştir.

Biçimlendirme Karakterleri

Kullanım Şekli

Hane tutucu. Sahada bulunan sayısal verilerin hanesel gösterimini sağlar. Eğer tanımlanan “0″ kadar sayı yoksa eşleşmeyen sayı miktarı kadar 0 atanır.

Hane tutucu. Sahada bulunan sayısal verilerin hanesel gösterimini sağlar. Eğer tanımlanan “#” kadar sayı yoksa eşleşmeyen sayı miktarı kadar boşluk atanır.

Ondalık sayı ayıracı. Biçim katarındaki ilk nokta karakteri ondalık sayı ayıracının yerini gösterir. Diğeer nokta karakterleri yoksayılır. Aktüel karakter ondalık sayı ayıracı olarak kullanılır. Bu Windows’un kontrol panelindeki ülke ayarlarında tanımlı olan ondalık ayıracı olur.

Binler basamağı ayıracı. Eğer biçim katarı bir yada birden çok virgül işareti taşıyorsa çıktı basamaklar halinde görüntülenecek demektir Virgül karakterinin yeri ve sayısı binler basamağının ayrılma yöntemini değiştirmez. Windows’un kontrol panelindeki ülke ayarlarında tanımlı olan binlik ayıracı çıktıda kullanılır.

E+

Bilimsel İşaretleme.Eğer biçim katarında “E+”,”E-”,”e+”,”e-”katarlarından herhangi birini içeriyorsa,sayı bilimsel işaretleme kullanılarak biçimlendirilir. 4′den fazla 0 karakteri tanımlayan üstün içinde minimum hane sayısını tespit etmek için “E+”,”E-”,”e+”,”e-” kullanılır. “E+” ve “e+” biçimleri pozitif üstler için çıktıda bir artı işaretinin , negatif üstler içinse bir eksi işaretinin görüntülenmesini sağlar. “E-” ve “e-” biçimleri sadece üst negatif olduğunda bir eksi işaretinin görüntülenmesini sağlar.

‘xx’ ve “xx”

Tekli yada çiftli tırnakla çevrilen karakterler olduğu gibi görüntülenir. Bu karakterlerin biçimlemeye hiç bir etkisi yoktur.

Biçim katarı içinde bulunan pozitif negatif ve sıfır değerleri için ayrı ayrı tanımlanan biçimleri birbirinden ayırmak için kullanılır

soldaki “0″‘ların yeri biçim katarında ondalık noktadan önce ve sağdaki “0″‘ların yeri biçim katarında ondalık noktadan sonra her zaman çıktı katarında bulunan hanelerin dağılımı belirlenir.

Biçimlendirilen sayıların ondalık kesimleri eğer beirlenen biçime uymuyorlarsa beilrnene biçim doğrultusunda yuvarlanır. Ondalık sayı ayıracının sağ tarafında “0″ yada “#” karakterlerinden hiç biri yoksa değer en yakın doğal sayıya tamamlanır.

Eğer biçimlendirilen sayının ondalık sayı ayıracının solunda hane yer tutucularının miktarından (# ve 0) daha fazla hanesi varsa ekstra haneler ilk hane yer tutucudan önce görüntülenir.Aşağıdaki tabloda bu formatların kullanımına birer örnek verilmiştir.

Biçim

Sayı

Çıktı

Açıklama

#.##

312.2

312.2

Ondalık sayının sağındaki ekstra haneler biçim karakterinden önce gösteriliyor

#.00

2.5

2.50

Saha her zaman iki ondalık hane gösterir. Bu yüzden ekstra bir sıfır konulur.

00.##

.006

00.01

ondalık ayıracının solundaki boş kalan sahalar “0″ ile doldurulur ve üç haneli olan sayı en yakın iki haneli sayıya yuvarlanır.

Pozitif negatif ve sıfır değerlerine faklı biçimler oluşturmak için biçim katarı birden üçe kadar noktalı virgülle ayrılmış değerler içermelidir.

Eğer biçim katarında bir bölüm var ise:Tüm değerler aynı şekilde biçimlendirilir.

İki Bölüm var ise:İlk bölüm pozitif ve sıfır değeri için biçimlendirilir. İkinci bölüm ise negatif değerleri için biçimlendirilir.

Eğer üç bölüm var ise: İlk bölüm pozitif değerler için, ikinci bölüm sıfır değeri için,üçüncü bölüm ise negatif değerler için biçimlendirilir.

Eğer sıfır yada negatif değerler için oluşturulan bölümler boş ise yada noktalı virgül ile sonlandırılmamışlarsa pozitif değerler için kullanılan biçim geçerlidir.

Eğer pozitif değerler için geçerli olan bölüm boşsa değer; genel kayan noktalı sayılar biçimi kullanılarak 15 işaretli hane ile gösterilir.Genel kayan noktalı biçimi ondalık ayıracının solunda 18′den fazla hane kullanabilir. Biçim katarı bilimsel işaretleme tanımlayamaz.

Not: DisplayFormat özelliği sadece sahaların veri gösterimini tanımlamak için kullanılır. Bu AsString özelliği kullanılan bir sayısal saha katarının geçerliliğine etkimez.

DateTimeField:DateTimeField tipine sahip olan bir Field öğesinin Display Format özelliği tarih sahaların veri girişine müsait olan DBComponent öğelerinde nasıl görüntüleneceğini belirler. Display format özelliği çeşitli özel tanımlama karakterleri içeren bir string değişkendir.Bu değişkende bulunabilecek olan özel karakterler ve anlamları aşağıdaki tabloda verilmiştir.

Eğer DisplayFormat’a bir katar atanmamışsa değer Windows’un kontrol panelinde tanımlanan varsayılan değerlere göre biçimlendirilir.

Biçimlendirme Karakterleri

Kullanım Şekli

Tarih ShortDateFormat genel değişkeni tarafından verilen biçimi kullanır, LongDateFormat genel değişkeni tarafından verilen biçimi izler. Eğer kesirli değeri sıfırsa zaman gösterilmez

Gün; başında sıfır olmayan bir sayı olarak tanımlanır.(1-31)

dd

Gün; başında sıfır olabilen bir sayı olarak tanımlanır.(01-31)

ddd

Gün ShortDayNames genel değişkeni tarafından verilen bir kısalma olarak tanımlanır.(Sun-Sat) Bu kısaltma windowsun genel ayarlarına göre değişir.

dddd

Gün LongDayNames genel değişkeni tarafından verilen bir değer olarak tanımlanır. (Sunday-Saturday) Bu değerler Windows’un genel ayarlarına göre değişir.

ddddd

ShortDateFormat değişkeni tarafından verilen biçimi kullanır.

dddddd

LongDateFormat değişkeni tarafından verilen biçimi kullanır.

Ay;başında sıfır olmayan bir sayı olarak tanımlanır.(1-12)

mm

Ay;başında sıfır olabilen bir sayı olarak tanımlanır.(01-12)

mmm

Ay;ShortMonthNames genel değişkeni tarafından verilen bir kısalma olarak tanımlanır.(Jan-Dec) Bu kısaltma windowsun genel ayarlarına göre değişir.

mmmm

Ay; LongMonthNames genel değişkeni tarafından verilen bir değer olarak tanımlanır. (January-December) Bu değerler Windows’un genel ayarlarına göre değişir.

yy

Yıl iki haneli sayı olarak tanımlanır(00-99)

yyyy

Yıl dört haneli sayı olarak tanımlanır(0000-9999)

Saat; başında sıfır olmayan bir sayı olarak tanımlanır.(0-23)

hh

Saat; başında sıfır olabilen bir sayı olarak tanımlanır.(00-23)

Dakika; başında sıfır olmayan bir sayı olarak tanımlanır.(0-59)

nn

Dakika; başında sıfır olabilen bir sayı olarak tanımlanır.(00-59)

Saniye; başında sıfır olmayan bir sayı olarak tanımlanır.(0-59)

ss

Saniye; başında sıfır olabilen bir sayı olarak tanımlanır.(00-59)

Zaman;ShortTimeFormat genel değişkeni tarafından verilen bir değer olarak tanımlanır.

tt

Zaman;LongTimeFormat genel değişkeni tarafından verilen bir değer olarak tanımlanır.

Tarih ayıracı

saat ayıracı

‘xx’ ve “xx”

Tekli yada çiftli tırnakla çevrilen karakterler olduğu gibi görüntülenir. Bu karakterlerin biçimlemeye hiç bir etkisi yoktur.

Biçim tanımlayıcıları istenilen şekilde yazılabilir.Büyük yada küçük harf kullanılması sonucu değiştirmez.

Eğer Biçim parametresi boşsa değerler c formatı verilmiş gibi biçimlendirilirler.

CustomConstaint:Sahanın değerinde herhangi bir uygulama tanımlı sınırı SQL tanımlamaları ile tanımlar.

CustomConstraint sahalara girilecek olan değerlerin sınırlarını belirler. Bu geçerli bir SQL string’i olmalıdır.Fakat bu sorgu bir tabloya değilde bir Field öğesine yaılacağı için where select vb. terimler dışında AND NOT OR IS <>= gibi terimler kullanılarak tanımlanırlar.Örnek vermek gerekirse Custno sahasının boş ve 1000 den küçük olammasını istiyorsak şu şekilde bir tanımlama yapabiliriz:

(CustNo IS NOT NULL) and (value>1000)

ConstaintErrorMessage: CustomConstaint sahası tanımlandığında eğer yanlış bir giriş yapılmışsa ConstaintErrorMessage sahasındaki hata görüntülenir aynı zamanda bir istisna oluşur. Eğer sahaya yanlış girilen bir verinin neden yanlış olduğunu kullanıcıya anlatmak istiyorsanız ConstaintErrorMessage sahasını boş bırakmamalısınız.

DefaultExpression:Eğer bir sahaya varsayılan bir değer vermek istiyorsanız bu özelliği kullanmalısınız.Eğer sahanız boş geçilmemesi gereken bir saha ise yada atadığınız değer bu saha için çok kullanılan bir değerse bu özelliği kullanmak veritabanına girişlerinizde büyük bir hız sağlayacaktır.Bu özelliğe vereceğiniz değerler aşağıdaki gibi tırnak işareti içinde olmalıdır.

‘12:00:00′

DisplayLabel:Bir tablodan bir saha eklediğinizde ve bunu bir grid ile göstermek istediğinizde tanımlanan sahanın etiketi tabloda tanımlanmış adı ile geçerli olacaktır. Bu ise insanı rahatsız eden bir görüntüdür. Çünkü eğer bir sahaya XyDF gibi bir ad verdiyseniz bu sahanın ne işe yarayacağını çözmek bir hayli zor olacaktır. Bunun için DisplayLabel özelliğini kullanarak bu tabloya bağlanılan, tüm etiket gösterme özelliğine sahip olan kontrollerin saha etiketleri, tanımladığıınz bu özellik olacaktır.

EditFormat: Edit format özelliği bir sayısal sahanın düzenlenirken değerin nasıl biçimlendirileceğini tanımlarEdit format özelliği çeşitli özel tanımlama karakterleri içeren bir string değişkendir.Bu değişkende bulunabilecek olan özel karakterler ve anlamları aşağıdaki tabloda verilmiştir.

Biçimlendirme Karakterleri

Kullanım Şekli

Hane tutucu. Sahada bulunan sayısal verilerin hanesel gösterimini sağlar. Eğer tanımlanan “0″ kadar sayı yoksa eşleşmeyen sayı miktarı kadar 0 atanır.

Hane tutucu. Sahada bulunan sayısal verilerin hanesel gösterimini sağlar. Eğer tanımlanan “#” kadar sayı yoksa eşleşmeyen sayı miktarı kadar boşluk atanır.

Ondalık sayı ayıracı. Biçim katarındaki ilk nokta karakteri ondalık sayı ayıracının yerini gösterir. Diğeer nokta karakterleri yoksayılır. Aktüel karakter ondalık sayı ayıracı olarak kullanılır. Bu Windows’un kontrol panelindeki ülke ayarlarında tanımlı olan ondalık ayıracı olur.

Binler basamağı ayıracı. Eğer biçim katarı bir yada birden çok virgül işareti taşıyorsa çıktı basamaklar halinde görüntülenecek demektir Virgül karakterinin yeri ve sayısı binler basamağının ayrılma yöntemini değiştirmez. Windows’un kontrol panelindeki ülke ayarlarında tanımlı olan binlik ayıracı çıktıda kullanılır.

E+

Bilimsel İşaretleme.Eğer biçim katarında “E+”,”E-”,”e+”,”e-”katarlarından herhangi birini içeriyorsa,sayı bilimsel işaretleme kullanılarak biçimlendirilir. 4′den fazla 0 karakteri tanımlayan üstün içinde minimum hane sayısını tespit etmek için “E+”,”E-”,”e+”,”e-” kullanılır. “E+” ve “e+” biçimleri pozitif üstler için çıktıda bir artı işaretinin , negatif üstler içinse bir eksi işaretinin görüntülenmesini sağlar. “E-” ve “e-” biçimleri sadece üst negatif olduğunda bir eksi işaretinin görüntülenmesini sağlar.

‘xx’ ve “xx”

Tekli yada çiftli tırnakla çevrilen karakterler olduğu gibi görüntülenir. Bu karakterlerin biçimlemeye hiç bir etkisi yoktur.

Biçim katarı içinde bulunan pozitif negatif ve sıfır değerleri için ayrı ayrı tanımlanan biçimleri birbirinden ayırmak için kullanılır

Pozitif negatif ve sıfır değerlerine faklı biçimler oluşturmak için biçim katarı birden üçe kadar noktalı virgülle ayrılmış değerler içermelidir.

Eğer biçim katarında bir bölüm var ise:Tüm değerler aynı şekilde biçimlendirilir.

İki Bölüm var ise:İlk bölüm pozitif ve sıfır değeri için biçimlendirilir. İkinci bölüm ise negatif değerleri için biçimlendirilir.

Eğer üç bölüm var ise: İlk bölüm pozitif değerler için, ikinci bölüm sıfır değeri için,üçüncü bölüm ise negatif değerler için biçimlendirilir.

Eğer sıfır yada negatif değerler için oluşturulan bölümler boş ise yada noktalı virgül ile sonlandırılmamışlarsa pozitif değerler için kullanılan biçim geçerlidir.

Eğer pozitif değerler için geçerli olan bölüm boşsa değer; genel kayan noktalı sayılar biçimi kullanılarak 15 işaretli hane ile gösterilir.Genel kayan noktalı biçimi ondalık ayıracının solunda 18′den fazla hane kullanabilir. Biçim katarı bilimsel işaretleme tanımlayamaz.

Not: EditFormat özelliği sadece sahaların düzenlenirken nasıl görüneceğini tanımlamak için kullanılır. Bu AsString özelliği kullanılan bir sayısal saha katarının geçerliliğine etkimez.

Tablo Sahaları ile İşlemler

Makale dizimizin bu bölümünde Tablo sahaları ile işlemlerin nasıl yapılacağı hakkında bilgi vereceğiz. DBNavigator kullanmadan tablonun kayıtları arasında dolaşmak,tabloda bir kayıt aramak yakın kayıtları bulmak ve onların üzerinde konumlanmak hakkında bilgi vereceğiz. Ayrıca kayıtları bookkmark ile işaretlemek ve o kayıda tekrar ulaşamayı da anlatacağız. Bu bölümü tüm Delphi programcılarının bir kez daha gözden geçirmelerini tavsiye ederim.

Tablo Kayıtlarında gezinmek:

Bir tabloda kayıtlar arasında gezinmek eğer DBGrid kullanıyorsanız çok kolaydır. Fakat Eğer DBEdit vb. tek bir sahayı düzenleyen kontroller kullanıyorsanız bu pekte kolay olmayabilir. Bunun için DBNavigator kullanmak bir zorunluluktur ama eğer DBNavigator kullanmak istemiyorsanız buna Table nesnesinin yordamları ile kolayca erişebilirsiniz ve sahalarda kolayca gezinebilirsiniz.

Aşağıdaki örnekte bunun nasıl yapılacağı anlatılmıştır.

procedure TForm1.FormShow(Sender: TObject);

begin

if Table1.RecordCount<2 then //Eğer ikiden az kaydı varsa tüm buttonlar pasif olacak

begin

bitbtn1.Enabled:=False;

bitbtn2.Enabled:=False;

bitbtn3.Enabled:=False;

bitbtn4.Enabled:=False;

end

else

begin

if Table1.Bof then

begin

bitbtn1.Enabled:=False;

bitbtn2.Enabled:=False;

bitbtn3.Enabled:=True;

bitbtn4.Enabled:=True;

end

else

begin

if Table1.Eof then

begin

bitbtn3.Enabled:=False;

bitbtn4.Enabled:=False;

bitbtn1.Enabled:=True;

bitbtn2.Enabled:=True;

end

else

begin

bitbtn1.Enabled:=True;

bitbtn2.Enabled:=True;

bitbtn3.Enabled:=True;

bitbtn4.Enabled:=True;

end;

end;

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

table1.First;

bitbtn1.Enabled:=False;

bitbtn2.Enabled:=False;

bitbtn3.Enabled:=True;

bitbtn4.Enabled:=True;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

table1.Last;

bitbtn3.Enabled:=False;

bitbtn4.Enabled:=False;

bitbtn1.Enabled:=True;

bitbtn2.Enabled:=True;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

table1.Next;

if Table1.Eof then

Kategori: Eğitim


Rasgele...