SQL Notları
Giriş Yap Tema Rengi Konu Mesaj Üyeler
Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.
Kullanıcı Adı:
Şifre:

11201 22438 Toplam üye: 17949
Son üye: caprese
 
Ana Sayfa Yardım Arcade Giriş Yap Kayıt
 

Reklamlar
Konu Bilgileri
Konu BasligiKonu: SQL Notları
Cevap SayisiCevap Sayisi: 0 cevap var
Okunma SayısıOkunma Sayısı 95 defa
Bu Konuyu Görüntüleyenler0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Sayfa: [1]   Aşağı git
  Yazdır  
Gönderen Konu: SQL Notları  (Okunma Sayısı 95 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
borlandx
siberTurk
*

KARMA: 1152
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 175

Konu Sayısı: 145


Aktiflik

Deneyim
Seviye
Kötü İtibar

WWW
« : 21 Ağustos 2008, 19:31:32 »

   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 art-maktadı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üve-nilirlik 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 önem-lidir çü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 e-debiliriz...”


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. Sor-gulama 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ık-ları 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 ve-rimli programlar üretmemize yardımcı olacaktır. Delphi’ de SQL cümleciklerini veri tabanına gön-dermek 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 e-dilmesi) 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 (Uy-sal,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 şe-killeri de yer yer verilmekle birlikte asıl olarak Delphi’ deki kullanımına değinilecek ve asıl sorgu nes-nesi olan Tquery incelenecektir.  Tquery nesnesinin özellikleri ve metotları ayrıntılı olarak anlatıla-cak 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 program-lama 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 si-lahların gücünü, kapasitesini bilmeyen bir devletin  savaşa girmesine benzer. Tabii ki bu devletin sa-vaşı 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 edebi-lecek 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 ba-kımından sadece Tquery nesnesi ve SQL ile ,süre açısından sadece bu konuyla ilgilenilmemekle birlik-te 7 ay ile sınırlıdır.

   
TANIMLAR

Alias         : Takma ad .Database kofigurasyon bilgisini özel bir  ta            veri ta-banı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          özellikleri 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 tara-ması 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, semi-ner , 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 kul-lanılmıştır.

Taranan kaynakların büyük bir kısmı İngilizce olduğundan bu bilgilerin Türkçeye çevrilmesi gerek-miş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 nes-nesiyle 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 ça-lış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ın-dan 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ın-da taşınabilirliği (portability), açık sistem mimarisini destekleme gibi çeşitli açılardan büyük yararla-rı vardır.

Bütün bunlarla birlikte SQL ‘deki eksiklikler geliştirmecileri bu konudaki yeni eklemelere ve gelişme-lere 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 ye-rine 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 bek-ler.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 şekille-rini 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 ) ola-bilir . Ö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 listesi-ni 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 ve-rir.
   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ğıda-ki 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 bir-likte 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şul-landı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 kullana-rak çı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ı durumla-rı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 fonk-siyonlarına izin verilmez
•   From cümleciğinde referans edilen tablo hem güncellenebilir taban tablosu veya güncellenebi-lir 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 kay-bolması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 hesaplan-ması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 se-viyedeki 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ıra-lamak 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(Cool  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 o-luş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 ba-samaklar.

   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ümle-ciğ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 taba-nı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 tabanla-rı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 ve-rilmeyeceğ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ımla-yan kontrol koşullarını destekler. Bu nesne verilen alana etki eden kontrol koşullarının toplamını sak-lamaktadır

    2)  DATASOURCE

Aktif alan  değerlerini veri tabanından alarak SQL ifadesinde kullanmayı sağlayan DataSource öğe-sini 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. Parametre-ler Query’ nin Prepare metoduyla çalıştırılırlar.

İpucu : DataSource’ u özellikle linklerde master-detail ilişkisinde kullanın. Aynı zamanda Params se-tinde 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  sa-yı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 ko-lay 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 ifadele-rinde 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ştire-bilir. 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 meto-dunu çağırmak demektir. Genelde Prepare ve Unprepare ‘ı direkt olarak çağırmak daha iyi bir prog-ramlama tekniğidir.

   Cool  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 a-yarlayı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. Yal-nızca BDE ‘nin bu seti döndürmek için çalışacağını garantiler .BDE yalnızca  Select yazılımı canlı so-nuç 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. Para-metreler 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 du-rumlarda 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 ayar-la. 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 ola-rak 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. Otu-rum 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ı uygu-lamaları 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ı uy-gulamaları 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ı uy-gulamaları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şkilendi-rilir.

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 tamam-landığı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 veri-ye 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 ko-rumanın garantilenmesidir. Eğer true ise veri değiştirilebilir ve ana server kütüğüne yazılabilir. Fa-kat 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ıt-lar 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 ayarla-yın.Filtreleme true iken kullanıcının bir kaydı düzeltmesi demek  kaydın filtrenin test koşuluna uygu-lanmaması demektir.Filtre aktif iken bir sonraki kayıt getirildiğinde kayıt  gözükmeyecek .Böyle o-lursa 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 verilme-yeceğ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ın-dan 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 fonksi-yon ç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 ka-dar 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ön-dermek zorunda olabilirler.
NOT:    Bu fonksiyonu BDE fonksiyonel olarak standart Delphi öğeleri üzerinde etkili olamayana ka-dar 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 ya-pıyorsanız veya çoklu durum filtrelemesi kullanıyorsanız foNoPartialCompare seçeneğini  true işa-retleyin

NOT :Kısmi karşılaştırmaya dayanan filtrelemelerde FoNoPartialCompare ı true yapmaya gerek yoktur.
Bunun yerine joker karakterleri kullanın .

Örneğin
Sehir=’A’
Sehir ad
Logged

   
Sayfa: [1]   Yukarı git
  Yazdır  
 
Gitmek istediğiniz yer: