BÖLÜM 1
GİRİŞ
Günümüz bilişim dünyası hızla gelişmekte, şirketler ve kurumlar arası dolaşan bilgi trafiği hızla artmaktadır. İşte bu trafiğe ve yığılan dosyaların imdadına bilgisayarlar yetişti. Yüksek veri depolama ve hız haftalar, aylar alan işlemleri saatlere düşürdü. Şirketlerin veri saklama ve bu veriler içi işlemlerin yükünden kurtulmaları bu yüksek hız ile birlikte sağlam veri tabanları ve bu veri tabanlarının optimum kullanımını gerektirmektedir. Veriler artık insanlar için çok değerlidirler ve iyi korunmaları, istenildiğinde istenilen bilgiye ulaşılabilmesi gerekmektedir. Milyonlarca veri, binlerce,on binlerce kayıt arasından sizin ihtiyaçlarınıza ve isteklerinize uyan bilgilerin en kısa zamanda ve yüksek güvenilirlik ve geçerlilikle size sunulması gerekmektedir.
1992 yılında Sicurello, F.; Villa, M. Ce İstanbul’da yapılan konferansta ‘System to manage a clinical data base on aids’ başılğıyla sorguların önemi üzerinde durulmuş ve şöyle denmiştir:”...sorgular önemlidir çünkü bunlar bize daha önceden kaydedilmiş bilgileri hızlı bulabilmemizi sağlarlar. Ve bunları işleyebilir, seçilen verileri yazıcıdan çıkartabiliriz, laboratuar testleri ve grafikleri kolayca elde edebiliriz...”
Veri raporlama , istenilen verilerin bulunması insanlar için vazgeçilemez bir konuma gelmiştir. Burada yapılacak bir hata veya gözden kaçırılacak bir
nokta çok önemli zararlara yol açabilmektedir.
Bu amaçlara yönelik olarak Structured Query Language (Yapısal Sorgu Dili) oluşturulmuştur. Sorgulama her dilde profesyonel program yapan programcılarca kullanılmaktadır. Visual Basic’te MsQuery , Oracle ‘da PL/SQL kullanımı gibi. “Bugün , veri tabanlarını kullanan her yazlımın ya da kullanıcının mutlaka SQL karşı karşıya gelmesi zorunlu olmaktadır” (Uysal,1994).
SQL’in kullanım şekli diller arasında pek fazla farketmemekle birlikte yine de bazı yazım farklılıkları mevcuttur.
SQL’in programcılıktaki önemli yerini Ruhver Barengi 1998 de yazmış olduğu kitabında şu şekilde ifade etmiştir ” SQL Delphi’ nin değil veri tabanlarının kendilerinin kullandığı bir dildir. Ancak Delphi sayesinde SQL cümleciklerini , veri tabanına göndermek ve veri tabanının verdiği yanıtları alarak işlemek mümkün olmaktadır. Uygulamalarda veri tabanlarını ve SQL cümleciklerini kullanmak çok verimli programlar üretmemize yardımcı olacaktır. Delphi’ de SQL cümleciklerini veri tabanına göndermek için Tquery bileşenleri kullanılır.”
PROBLEMİN TANIMI
Problem; veri tabanı uygulamalarında, veri tanımlama, veri bütünlüğünün kontrolü, veri tabanlarına erişimin kontrolü ve veri tabanlarının sorgulanması (çeşitli kriterlere göre bilgi dökümü ve rapor edilmesi) ve güncellenmesi amaçları için gerekli komutlara sahip bir alt dildir (sub language). Alt dil denmesinin nedeni: bir bilgisayar dilinin sahip olması gereken tüm komutlara sahip olmayışıdır (Uysal,1994) . SQL “ ilişkisel veri tabanındaki veriye erişim için kullanılan komut gruplarıdır.” şeklinde değişken olarak (Odtü istatisik ) ‘çe tarif edilmiştir. Bu çalışmada SQL’in Oracle’ daki kullanım şekilleri de yer yer verilmekle birlikte asıl olarak Delphi’ deki kullanımına değinilecek ve asıl sorgu nesnesi olan Tquery incelenecektir. Tquery nesnesinin özellikleri ve metotları ayrıntılı olarak anlatılacak ve çeşitli kısa progam örnekleriyle konu pekiştirilmeye çalışılacaktır.
AMAÇ
Bu çalışmada Structured Query Language’ in önemini programcılık yapacak kişilerine veya programlama dilleriyle uğraşan kişilerin kavramasına yardımcı olmak ve özellikle Delphi‘ de piyasada bulunan büyük bir açığı kapatmak hedeflenmiştir.
Burada aynı zamanda şu sorulara da cevap aramaya çalışılmıştır.
Tquery nesnesinin özellikleri nasıl kullanılır ve ne gibi etkileri vardır ?
Programlama aşamasında karşılaşılabilecek hatalar nelerdir?
Metot ne demektir. Metotların kullanımı nasıl olmaktadır ?
Hangi metotlar ne zaman kullanılmalıdır ?
ÖNEM
Hızlı ve etkili bir program yazabilmek için hem SQL mantığını hem de bunun Delphi’ deki kullanımını iyi bilmek gerekir. Delphi bu konuda çok fazla özelliğe sahip olup bütün bunların incelenmesi ve anlaşılması, konu hakkındaki kaynakların hep İngilizce olması ve herkesin İngilizce seviyesinin bunları okuyup anlayabilecek seviyede olmaması nedeniyle konunun öğrenilmesini zorlaştırmaktadır.
66 özelliği ,97 metodu ve eventleriyle çok karmaşık olan Tquery nesnesinin var olan tüm özelliklerini ve kullanım şekillerini bilmeden program yazmaya kalkmak elinde ne tür silahları olduğunu ve bu silahların gücünü, kapasitesini bilmeyen bir devletin savaşa girmesine benzer. Tabii ki bu devletin savaşı kazanması düşünülemez. Bir progarmcının da çalışmam da verilen bilgilere sahip olmadan veri tabanı programı yazmaya kalkması yukarıdaki örnekteki gibi fiyaskoyla sonuçlanacaktır.
Yukarıda belirttiğim nedenlerle birlikte profesyonel bir program yazabilmek için SQL mantığı ve bilgisiyle birlikte Tquery nesnesinin öğrenilmesi zorunlu olmaktadır.
SAYILTILAR
Bu araştırmanınn temelinde şu sayıltılar yer almaktadır.
• Araştırmada kullanılan veri toplama aracı geçerli ve güvenilirdir.
• Konuyla ilgili elde edilen kaynaklar araştırma sınırlılıkları içerisinde ilgili kaynakları temsil edebilecek düzeydedir.
• Araştırılan kaynakların sahipleri bu konuda uzman kişi ve kuruluşlardır.
SINIRLILIKLAR
Kaynakların daha çok ingilizce olması ve bu konudaki kaynakların çok az olması ile birlikte kapsam bakımından sadece Tquery nesnesi ve SQL ile ,süre açısından sadece bu konuyla ilgilenilmemekle birlikte 7 ay ile sınırlıdır.
TANIMLAR
Alias : Takma ad .Database kofigurasyon bilgisini özel bir ta veri tabanına bağlanmak için gerekli bilgiyi içerir. InterBase, dBase gibi.
Alt sorgu : Sorgu içerisinde başka bir veri tabanından sorgulayarak veri alan bölüme denir.
Blob : Resim dosyasının veri tabanındaki türü.
Boolean : Mantıksal değer. True veya False değerlerini alır.
Buffer : Tampon bellektir.
Cache : Ön bellektir. Çok hızlı olması sebebiyle tercih edilir.
CaseSensitive : Büyük küçük harf ayrımı yapması. A<>a
Client : İstemci veya terminal olark ifade edilir.
Component : Visual dillerdeki sesnesel öğelere denir .
Dataset : Tablo , veri tabanını belirtir.
DataSource : Veri tabanı. Ttable, Tquery vb.. nesneler tutar.
Event : Nesnelerla ilgili olaylar. OnChange, OnExit gibi.
Index : Belli bi alana göre sıralama.
Join : Farklı tablolardan farklı verilerin alınıp birleştirilmesi.
Keyfield : Anahtar alan. Sıralamanın yapıldığı alandır.
Master- Detail : Ana-yardımcı kütük bağlantı sistemi Ortak alanlarla bu ilişki kurulur.
Parametre : Fonksiyonlarca kullanılan değerler.
PartialKey :Kısmi arama anahtarı.
Primary Key :Paradox’ ta oluşturulan birincil indextir.
Remote Server : Uzaktan erişimli sunucu.
Server :Sunucu
Session : Oturum olayı
Sorgu : Belli kriterler belirterek ana kümeden bu kriterlere uyan sonuç kümesi elde etme
Torun nesne : Bir nesnenin özelliklerine sahip olup kendine ait de ek özellkleri olan nesnelere
KISALTMALAR
API :Application Programming İnterface
BDE :Borland Database Engine
BOF :Begining of File
COM :Comminucation
DDL :Data Defination Language
DLL :Dynamic Link Library
DML :Data Manipulation
EOF :End of File
RTTI :Run Time Type Information
SQL :Structured Query Language
BÖLÜM II
YÖNTEM
Bu bölümde araştırmada kullanılan evren ve örneklem, araştıma modeli, verilerin toplanması, verilerin çözümlenmesi ve yorumlanması yer almaktadır. Bu çalışma genel tarama modelinde, literatür taraması ve çeviriye dayalı olarak yürütülmüştür.
EVREN VE ÖRNEKLEM
Çalışmaların evrenini Delphi ve SQL ile ilgili kitaplar , Delphi 3.0 Professional Sürümünün Local SQL Help sayfaları ile Tquery nesnesine ait Help sayfaları ile bu konudaki konferanslar oluşturmaktadır.
Çalışmanın örneklemi kaynakçada belirtilen kaynaklar oluşturmaktadır.
ARAŞTIRMA MODELİ
Araştırmada SQL ve Tquery nesnesinin özellikleri ve işlevleri incelendiğinden tarama modelinde yürümüştür. Böylece araştırma amaçları doğrultusunda literatürdekİ, bilgiler taranıp yorumlanmış , bir çoğu da denenmiştir. Uzman kanısı alınarak yapılması gereken çalışmalar saptanmıştır.
VERİLERİN TOPLANMASI
Araştırma için gerekli kuramsal verilerin toplanamsı konuyla ilgili literatürden (Kitap , makale, seminer , konferans ve Professional Help) . Literatür taramasından elde edilen veriler , kuramsal kısmın oluşturulması ve SQL ile Delphi’ deki veri tabanı kullanımının önemi ve gücünü belirtmek amacıyla kullanılmıştır.
Taranan kaynakların büyük bir kısmı İngilizce olduğundan bu bilgilerin Türkçeye çevrilmesi gerekmiştir. Çevirme işlemi kendime aittir. Yazılı kaynakların yanında İnternetten de yararlanılmış. Bunun yanı sıra Kütüphanemizdeki Cd-Rom tarama hizmetlerinden yararlanılmıştır.
VERİLERİN ÇÖZÜMLENMESİ VE YORUMLANMASI
Bu çalışmada elde edilen veriler, SQL ile Delphi’ deki veri tabanı kullanımının önemi ve Tquery nesnesiyle neler yapılabileceği açısından yorumlanmıştır. Bunu yapabilmek içinde Prof. Dr. Mithat Uysal’ ın SQL kitabıyla Delphi 3.0 Professional Sürümünün Help’ i ve diğer kaynaklar üzerinde yoğun bir çalışma yapılarak hedefim doğrultusunda çalışmalar yorumlanmıştır.
BÖLÜM III
SQL ‘in Yapısı ve Gelişimi
Veri tabanı uygulamalarında , veri tanımlama, veri bütünlüğünün kontrolü,veri tabanlarına erişimin kontrolü ve veri tabanlarının sorgulanması (çeşitli kriterlere göre bilgi dökümü ve rapor edilmesi) ve güncellenmesi amaçları için gerekli komutlara sahip bir alt dildir (sub language). Alt dil denmesinin nedeni ,bir bilgisayar dilinin sahip olması gereken tüm komutlara sahip olmayışıdır (Uysal,1994).
Yapısal sorgu dili (SQL) sunucusu veri kümeleri üzerinde matematiksel ilşkiler gerçekleştiren veri tabanı motorudur. burda verinin nasıl bulunduğunu anlatmaya gerek yoktur. Veriyi almak için sadece SQL e başvurmak yeter. (Finkelstein,1990)
SQL, 1974 te icat edilmesine rağmen 1986 yılına kadar bir standard haline gelmedi. Bu arada bir çok geliştirmeci bunun üzerine ilşkisel veri tabanı sistemleri geliştirdiler. Bu desteklere rağmen bunlar yeterince uygun olmadı çünkü: ofissel bir standard ortaya konmadan geliştirilmişlerdi (Balboni, 91).
SQL ‘in ilk başlangıcı ilişkisel veri tabanı modelinin kuramını ortaya koyan , E:F. Codd’ un ‘A relational model for large shared data banks “ adlı makalesine dayandırmak olasıdır. Daha sonra IBM tarafından Structured English Query Language (SEQUEL) tanımlanıştır.
İlk SQL standardı ISO tarafından 1987’de ISO 9075 kodu ile yayınlanmıştır.Bu dilin standart bir dil olması hızla yaygınlaşmasını sağlamıştır. Ayrıca ANSI versiyonu ise , teknik olarak ISO 9075 ile tamamı aynı nitelikte olup 1986’ da X3.135 kodu ile yayınlanmıştır.
ISO ,1989’da ‘bütünlük arttırımı özelliğini’ (integrity enhancement feature) ekleyerek ISO 9076 kodu ile yayınlamıştır. Ayrıca ANSI , embedded SQL dilleri ile ilşkili standartları da içeren X3.168 standardını yayınlamıştır.
Standartlar üzerindeki çalışmalar ve eklemeler halen sürmektedir.
Standart SQL komutları ile çalışmanın doğal olarak uygulamaların çeşitli heterojen ortamlar arasında taşınabilirliği (portability), açık sistem mimarisini destekleme gibi çeşitli açılardan büyük yararları vardır.
Bütün bunlarla birlikte SQL ‘deki eksiklikler geliştirmecileri bu konudaki yeni eklemelere ve gelişmelere mecbur kılmışdır. Bunlardan bazıları şunlardır:
Intelligent (zeki) SQL öyle bir veri tabanı motoru arayüzü dilidir ki object-oriented ile multi-media yapılarını ve sonuç çıkarmayı birleştirmiştir. Böylece SQL in güçlü bir kolu olmaya çalışmıştır. Aynı zamanda object-oriented veri tabanlarında da sorgulama yapabilmektedir ( Khoshafian,1991).
CHIQL Çinli kullanıcılar için yazılan dah doğal ve basit prosedürlü ve özellkle çoklu durum sorguları yazabilmenize izin vermektedir (Meng, X.; Wang, S.; Lum, V.Y.; Wong, K.F.; Low, B.T.,1997).
Yapay arama GUI ile veya yapay sorgu dili (FQL) ile gerçekleşmektedir. FQL SQL’in bir uzantısıdır. Ve kullanıcılara karmaşık sorgular yazmasına izin veririr( Penaloza, Manuel A.; Welch, Ronald M.,1997).
Local (Yerel) Sql
Local SQL tam yol ve dosya ismi yazmanıza izin verir.
Select from ‘Parca.DBF’ Select from “C:\ORNEK\PARCA.DBF” Bunların ikisi de doğrudur. Bunlar yerine BDE Alias (takma ad)lar da kullanılabilir. Örneğin Select from “:PDDX:Table1”
NOT: Yerel tablo ismini yazmazsanız BDE Configuration Utility ‘deki belirlenen tipi kabul eder. Bu tip tablolar ile Query nesneleri ile ilişkilendirilen standart takma adlar için olan varsayılan sürücü tipindedir.
Sonuç olarak Local SQL tablo isimlerinin uzunluğunun tek veya çift tırnak içinde yazılanları tablo isimlerinin iki katı kadar olmasına izin verir.
Sütunlar
Local SQL Paradox’ un çoklu kelimeli sütun isimlerini ve SQL anahtar kelimelerinin uzunluğunun iki katını desteklemektedir. Bu SQL anahtar kelimeleri şunlardır.
• Tek veya çift tırnak içinde yazılanlar
• SQL tablo ismi ile başlayan veya tablo ile ilişkili isimler
Örnek:
Select M.”Mus_no” from Musteri M Aşağıdaki örnekte sütun ismi SQL DATE anahtar kelimesini ikiye katlar. Select Datelog.”DATE” from Datelog
Tarihler
Local SQL tarihlerin U.S formatında da olduğu gibi MM/DD/YY (ay/gün/yıl) olarak girilmesini bekler.Uluslar arası tarih formatını desteklemez.
Veri İşleme
Bazı sınırlamalarla birlikte Local SQL aşağıdaki ifadeleri desteklemektedir.
Select Var olan veriyi açmak için
Insert Tabloya yeni bir veri eklemek için
Update Var olan veriyi düzeltmek için
Delete - Tablodan veriyi silmek için
Aşağıdaki bölümler Local SQL DML ifadeleri için kullanılabilen fonksiyonları tarif eder.
• DML ifadelerindeki parametre alt durumları
• Toplam fonksiyonları
• String fonksiyonları
• Tarih (date) fonksiyonları
• Operatörler
• Güncellenebilen sorgular
A) Select
Select ifadesi bir veya daha fazla tablodan veri getirmek için kullanılır. Çoklu tablolardan veri işini yapan Select ifadelerine “Join” (birleştirme) denir. Local SQL Select İfadelerinin aşağıdaki şekillerini desteklemektedir.
SELECT [DISTINCT] sütun_listesi
FROM tablo_adı
[WHERE arama_durumu]
[ORDER BY sıralama_listesi]
[GROUP BY grup_listesi]
[HAVING sahiplik_durumu]
[UNION secim_açıklaması]
(heterojen birleşmeler)
Aşağıda belirtilenler hariç bütün cümlecikler ANSI_standart SQL' ce kullanılır. [ ] içinde olanlar istenirse kullanılır.
A.1 Distinct Cümleciği
Kelime manası ayrı ,hariç,tek demektir. Deyim olarak aynı alandaki benzersiz olanları bulmayı ifade eder.
Aşağıdaki örnek şehir alanı ne olursa olsun tüm öğrencileri gösterir
Select ogr_sehir From Ogrenci
Aşağıdaki örnek ise sehirleri aynı oln öğrencilerin yalnız ilkini seçer.
Select DISTINCT ogr_sehir From Ogrenci
A.2 From Cümleciği
From cümleciği verinin getirileceği tablo veya tabloları belirtir . Tablo referansı tek bir tablo ,tabloların virgülle ayrıldığı bir liste veya iç/dış birleştirme (SQL –92 standartında belirtilen ) olabilir . Örneğin aşağıdaki ifade tek bir tabloyu çağırır :
Select ogr_ad,ogr_soyad
From “Ogrenci.dbf”
Aşağıdaki ifade bir sol dış birleştirmesini gösteren tablo referansına bir örnektir.
Select From Parca left Outer join İthalat
On Parca.Parca_no=Ithalat.Parca_no
A.3 Where Cümleciği
İsteğe bağlı olarak kullanılan Where cümleciği arama durumunda belirtilen kriterlere uyan kayıtların alınmasını böylece filtreleme yapılmasını sağlar.
Örneğin aşağıdaki ifade sadece Parca_nosu 543’ den büyük olan satırları çağırır.
Select From Parca Where Parca_no>543
Where cümleciği IN yüklemini de içerebilir. In yüklemi parantez ,içinde değerler listesini içerir. Örneğin aşağıdaki ifade sadece Parca_no ‘su IN yüklem listesindeki öğelere eşit olan satırları çağırır.
Select From Parca Where Parca_no IN (543,544,650,680)
Select from Dersler Where bol_kod=’12’ and ogr_sinif=’4’ (ORACLE)
Where cümleciğinde karşılaştırma için > ,<,=, <> gibi operatörler kullanılabilir. Bunun yanı sıra IN , ANY , ALL , EXIST yüklemleri de kullanılabilir
A.4 Order By
Order By cümleciği çağrılan satırların sırasını belirtir.
Örneğin aşağıdaki sorgu öğrenci ismine göre alfabetik(artan) sıralı olarak bütün öğrencilerin listesini verir
Select From Ogrenci
Order By ogr_no ASC
aşağıdaki sorgu öğrenci soyadına göre alfabetik(azalan) sıralı olarak bütün öğrencilerin listesini verir.
Select From Ogrenci
Order By ogr_soyad DESC
Hesaplanmış alanlar korelasyon( ilişki) ismine veya sıra durumuna göre sıralanabilir. Örneğin aşağıdaki sorguda ad ile soyad alanı birleştirilerek oluşturulan alana göre sıralanarak kayıtlar ekrana çağrılır.
Select soyad || ‘,’ ad || as tam_ad ,telefon
From müsteri
Order by tam_ad
A.5 Group By
Group By cümleciği toplam fonksiyonları için çağrılan satırların nasıl gruplandırılacağını belirler.
Örnek:
Select Parca_no, Sum(miktar) as Toplam
From Parca
Group By Parca_no
A.6 Having
Having cümleciği kaydın sorguca belirlenen değerlere sahip olup olmadığına bakar. Group By ile birlikte kullanılır. Having cümleciğiyle denkleşmeyen gruplar sonuç kümesinden çıkarılırlar. Alt sorgular Having cümleciğince desteklenirler.
Alt sorgu ,ana sorguca döndürülecek kayıtların sayısını sınırlayan arama koşullarıdır. =,<,> gibi koşullandırmalar yanında IN ,ANY ,ALL, EXIST gibi ön yüklemler de kullanılabilir.
Bölümlere göre öğrenci sayıları 500 kişinin üstünde olan bölüm kodlarının listesini veren bir örnek aşağıdadır.
Select DISTINCT ogr_bol_kod, COUNT()
From Ogrenci
Group By ogr_bol_kod
Having COUNT ()>500 (ORACLE)----odtu istatıstık--------
A.7 Union
Union cümleciği iki veya daha fazla Select ifadesinin sonucundan tek bir tablo üretmek için kullanılır.
Örneğin :
Select From Ogrenci
UNION
Select From Veli
Sekil 1 Union işlemi sonucu oluşan sonuç kümesi
A.8 İntersect
Sorgulardan elde edilen ortak kayıtları verir.
Select From Ogrenci
INTERSECT
Select From Veli
Şekil 2 Intersect işemi sonucu oluşan küme
NOT : Delphi 3.0 ’da yoktur ve Oracle ’da vardır. (Odtü İstasıstık )
A.9 Minus
Birinci sorguda bulunup ikinci sorguda bulunmayan kayıtların bulunmasında kullanılır.Diğer bir şekilde bir grup öğenin seçimden çıkarılması amacıyla kullanılır.
Select Ogr_num
From Ogrenci
MINUS
(Select ali_ogr_num, From alınandersler) (Odtü Istatıstık)
A.10 Heterojen Birleşmeler
Local SQL farklı veri tabanlarındaki tabloların birleştirilmesini destekler. Heterojen birleştirme yapılacağı zaman yerel bir takma ad seçebilirsiniz. Takma ad seçmek için SQL/SELECT ALIAS ‘ı seçin. Eğer Alias seçmezsen Local SQL tabloyu kullanılan veri tabanının olduğu aktif dizinde bulmaya çalışacaktır.
Örneğin ISLER Alias ‘ı fonksiyonda geçen veri tabanı idaresi olabilir.
Yerel bir Alias seçtikten sonra bir tablo ismi belirtirsen
• Yerel tablolar için hem Alias’ ı hem yolu belirt
• Tabloları uzaktan kontrol için sadece Alias’ ı belirt
Aşağıdaki ifade Paradox tablosundan ve Dbase tablosundan veri getirir.
Select Distinct M.Müs_no,M.Sehir,S.Siparis_no
From “MUSTERI.DB” M , “SIPARIS.DBF” Select
Where M.Müs_no= S.Müs_no
B) Update
Ansi –Standard Update için belirtilen bir sınırlama yoktur. Önceden de anlatıldığı gibidir
.Örneğin :
Update ULKETABLOSU
Set baskent=’Paris’
Where ULKE=’FRANSA’
And baskent=’Istanbul’
C) Delete
Ansi –Standard Delete için belirtilen bir sınırlama yoktur. Önceden de anlatıldığı gibidir Örneğin :
DELETE FROM TEZ9.DB
WHERE SOYAD=”ERTEM”
(nesneden bir değer alacak olursak where soyad=:soyad )
NOT: TQUERY de Query.Open eventini kullanmayın.
Dml İfadelerındeki Alt Durum Parametreleri
Değişkenler veya parametre yapıcılar (?) Dml ifadelerinde değerler yerine kullanılabilen değişkenler : den sonra yazılmalıdırlar.
Örneğin
SELECT ad,soyad
From “Musteri.db” Where soyad>:var1 and ad<:var2
Toplam Fonksiyonları
Çağrılan datayla birlikte aşağıdaki Ansi-Standard SQL toplam fonksiyonları kullanılabilir.
SUM () Bir sütundaki değerlerin toplamını alır.
AVG () Bir sütundaki değerlerin ortalamasını alır.
MIN () Bir sütundaki değerlerin en küçüğünü bulur.
MAX () Bir sütundaki değerlerin en büyüğünü bulur.
COUNT () Bir sütundaki değerlerin sayısını bulur
ÖRNEKLER :
SUM (FIELD10)
SELECT SUM (BRUT) FROM PERSONEL
SUM (FIELD1+FIELD2)
String Fonksiyonları
UPPER() Stringi büyük harfe çevirir.
LOWER() Stringi küçük harfe çevirir.
TRIM() Stringin bazı kısımlarını alır.
SUBSTRING() Stringten alt stringler oluşturur.
Örnek :
Select from Tez1.db
Where Upper(Soyad)=’ARSLAN’
Tarih Fonksiyonu
Local SQL EXTRACT() fonksiyonuna tarih/zaman alanlarından tek sayısal alanı almak ve şu şekilde kullanmak suretiyle çalışmasına izin verir.
EXTRACT (extract_alan From alan_adı)
Örneğin aşağıdaki ifade tarih alanından yıl değerini alır.
Select Extract( Yıl From Dogum_tar)
From Ogrenci
Aynı zamanda MONTH ,DAY,HOUR,MINUTE,SECOND değerlerini de bu fonksiyonu kullanarak çıkartabilirsiniz.
NOT : EXTRACT TIMEZONE_HOUR veya TIMEZONE_MINUTE cümleciklerini desteklemez.
Operatörler
Local SQL şu operatörleri destekler
Aritmetik ( ) ,+ , - , , /
Karşılaştırma <, >,= ,<>, >=,=< ,
IS NULL ,IS NOTNULL, :Boşluk olarakta nitelendirilir. ‘ ‘ boşluk değildir.
IN ,NOTIN :Bir küme içinde olup olmama durumu
[NOT]BETWEEN x AND y :Bir değerin x ile yönetici arasında veya dışında olması durumlarını belirtir
ALL :Bir kümedeki tüm değwerlwrdir ve bir eşitlik veya eşitsizlikle kullanılır. Where Ucret>=ALL(10000,20000) ANY : Bir kümeden elde edilen değerlerin her hangi biriyse seçime dahil olunur.
[NOT] EXISTS :Alt sorgu kayvramıyla kullanılır.
[NOT] LIKE :Benzerlik işlemcisi Where isim Like ‘A%’ İsmi ‘A’ ile başlayanlar
Mantıksal ( ) ,AND ,OR , NOT
String birleştirme ||
Güncellenebilen Sorgular
SQL linkleri hem tekli hem de çoklu tabloların güncelleştirilebilir sorguları için genişletilmiş destek sunar. Şu kısıtlamalar güncellemelere etki eder.
• Link yapılan alanlar güncellenemez
• Index anahtarlaması hataya yol açar.
Aktif Sorgulardaki Sınırlamalar
Tekli tablo sorguları veya görünümleri (güncellenebilir olanlar) şunları sağlar:
• Join Union,Intersect ,Minus işlemleri yoktur.
• Distinct anahtar kelimesi Select‘ te yoktur.
• Select cümleciğindeki her şey basit Sütun referansı veya hesaplanmış alandır , Toplam fonksiyonlarına izin verilmez
• From cümleciğinde referans edilen tablo hem güncellenebilir taban tablosu veya güncellenebilir görünüme sahiptir.
• Group By ve Having cümleciği yoktur.
• Alt sorgular yoktur, alt ilişkili sorgular yoktur.
• Herhangi bir Order By cümleciği Index
Ek kısıtlamalar alanlara veya kursor metotlarına uygulanabilir.
Tablo Birleştirme (JOIN) işlemi
Sorgulanan veriler eğer birden fazla tabloda yer alıyorsa Join işlemi yapılır. Join işlemi yapılabilmesi için iki tabloda da ortak alanlar olmalıdır.
Örneğin
OGRENCI SINAV
NO AD SOYAD NOTLAR VIZE1 VIZE2 FINAL
1 ISMAIL ARSLAN 1 90 100 100
2 ARZU ARSLAN 4 85 90 95
3 ISRAFIL ARSLAN 3 92 80 90
Çizelge 1 Birleştirilecek iki tablo
Select No,Ad,Soyad,Fınal
From Ogrenci, Sinav
Where No=Notlar and no<’4’
Aktif Join (Bağlantılar) Üzerindeki Kısıtlamalar
Aktif bağlantılar kursorlere bağlıdırlar ve şuralarda kullanılabilirler.
• Bütün bağlantılar soldan sağa dış bağlantılardır
• Bütünbağlantılar Indexlerle desteklenirler(Paradox veDbase için
• Dış ısmarlama tanımlanmaz
• Her tablo(Join deki) taban tablodur.
• Sorgu tekli tablo güncelleştirmesini engelleyecek hiçbir elemente sahip değildir.
Sabitler (Constraints)
Herhangi bir güncellenebilir sorguyu çalıştırmadan önce Query durum özelliğininStmtConstarined ‘ini true ayarlayarak bir tabloyu sabitleyebilirsiniz. Kayıt ekleme veya düzeltme işlemi yeni kaydın kaybolmasına neden olduğu durumlarda bir hata oluşacaktır.
Hesaplanmış Alanlar
Güncellenebilen sorgular için bir ek alan sonuç alanı olarak tanımlanabilir. Bunlar hem read-only hem hesaplanış alan olurlar. BDE fonksiyonundan DbiPutField çağrısı belirtilen alanın yeniden hesaplanmasına neden olur.
Bde Fonksiyon Çağrıları (Sonuç Sorguları Üzerinde)
Eğer bir sorgu kursor döndürürse o kursor BDE fonksiyonu olan DbiOpenTable ‘dan dönen düşük seviyedeki yetenekleri tam olarak destekler.
Böylece filtreler ve alan haritaları ileri sonuç kümesi temizlemelerine uygulanmak için kullanılabilir. Açık tablodaki kursörlerin tersine DbiAddindex ve DbiSwitchtoIndex isimleri uygulanamamaktadır.
Veri Tanımlama
Local SQL veri Tanımlama dilini oluşturma,değiştirme ,tabloları silme indeksleri oluşturmak ve sıralamak hususlarını destekler. Görünümler desteklenir.
Local SQL DDL ifadelerindeki değerler için değişkenlerin alt durumlarına izin vermez.
Aşağıdaki DDL durumları desteklenmektedir.
• CREATE TABLE Tablo oluşturma
• ALTER TABLE Tablo düzeltme
• DROP TABLE Tablo sime
• CREATE INDEX Index oluşturma
• DROP INDEX Index silme
• CREATE VIEW Görünüm oluşturma
B1. Create Tables (Tablo Oluşturma)
Create Table aşağıdaki sınırlamalar olmak üzere kullanılır:
• Domain ‘e dayanan sütun tanımlamaları desteklenmez
• Sabitler Paradox için PRIMARY KEY ile sınırlanmıştır.
• Dbase de sabitler desteklenmez
Örneğin aşağıdaki ifade Paradox ta Primary Key ‘in soyad ve ad sütunları üzerinde sabitlenmiş bir veri tabanı tablosu oluşturur.
Create Table “ISCI.DB”
(
Soyad char (15),
Ad char (15),
Maas numeric(10,2),
Bölüm smallint,
Primary Key (soyad,ad)
)
Aşağıdaki örnek yukarıdakinin Dbase için yazılmış olup Primary Key atlanmış halidir.
Create Table “ISCI.DBF”
(
Soyad char (15),
Ad char (15),
Maas numeric(10,2),
Bölüm smallint,
)
B2. Paradox ve Dbase Tablosu Oluşturma
Local SQL ‘i kullanarak Paradox veya Dbase tablosu oluşturabilirsiniz. Bunu ismi verirken uzantısını belirterek yapabilirsiniz.
“.DB” Paradox için
“.DBF” Dbase için
Eğer yerel tablo isminin uzantısını yazmazsanız bu tablonun uzantısı BDE Configuration Utility deki Sistem sayfasındaki Varsayılan sürücü ayarındaki tür olacaktır.
SQL Syntax BDE Logical Paradox dBASE
SMALLINT fldINT16 Short Number (6,10)
INTEGER fldINT32 Long Integer Number (20,4)
DECIMAL(x,y) fldBCD BCD N/A
NUMERIC(x,y) fldFLOAT Number Number (x,y)
FLOAT(x,y) fldFLOAT Number Float (x,y)
CHARACTER(n) fldZSTRING Alpha Character
VARCHAR(n) fldZSTRING Alpha Character
DATE FldDATE Date Date
BOOLEAN FldBOOL Logical Logical
BLOB(n,1) FldstMEMO Memo Memo
BLOB(n,2) FldstBINARY Binary Binary
BLOB(n,3) FldstFMTMEMO Formatted memo N/A
BLOB(n,4) FldstOLEOBJ OLE OLE
BLOB(n,5) FldstGRAPHIC Graphic N/A
TIME FldTIME Time N/A
TIMESTAMP FldTIMESTAMP Timestamp N/A
MONEY fldFLOAT, fldstMONEY Money Number (20,4)
AUTOINC fldINT32, fldstAUTOINC Autoincrement N/A
BYTES(n) fldBYTES(n) Bytes N/A
Çizelge 2. Veri tabanlarındaki değişken türleri ve özellikleri
X=kesin (Tam rakam) Default ‘u sürücüye göre değişir.
Y= derece
N= byte cinsinden uzunluk
1-5 Blob alt tipi (default =1)
Oracle’da tablo oluşturma :
Create Table Ogrenci
(Ogrenci_no number(

NOT NULL,
Ad Char(15)
Constraint ogr_key Primary Key (Ogrenci_No) Using Index
(Odtü istatistik )
Örnek
Query1.SQL de yazılı olan :
Create Table “Tez1.db”
(
soyad char [15]
ad char [15]
Bölüm smallint )
Form üzerinde 1 tane Datasource 1 tane Query var
FormCreate de şunlar yazılıdır.
Query1.ExecSql
Query1.Close
NOT : Query1.Open dedikten sonra SQL ‘i çalıştırırsak EnoResultSet hatası verir .
B3. Alter Table (Tablo Düzeltme)
Local SQL aşağıdaki Ansi-Standard Alter Table alt kullanım deyimlerini desteklemektedir. Tabloyu değiştirirken yeni sütunlar ekleyebilirsiniz.
Sütun ekleme ALTER TABLE tablo_ismi ADD sütün_ismi veri_tipi [,ADD sütun ismi veri tipi ...]
Örneğin aşağıdaki ifade Dbase tablosuna 1 sütun ekler
ALTER TABLE “Ogrenci.DBF” ADD ortalama smallint
Sütun silme ALTER TABLE tablo_ismi DROP sütün_ismi [,DROP sütun ismi ...]
Aşağıdaki ifade tablodan iki sütün siler
ALTER TABLE “Ogrenci.Dbf” DROP soyad, DROP ad
ADD ve DROP işlemleri tek ifadede birlikte kullanılabilir. Örneğin aşağıdaki ifade iki sütun siler ,bir sütun ekler:
ALTER TABLE “Market.DB” DROP kdv,DROP topkdv,ADD topalıs integer
NOT : Query1.Open dedikten sonra SQL ‘i çalıştırırsak EnoResultSet hatası verir .
NOT : Aynı alanı eklersen veya olmayan bir alanı kaldırmaya çalışırsa EDBerror hatası verir.
B4. Drop Table (Tablo Silme)
Bu komut Paradox veya Dbase tablosunu siler .
Örneğin DROP TABLE “ISCI.DB”
Bu işlem tabloyu tamamen siler.
NOT : Query1.Open dedikten sonra SQL ‘i çalıştırırsak EnoResultSet hatası verir .
B5. Create Index (Index Oluşturma )
Create Index kullanıcılara aşağıdaki formatı kullanarak tablolara index oluşturmayı sağlar.
Create Index index_adı ON tablo_adı (sütun [,sütun...])
Create Index dbase tabloları için index oluşturmanın tek yoludur. Aşağıdaki ifade Dbase dosyası için index oluşturur.
Create Index namex ON “Depo.Dbf” (malz_adi)
Paradox kullanıcıları Create Index ile ikincil indexler oluşturur. İlk index olan Primary dosyaları Primary Key belirterek tablo oluştururken Create Table ile birlikte yazılarak oluşturulur.
B6. Drop Index (Index Silme)
Local SQL Ansi –Standard Drop Index ifadesi ile oluşturulmuş indexi silmenize izin verir. Bu Dbase ve Paradox dosyalarını destekler.
DROP INDEX tablo ismi.index_ismi |PRIMARY
Primary anahtar kelimesi Paradox primary indexleri silmek için kullanılır. Örneğin aşağıdaki ifade ISCI.DB deki ana primary index ’i silmek için kulllanılır.
Drop Index “ISCI.DB”.Primary
Base index dosyalarını veya ikincil Paradox indexlerini silmek için index ismini yazmanız gerekiyor.
Drop Index “ISCI.DB”.Namex
NOT : Eğer tablonuzun indexi yoksa EdbEngineError index does'nt exist mesajı verir.
B7. Create View
Görüntü Select ifadesinden bir görsel ifade oluşturur. İhtiyacınız olan bu veriyi bu hareketli ızgara veya pencereyle tablo üzerinde görebilir. Bunu yaparken de teknik işlemler gözükmez. Karışık beceri gerektiren Select cümleciği yazmaktansa kullanıcı bir görünüm seçer.
Create View bir veri görünümü seçer ki bu veri tabanında ki bir veya daha fazla tablodan oluşur. Geri döndürülecek (veya görüntülenecek) satırlar kaynak tablodaki sütun listelerinden Select ifadesiyle seçilenlerce belirlenecektir. Select proje ,birleştirme işlemlerini eğer bunlar tabloysa yapılabilir. Create View kullanıcılara aşağıdaki biçimi kullanarak tablolar üzerinde görünümler oluşturmalarına izin verir.
Create View görünüm_adı [sütun_adı [,sütun_adı]...]
Create View ClientDataRepository (CDR) ile birleşiyor.
CDR görünümü tanımlayan Select cümleciğini içerir. “WITH CHECK OPTION” sabit görünümler oluşturmak için desteklenir. Görünümlerin görünümü de desteklenir. Yine de Basamakla/Yerel (cascade/local) görünüm özelliği desteklenmez. Çünkü tüm güncellenebilen görünümler sabitleri basamaklar.
DDL Örnekleri
A) Drop Table ( Tablo Silme)
Eğer tablo ismi , karakter periyodu içeriyorsa, ismi çift tırnak içinde gösteriniz.
Drop Table “C:\Data\Customer.Db”
Eğer tablo ismi , karakter periyodu içermiyorsa, ismi çift tırnak içinde göstermeyin. Drop table clients
NOT: Query1.Open yazılmamış olması gerekiyor.
B) CREATE INDEX
Örneğin : Create Index Insoyad On Tez9[Soyad]
Create Index Parca On Parcalar (Part_No)
Create Index Pers_maas On personel(brüt)
Paradox : Paradox birincil indexleri yalnızca tablo oluşturulurken oluşturulabilir. İkincil indexler büyük harf duyarsız korunduğunda mümkünse oluşturulur.
Dbase : Dbase indexleri belirtildiği gibi oluşturulur. Index ismi tag ismidir
C) DROP INDEX
Index silerken Tablo_ Ismi.Index_ Ismi şeklinde bir yazılım kullanırız.
Drop index.part_no
Drop index.primary
Drop tez9.insoyad
DML ( Data Manipulation) Örnekleri
Aşağıdaki cümlecikler :
Select From, Where ,Order By, Group by ve Having
Aşağıdaki toplamlar
SUM , AVG , MIN , MAX , COUNT ve
Aşağıdaki operatörler
, , / , =, <> , is NULL
UPDATE , INSERT , DELETE tarafından desteklenen operatör ve cümleciklerdir.
Aşağıdaki örnekler standart veri tabanlarıyla kullanılan DML ifadelerine birer örnektir.
1. Örnek UPDATE
Update Esya
Set sehir=’ Erzurum’
Where esya.sehir=’Aydın’
Sehir adı ‘Aydın’ olan kayıtların sehir adı alanlarını ‘Erzurum’ ile değiştirir.
2. Örnek INSERT
Insert into Esya(parca_no,sehir)
Values (‘aa090’,’Ankara’)
Parca ve Sehir alanlarına bu değerleri ekler
3. Örnek DELETE
Delete From Esya
Where parca_no=’aa090’
Parca_nosu ‘aa090’ olan kayıtları siler
4. Örnek Birleştirmek için SELECT
Aşağıdaki örnek SELECT ifadesinin nasıl JOIN olarak kullanıldığını gösteriyor
Select Distinct P.parca_no, P.miktar, E.sehir
From Parca P ,Esya E
Where p.parca_no=E.parca_no
And P.miktar>20
Order by P.miktar, E.sehir, P.parca_no
Birleştirme amacıyla kullanılan bir SELECT ifadesi WHERE cümleciğini içermelidir ki en azından bir alanın her iki tabloda da eşit olduğunu kontrol edebilsin.
5. Örnek Alt Seçimler
Select P.parca_no from Parca P
Where P.miktar In
( Select I.miktar from Ithalat I
Where I.parca_no=’aa090’)
Parca.Db ‘deki miktar alanı ithalattaki parca_nosu aa93 olan kayıtlardaki miktarların birine eşit olan parca.dbf deki kayıtların parca_no’ larını alır.
6. Örnek Group By
Select parca_no , Sum (miktar) as PQTY
From Parca
Group by parca_no
NOT : Select cümleciklerindeki Toplam alanları eğer hesaplanan alan kullanıldıysa Group By cümleciği kullanılmalıdır.
7. Örnek Order By
Aşağıdaki örnek azalan tipteki cümlecikte kullanılan Order By ‘a bir örnektir.
Select Distinct musteri_no
From c:\data\musteri
Order by musteri_no Descending
NOT : Ascending= artan Descending = azalan
BÖLÜM IV
TQUERY NESNESİ
Tquery Nedir : SQL ifadelerine dayanan dataset 'leri işleyen visal bir Delpi nesnesidir. Veri tabanına SQL ifadeleriyle ulaşmak için Tquery kullanınınız . Query öğeleri Sybase, SQL Server, Oracle, Informix, DB2, InterBase gibi uzaktan kontrollü serverlarda , Paradox, dBASE, Access, FoxPro gibi Interbaselerde , ve ODBC türü veri tabanlarıyla kullanılır.
Avantajları :
• Aynı anda birden fazla tabloya erişme (Join İşlemi)
• Tüm satır ve sütünü çağırmaktansa istenen sat ır ve sütunlara ulaşma.
Şekil 3 TQery Nesnesi
NOT: Tquery ölçülebilir veri tabanı uygulamalarında özel bir önemi vardır. Eğer yerel veri tabanlarıyla yapılan uygulamaları daha sonra uzaktan kontrollü server uygulamaların dönüştürmek gibi bir olasılık da Tquery öğesi bu geçiş kolaylığına garanti verir.
TQUERY’nin Hiyerarşik Yapısı
TObject
TPersistent
TComponent
TDataSet
TBDEDataSet
TDBDataSet
TQery
Tquery’ den Gelen Özellikler
Constrained
DataSource
Local
ParamCount
Params
Prepared
RequestLive
RowsAffected
SQL
SQLBinary
StmtHandle
Text
UniDirectional
TDBDataSet’ den Gelen Özellikler
Database
DatabaseName
DBHandle
DBLocale
DBSession
Provider
SessionName
UpdateMode
TBDEDataSet’ den Gelen Özellikler
CacheBlobs
CachedUpdates
CanModify
ExpIndex
Filter
Filtered
FilterOptions
Handle
KeySize
Locale
RecNo
RecordCount
RecordSize
UpdateObject
UpdateRecordTypes
UpdatesPending
TDataSet’ den Gelen Özellikler
Active
AutoCalcFields
Bof
Bookmark
Constraints
DefaultFields
Designer
EOF
FieldCount
FieldDefs
Fields
FieldValues
Found
Modified
Name
State
TComponent’ dan Gelen Özellikler
ComObject
ComponentCount
ComponentIndex
Components
ComponentState
ComponentStyle
DesignInfo
Owner
Tag
VCLComObject
1) CONSTRAINED (KISITLAMA)
Select ifadeleriyle üretilen sonuç kümesine uymayan güncellemelere veya eklemelere izin verilip verilmeyeceğini ve konulan sınırlamaların aktif olup olamayacağını belirler.
Property Constrained: Boolean;
Bu özelliği kullanarak SQL de Paradox veya Dbase tabloları için yazılmış sonuç kümesine aykırı bir veri girildiğinde buradaki sınırlamaların geçerli olup olmayacağı belirlenir. False ise sınırlamalar göz ardı edilir. True ise eğer değiştirme veya ekleme işlemlerindeki veriler sınırlara uymuyorsa bu girişlere izin verilmez.
Select From Customers
Where (Custno > 1400 And Custno < 1500)
TCHECKCONSTRAINT
Bir alan öğesi için yazılan sınırlamaların toplamını içerir. Alan öğeleri geçerli veri değerlerini tanımlayan kontrol koşullarını destekler. Bu nesne verilen alana etki eden kontrol koşullarının toplamını saklamaktadır
2) DATASOURCE
Aktif alan değerlerini veri tabanından alarak SQL ifadesinde kullanmayı sağlayan DataSource öğesini belirler.
Property DataSource: TDataSource;
Datasource başka bir dataseti işaret etmelidir. Bir query öğesini göstermemelidir. Datasource’ ta belirtilen dataset oluşturulmalı,çalıştırılmalı ve parametre bağlanmadan önce açılmalıdır. Parametreler Query’ nin Prepare metoduyla çalıştırılırlar.
İpucu : DataSource’ u özellikle linklerde master-detail ilişkisinde kullanın. Aynı zamanda Params setinde olmayan parametreleri bağlamayı garantilemek için veya Parambyname metodunu çağırmak için kullanılır.
Eğer SQL cümlesi parametre içermezse veya parametreler Params özelliğini veya ParambyName olayını kullanıyorsalar bunu kullanmanıza gerek yok.
3) -R- LOCAL
Bir Querynin uzak erişimli servarlardakl SQL tablolarından daha çok bir veya daha fazla Paradox veya dBase tablosunu mu tercih ettiğini belirtir.
Property Local :Boolean;
Bir sorgu uzak serverdaki SQL tablosuna değilde bir veya daha fazla Paradox veya Dbase tablosuna erişiyorsa ( SQL tablosu yerine ) bu özellik true olur. Yoksa Local False ‘tur. Local bir uygulama sorgunun Prepare metodunu sorguyu çalıştırmadan önce otomatikman ayarlar.
Bazı sorgu öğe setleri (constrained gibi) Paradox veya Dbase tabloları için çok anlamlıdır. Diğerleri SQL serverların uzaktan kontrolünde anlamlıdır. Local bize ulaşılan veri tabanının tipine dayanarak code‘da mantıksal ayrımlar (branşlar) için yaralı bilgiler verir. Aynı zamanda BDE‘ nin bir sorguyu kendi Local Query motorunu kullanarak mı yoksa SQL ifadelerini doğrudan uzaktan kontrollü server ‘a geçerek mi bir sorguyu parsellediği belirlenebilir
4) PARAMCHECK
SQL özelliği çalışma anında değiştirildiğinde parametre listesinin (bir sorgu için) tekrar üretilip üretilmediğini belirler.
property ParamCheck: Boolean;
Default ‘u true dur. Ve bu params özelliğinin çalışma esnasında otomatik olarak yeniden üretileceğini belirler. Paramcheck true olduğunda aktif SQL ifadesi doğru parametre numarasının üretileceğini garantilemiş olur.
Bu özellik parametre kullanan veri tanımlama ifadeleri için çok yararlıdır. Örneğin interbase store procedure için sorgu öğesi kullanırken. Parametresiz sorgu kullanan uygulamalar Paramcheck özelliğini False ayarlayabilir ama diğer durumlarda bu özellik true olmalıdır.
5) –R- PARAMCOUNT
Query için aktif parametre sayısını belirtir
Property Paramcount :Word;
Paramcheck özelliği true ise Paramcount daima Query için SQL ifadesindeki gerçek parametre sayısına uyar.Bir uygulama Params özeliğine parametre ekleyebilir veya parametre silebilir. Bu tür değişiklikler Paramcount a otomatik olarak yansır.
6) PARAMS
Sorgunun SQL ifadesi için parametre bilgisi saklanır.
Property Params[Index:Word] Tparams
Çalışma anında Params‘a parametre isimlerini değerlerini ve veri tiplerini dinamik olarak görmek ve ayarlamak için ulaşır. Params 0 tabanlı bir parametre kayıt dizisidir. Index ulaşılacak dizi elemanını belirtir.
NOT: Her parametrenin ismi bilindiğinde parametre değerlerini ayarlamanın ve çağırmanın daha kolay bir yolu ParambyName kullanmaktır. Fakat Parambyname ile parametrenin ismini ve tipini değiştiremeyiz.
Select ifadelerinde kullanılan parametre boş (NULL) olamaz Fakat bunlar Update ve Insert ifadelerinde Null olabilir.
Şekil 4 TQuery Params girisi
Örnek1:
Query1.Prepare;
Query1.Params[0]:=’Argentina’;
Query1.ExecSql;
Örnek2:
Query1.Params[0].Asstring:=(sender as Tedit).Text;
Query1.ExecSql;
7) PREPARED
Bir sorgunun çalıştırılmak için hazırlanıp hazırlanmadığını belirler.
property Prepared: Boolean;
Eğer true ise Query hazırlanmıştır. False ise hazırlanmamıştır. Bir sorgunun çalıştırılmadan önce hazırlanması gerekiyorsa ve bu daha önce hazırlanırsa çalıştırma performansı artar.(özellikle bu aynı parametre değerlerini alarak birden fazla çalıştırılan bir parametreli sorgu ise) .
if not Query1.Prepared then
begin
Query1.Close;
Query1.Prepare;
Query1.Open
end;
NOT : Bir uygulama aktif Prepared ayarlarını sorguyu hazırlamak veya hazırlamamak için değiştirebilir. Eğer Prepare true ise bunu False yapmak Unprepare metodunu sorguyu hazırlamaması için çağırmak demektir. Prepared false ise bunu true ayarlamak sorguyu hazırlamak için Prepare metodunu çağırmak demektir. Prepared False ise bunu true ayarlamak sorguyu hazırlamak için Prepare metodunu çağırmak demektir. Genelde Prepare ve Unprepare ‘ı direkt olarak çağırmak daha iyi bir programlama tekniğidir.

REQUESTLIVE
Sorgu çalıştığında uygulamanın BDE‘ den canlı sonuç seti bekleyip beklemeyeceğini belirler.
Property Requestlıve :Boolean;
Requestlive ‘i BDE nin uygulama için sonuç seti üretmeyi deneyip denemeyeceğini belirlemek için ayarlayın. Varsayılan değeri False’dur ve bu Query read-only sonuç seti döndürür.
Requestlive ‘ı true olarak ayarlamak BDE’ den canlı sonuç setinin döndürüleceğini garantilemez. Yalnızca BDE ‘nin bu seti döndürmek için çalışacağını garantiler .BDE yalnızca Select yazılımı canlı sonuç seti için gerekli ifadelere sahip olduğunda canlı sonuç seti döndürür.
Eğer Requestlive true ise fakat yazılım gereklere uygun değilse BDE read-only sonuç setini Paradox veya Dbase için döndürür veya uzaktan kontrollü serverlar için hata koduna döndürür.
9) -R- ROWSAFFECTED
Son query işlemince kaç satırın güncellendiğini veya silindiğini belirler.
Property Rowsaffected :Integer;
Eğer RowsAffected –1 ise sorgu hiçbir satıra etki etmemiştir.
Örneğin Label1.Caption:=Inttostr(Query1.RowsAffected)
10) SQL
Sorguca çalıştırılmak üzere SQL text’ ini saklar.
Property SQL:Tstrings
SQL ‘i bir sorgu öğesi olan Execsql veya Open metotları çağrıldığında çalışmak üzere SQL ifadesi oluşturmak için kullanınız. Dizayn aşamasında Object Inspector’ daki string list editöre başvurarak SQL özelliği düzenlenebilir.
NOT : Delphi Client/server geliştiricileri aynı zamanda SQL cümleciği yazmak için Visual Query Builder da kullanırlar. SQL özelliği şunlara ulaşmak için kullanılır.
• Local SQL ‘ı kullanarak Paradox veya Dbase tablolarına erişmek .İzin verilen yazım şekli Ansi-Standard SQL ‘de olduğu gibidir ve Select Insert,Update,Delete ifadelerini içerir.
• Local interbase serverlarındaki veri tabanlarına , SQL –92 standardını ve özel interbase uzantılarını SQL yazılımı için kullanır. Bunun yazım kuralı ve sınırı için Interbase Language Referenca bakabilirsiniz.
• SQL link sürücüleri yaklaşımını (yöntemini) kullanarak uzaktan erişimli veri tabanı serverlardaki veri tabanlarına SQL yazılımı ve sınırları için server dökümantasyonuna bakınız.
SQL için hazırlanan SQL ifadeleri yeniden yerleştirilebilen parametreleri içerebilir. Parametreler params özelliğinde oluşturulur ve saklanır.
Çalışma esnasında SQL ifadesi yazmış olmak için ;
1) Query çalışıyorsa kapatmak için CLOSE ‘u çağırın.
2) SQL özelliğini temizlemek için CLEAR
3) Yeni bir yazı eklemek için ADD veya SQL özelliğinde script dosyasına bir dosya atamak için LOADFROMFILE ‘ı kullanın
4) Eğer kullanıyorsa parametreleri ayarlamak için ParamByName kullanın
5) Sorguyu çalıştırmaya hazırlamak için PREPARE kullanın
6) Sorguyu çalıştırmak için EXECSQL veya OPEN kulanın.
NOT : SQL ifadesi aynı anda bir SQL ifadesi taşıyabilir. Genelde bir server destekleyene kadar çoklu (batch) ifadelere izin verilmez.
Şekil 5 Query1.SQL
11) SQL BINARY
SQL sorgu ifadesini veya sonuç setini temsil eden ikilik veri akışını gösterir.
Property SQLBinary: PChar;
NOT : SQL Binary’ yi direk kullanma .Bu BDE ‘ ye direk iletişim erişimi için dahili olarak kullanılır. Bu SQL özelliğinin çalıştırdığı SQL ifadesini görmek ve ayarlamak için SQL kullanın.
12) -R- STMTHANDLE
Sorgu için BDE ifadesini tutar.
Property StmtHandle: HDBIStmt;
Bunu eğer bir uygulama BDE’ yi direk çağırıyorsa kullanın.(Tquery metotlarını es geçin). Bazı BDE API uygulamaları durum yöneticisine parametre olarak ihtiyaç duyarlar. Bunun dışındaki bütün durumlarda bu özelliğe ihtiyaç yoktur.
13) -R- TEXT
BDE ‘ye geçen gerçek SQL sorgu metnini gösterir.
Property Text: PChar;
Read-only bir özelliğe sahiptir ve BDE ‘ye geçen gerçek SQL query metnini araştırmak için kullanılır. Parametreli sorgular için ,parametrelerle ? sembolü kullanılan metindir.
Genelde bu özelliği kullanmaya gerek yoktur. Sorgudaki SQL ifadesini değiştirmek veya ulaşmak için SQL özelliğini kullanın. Parametreler için Params özelliğini kullanın.
14) UNIDIRECTIONAL
BDE iki yönlü kursörlerinin sorgunun sonuç seti için uygun olup olmadığını belirler.
property UniDirectional: Boolean;
BDE kursörünün sonuç setinde ileri veya geri gidip gitmeyeceğini ayarlayabilirsiniz. Varsayılan değeri False tur.
NOT :Genelde SQL kursörler unidirectional dır. Sadece veri yapısında ileri gidebilirler. Yine de BDE buna izin vermektedir.
Eğer bir uygulama sonuç setinde iki yönlü kayıtlara ulaşma gereği duymuyorsa bunu true olarak ayarla. true olduğunda uygulama daha az hafızaya ihtiyaç duyar ve hız artar.
TDBDATASET ‘DEN GELEN ÖZELLİKLER
15) -R- DATABASE
Bir veya daha fazla tabloyu temsil eden veri tabanı öğesini tanımlar.
property Database: TDatabase;
Tablo ile ilişkili veri tabanı öğesinin özelliklerine ,olaylarına ve metotlarına ulaşmak için database’ i kullanın. Read-only ‘dir ve DatabaseName özelliği ile belirtilen veri tabanı açıldığında otomatik olarak ayarlanır.
with Table1.Database do
begin
StartTransAction;
{Bazı kayıtları Table1 ile kaydeder}
Commit;
end;
16) DATABASENAME
Dataset ile ilişkilendirilecek veri tabanının ismini belirtir.
property DatabaseName: string;
DatabaseName uygulamada kullanılan Database öğesinin ismiyle aynı olmalıdır.
NOT : DatabaseName ‘i veri tabanı bu öğe ile ilişkili olduğunda ayarlamaya kalkarsan hata oluşur.
İPUCU : Dizayn esnasında Tdatabase öğesini çift tıklayarak Database editörü çağır ve DatabaseName özelliğini ayarla.
DatabaseName özelliğini değiştirirken table kapalı olmalıdır.
Table1.Active := False;
try
{ Ilk önce alias kullanmaya çalışıyoruz }
Table1.DatabaseName := 'Delphi_Demos';
Table1.Active := True;
except
on EDatabaseError do
{ Eğer hata oluşursa sürücü ve dizin belirtiyoruz }
Table1.DatabaseName := 'c:\delphi\demos\database';
Table1.Active := True;
end;
17) -R- DBHANDLE
BDE veri tabanı yönetimini tablo için belirler
Type
HDBISES:longint;
Property Dbhandle: HDBISES;
Dbhandle sadece database ve dataset metotlarını atlayarak direkt BDE API' lerine yazma yapılan uygulamalarda yararlıdır. Birçok BDE fonksiyon çağrısı yönetim parametresine ihtiyaç duyar. Oturum aktif edildiğinde Dbhandle’ a bir başlangıç değeri atanır.
NOT: Bu özelliği BDE fonksiyonel olarak standart Delphi öğelerince kullanılamayacak duruma gelene kadar kullanmayın.
18) -R- DBLOCALE
BDE dil sürücüsünü tablo öğesi için ayarlar.
Type
Tlocale : Pointer
Property Dblocale : Tlocale
Dblocale’ ı tablonun ilişkilendirildiği veri tabanı öğesince kullanılan BDE dil sürücüsünü belirlemek için kullanın. BDE ye direk çağrı yapan uygulamalar Dblocale bilgisini API fonksiyonu parametresi olarak vermek zorunda olabilirler.
NOT: Bunu BDE zorunlu olarak ihtiyaç duymadan kullanmayın.
19) -R- DBSESSION
Bu dataset öğesinin ilişki içinde olduğu database oturum öğesini gösterir.
Property DBSession: TSession
Veri tabanı oturum öğesini bununla ilişkili olan tablo öğesiyle birlikte gösterir Varsayılan olarak database öğesi varsayılan oturum öğesiyle ilişkilidir. Oturum otomatik olarak bütün veri tabanı uygulamaları için oluşturulur.
TSession
Tsession bir uygulamada bir grup database’ in global yönetimini sağlar. Tsession ’ın üç kullanım şekli vardır; standart , çoklu Paradox için ağ dosyaları ve çoklu iç içe veri tabanı uygulamalarında. Delphi otomatik olarak global ulaşılabilir varsayılan Tsession öğesini Oturum olarak bütün veri tabanı uygulamaları için yapar .Varsayılan oturum öğesi standard veri tabanı bağlantılarını tutar. Bir uygulama oturumu onun properties' lerine event' lerine veya metotlarına girerek kontrol edilebilir.Farklı network yerleşim birimlerindeki çoklu oturumlara eş zamanlı olarak erişmesi gereken veri tabanı uygulamalarında kullanılır
20) -R- PROVIDER
Bu dataset için provider arayüzünü belirler.
Property Provider: IProvider;
Bu tablo için koruyucu arabiriminı tarif eder. Bu nesne için Provider arabirimini belirlemek amacıyla kontrol edin. Iprovider arabirimi geliştirmecilerin çoklu uygulamalar üzerindeki meraklarıdır. ( Iprovider arabirimi aracılığıyla server uygulamalarında kullanıcı tabloların bu tablo nesnesiyle direk olarak ilişki kurmasını isteyen geliştirmeciler)
21) SESSIONNAME
Bu tablonun ilşkili olduğu oturumun ismini belirler.
Property SessionName: string;
SessionName otomatik olarak tablo ‘nun bağlantılı olduğu database öğesinin SessionName özelliğinin ismine ayarlanır. Eğer sessionName boş ise tablo öğesi otomatikman varsayılan oturumla ilişkilendirilir.
Bir tablo öğesini farklı grupla ilişkilendirmek istersen SessionName var olan session öğesinin sessionName özelliğiyle aynı olmalıdır. Aynı zamanda bu session bu tablonun bağlı olduğu database öğesince kullanılan bir session olmalıdır.
22) UPDATEMODE
BDE’ nin SQL database’de güncellenmekte olan kayıtları nasıl bulacağını belirler.
type
TUpdateMode = (upWhereAll, upWhereChanged, upWhereKeyOnly);
property UpdateMode: TUpdateMode;
UpdateMode’u datasetteki bir kayda konumlanılacağında kriteri belirtmek için kullanınız. UpdateMode aşağıdaki değerleri alabilir:
upWhereAll :Tüm sütunlar kayda konumlanmak için kullanılır upWhereChanged : Sadece anahtar alanlar ve değişen alanlar kayıt bulmak için kullanılır
upWhereOnly :Sadece anahtar alanlar kayıt bulmak için kullanılır
TDBEDATASET ‘DEN GELEN ÖZELLİKLER
23) CACHEBLOBS
Blob’ların hafızada saklanıp saklanmayacağını (cache edilmesi) belirler.
property CacheBlobs:Boolean;
Cacheblobs ‘u blob resimler gösteren kayıtlar arasında ilerlerken performansı artırmak için Blob resimlerin hafızada saklanıp saklanmayacağını belirtmek için kullanın . Eğer bir uygulama kayıtlarla ilişkili Blob’ları göstermeye ihtiyaç duymuyorsa Cacheblobs’ u False yapın ki sistem kaynaklarını daha optimum kullanmış olsun.
24) CACHEDUPDATES
Cached güncellemelerin (bir tablo ) için kullanıma hazır olup olmadığını belirler.
property CachedUpdates:Boolean;
Eğer CachedUpdates true ise Cached değişikliği yapılabilr yoksa yapılamaz. CachedUpdates enable olduğunda (bir tablonun güncellenmesi ; tablonun kaydedilmesi yeni kayıt ekleme,silme,düzeltme) direkt olarak veri tabanındaki tablolara yazılmak yerine ana bellekte tutulur. Değişiklikler tamamlandığında bir uygulama Cached olan değişiklikleri veri tabanına kaydeder.
Cached güncellemesi kullanıcı uygulamalı bir server veri tabanıyla çalışırken çok yaralı olur.
Bu özelliği aktif etmenin yararları şunlardır.
• Daha az iş ve daha kısa iş zamanı
• Network trafiğini minimize etmek
Potansiyel olabilecek zararları şunlardır.
• Kullanıcılar verinin yerel kopyasını düzeltirken ,başka uygulamalar server üzerindeki gerçek veriye erişebilir ve bunu değiştirebilir.
• Başka uygulamalar uygulamaca yapılan değişikliklere cache’teki bilgiler veri tabanına uygulanana kadar veri değişikliklerine ulaşamazlar.
25) -R- CANMODIFY
Bir tablo’ nun temelinde yatan veri tabanının veriye yazma erişimine izin verip vermediğini belirtir.
property CanModify:Boolean;
Veri tabanı bağlantısı yapıldığında bir tablo genelde yazma erişimi ister. Canmodify yazma veya korumanın garantilenmesidir. Eğer true ise veri değiştirilebilir ve ana server kütüğüne yazılabilir. Fakat false ise veri görülebilir ama düzeltilemez
NOT: Eğer canmodify true ise verilen kullanıcı için yazılan kısıtlamalar SQL veri tabanı server’ ına yazmayı engeller.
26) -R- EXPINDEX
Tablo ‘in Dbase açıklama indexi kullanıp kullanmadığını belirler.
Property Expındex:Boolean;
Eğer true ise bir açıklama indexi aktif olur.
27) FILTER
Tablo için aktif filtre metnini belirtir.
Property Filter:Strıng;
Tablo için aktif filtreyi belirtir. Filtreleme çalıştırıldığında uygulamada filtre koşullarına uyan kayıtlar gösterilir. Örneğin aşağıdaki filtreleme koşulu Sehir alanı “ERZURUM” VE “ANKARA” olanları gösterir.
SEHIR=’ERZURUM” OR SEHIR=’ANKARA’
Karakter tabanlı kısmi aramalar için joker karakterini kullanabilirsiniz
Örneğin sehir=’a’
NOT : Uygulamalar çalışma esnasında filtreleme durumunu değiştirmek için ( kullanıcı girişine cevap verilirken ) kullanılır.
28) FILTERED
Filtrelemenin aktif olup olmayacağını belirler.
Property Filtered :Boolean;
Filter özelliğini veya OnFilterRecord olay yöneticisini aktif etmek için bu özelliği true ayarlayın.Filtreleme true iken kullanıcının bir kaydı düzeltmesi demek kaydın filtrenin test koşuluna uygulanmaması demektir.Filtre aktif iken bir sonraki kayıt getirildiğinde kayıt gözükmeyecek .Böyle olursa filtre koşuluna göre erişilen bir sonraki kayıt aktif kayıt olur.
29) FILTEROPTIONS
Filtrelemenin büyük küçük harf duyarlı olup olmadığı ile kısmi karşılaştırmalara izin verilip verilmeyeceğini belirler
TFilterOption = (foCaseInsensitive, foNoPartialCompare);
TFilterOptions = set of TFilterOption;
Property FilterOptions: TFilterOptions
FilterOptions‘ ı foCaseInsensitive yaparsanız tüm olasılıkları denetlemiş olusunuz. FilterOptions’ ı foNoPartialCompare ‘a ayarlarsanız çoklu durumlar ve alanlar için yazılan filtre koşullandırmalarından tam bir sonuç elde edersiniz.
Stringlerde kısmi karşılaştırmayı engellemek için FilterOptions ‘’ı foNoPartialCompare ‘a ayarlayın
30) -R- Handle
Tablo için BDE kursör yönetimini belirtir.
type
HDBICur: Longint;
Property Handle: HDBICur;
Tdataset metotlarını atlamak ve BDE ye direkt çağrı yapmak amacıyla kullanın. Bir çok BDE fonksiyon çağrısı kursör kullanım parametresine ihtiyaç duyar. Tablo açıldığında buna bir başlangıç değeri atanır. Aktif kaydın pozisyonunu değiştiren bir BDE çağrısıyla kullanıldığında Resync yi BDE çağrısından hemen sonra kullanın.
NOT: Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana kadar kullanmayın.
31) -R- DBLOCALE
BDE Dil sürücüsünü tablo öğesi için ayarlar.
type
TLocale: Pointer;
Property DBLocale: TLocale;
BDE ye direk bağlantı yapan uygulamalar API fonksiyon parametresi olarak Dblocale bilgisini göndermek zorunda olabilirler.
NOT: Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana kadar kullanmayın.
32) FILTEROPTIONS
Filtrelemenin string veya karakter alanlar üzerinde büyük küçük harf duyarlı olup olmayacağını ve kısmi kıyaslamaların kayıtları filtrelerken kullanılmasına izin verilip verilmeyeceğini belirtir.
type
TFilterOption = (foCaseInsensitive, foNoPartialCompare);
TFilterOptions = set of TFilterOption;
Property FilterOptions: TfilterOptions
Varsayılan değeri boştur. Karakter alanlardaki filtrelemelerde büyük harf duyarlılığı seçerseniz bütün karakterleri elde etme imkanına kavuşursunuz. Eğer filtrelemeyi birden fazla alan üzerinde yapıyorsanız veya çoklu durum filtrelemesi kullanıyorsanız foNoPart