Delphi'de SQL Kullanımı

'RedsCoder

Katılımcı Üye
27 Haz 2015
497
0
SQL komutları yerel DataBase' ler yanında genellikle
Client / Server uygulamalarında yoğun olarak kullanılmaktadır.
Hatta bu kullanım Client / Server uygulamalarında neredeyse
DataBase ile yapılan işlerin tamamını oluşturmaktadır.
Aşağıdaki kod satırında, Delphi içerisinden TQuery
bileşeni vasıtası ile SQL komutlarını
çalıştırmak için kullanılan kod satırı görülmektedir.
Aşağıdaki kod satırı SQL komut satırı yazarken delphi
içerisinde izlenecek temel adımları göstermektedir.

procedure TForm1.Button1Click(Sender: TObject);
begin
a.Query1.Close;
b.Query1.SQL.Clear;
c.Query1.SQL.Add('SQL komut satırları 1,2,3, ... N');
d.Query1.Open;
end;

a. Daha önceden SQL komut satırı açık ise kapatılır, şayet Query1 açık değilse, bu komutu çalıştırmak herhangi bir problem oluşturmayacağı için dosya açık veya kapalı mı ? diye hiç bakmadan en baştan bu komutu yazın. Tablonuz açık veya kapalı fark etmez bu komut işlem başlangıcında tabloyu kapatarak tablo üzerinden yapacağımız işlemler için zemin hazırlamaktadır.
b. İkinci yazacağınız komut satırı Query1.SQL.Clear; olmalıdır. Bu komut satırı önceden Query1 ile çalıştırılmış farklı komut parçacıkları varsa, onları temizlememizi sağlar. Query1.SQL.Clear komutunu da mutlaka çalıştırın çünkü daha önceden kalmış olan komut parçacıklarını temizler. Şayet temizlenmezse, önceden kalmış komut satırları yenileri ile karışarak programınızın düzgün çalışmamasına ve hata vermesine sebep olabilir.
c. Yukarıdaki iki işlemi yaptıktan sonra artık gönül rahatlığı ile her türlü SQL komutlarını yazabilirsiniz. Yukarıda SQL.Add bir satır olarak verdik ama siz yazacağınız komut adedi kadar SQL.Add komut satırını kullanabilirsiniz ya da bir SQL.Add komut satırı ile programda kullanacağınız tüm SQL komutunu yazabilirsiniz. SQL.Add komutunun görevi sadece çalıştırılacak SQL komutlarını bünyesine dahil etmektir. Dahil edeceği komut satırları tırnak işaretleri içerisinde verilir. Yazılan bu SQL komut komutları, SQL.Open komut satırı çalıştırılıncaya kadar hiçbir aktif rol oynamaz.
d. Son olarak ise Query1 bileşenine yüklenen komutları çalıştırarak istenilen sonuca ulaşmanızı sağlayacak olan, Query1.Open komutunu çalıştırmaya geldi. Bu komut satırı ile birlikte sorgulama işlemi için son adımı atarak temel manada SQL Yazım sırasını görmüş olduk.



"Select" Cümleciğinin İncelenmesi


Select komutunun kullanımı MS SQL Server, Oracle, SysBase, hatta yerel tablolarda dahi kullanımı hep aynıdır. Aşağıda yazdığımız komut satırı ile yukarıda bahsi geçen tüm DataBaselerde aynı sonucu elde edebilirsiniz. Select cümleciğinin en temel kullanımı, "SELECT tablodaki değişken adları FROM Tablo isimleri" şeklindedir. Bu komut satırı şartlara göre tablo bilgilerine değişik alternatifler ve sorgulamalar, işe ulaşma yöntemine göre farklı parametreler alır. Bu komut satırı ile kullanılan temel komutlar şöyledir.

a. Select değişken1, değişken2, değişkenN : Tablo içerisinden seçilecek alanların yazıldığı bölümdür. Tablo içerisinden seçilecek alandan kastımız tüm verileri alabilme yanında, istenilen alan bilgilerini alma anlamına geliyor. Şayet bir tablodan tüm alanlar okunacak ise "*" konulur. Bunu yanında istenilen bilgi bir den fazla tablodan alınacak ise, yine tablo işaretçileri kullanılarak birden fazla tablodan rapor elde edilebilir.
b. From Table1, Table2, TableN : Parametre verilen tablo sayısı bu komponent ile ulaşmak istediğimiz tablo sayısına göre değişir.
c. Where sorgu şartları1, sorgu şartları2, sorgu şartları3 : Tablo içerisinde alanlardan birisinde belirli özellikleri sağlayan kayıtlara ulaşmak istediğimiz zaman başvuracağımız satırdır. Yine buraya da bir çok şart yazabiliriz. Şayet ulaşmak istediğimiz kayıtlarda belirli bir özellik gözlemeden tüm kayıtlara ulaşmak istiyorsak, bu satırı kullanmamıza gerek yoktur. Sorgu şartlarında aşağıdaki operatörleri kullanabilirsiniz.



= Eşitlik Operatörü
> Büyüklük Operatörü
>= Büyük Eşit Operatörü
< Küçük Operatörü
!= Eşit Değil Operatörü


bu operatörler yanında iki değer arası kayıt için Between ... And ... değişken içerisinde geçen herhangi bir In (liste) şartla bir bölümü uyan kayıtlar için Like vs. olmak üzere çeşitli operatörleri kullanabilirsiniz.
GROUP BY gruplanacak değişken ismi: Belirli alanlara göre verileri gruplamak maksadıyla kullanılır.
HAVING gruplanacak veri şart bölümü : grupla ilgili şart bölümüdür. ORDER BY değişken1, değişken2, değişkenN (ASC, DSEC): parametrede verilen değişkenler doğrultusunda istenilen verileri sıralayarak getirir. Bu sıralamada değişken sayısı arttıkça, sıralama şekli ilk önce birinci değişken daha sonra ikinci ve diğerleri olmak üzere sıralama mantığı kullanılır. Ayrıca bu değişkenden sonra verilecek ASC veya DSEC komutları ile sıralamanın yönleri büyükten küçüğe veya küçükten büyüğe yöneltilebilir.
ORDER BY Adı, Soyadi DESC // bu satır önce isim ve isim altıda soy isim olmak üzere tersten sıralama yapar.
örnek 1: Varolan bir Personel tablosundan Personelin Tüm bilgilerini SQL komutları şart' a bağlı olmadan okuyalım.

procedure TForm1.Button2Click(Sende: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From personel');
Query1.Open;
end;


Yukarıda Where yazılmadığı için tüm kayıtların hepsini ifade
ediyor. Ayrıca parametre olarak da "*" kullanıldığı için personel
tablosundan tüm bilgilerin alanların sorgulanacağını ifade eder.

örnek 2: Personel listesinden bilgi işlem departmanında bulunan elamanların adını soyadını ve işe geliş saatlerinin listesini almak isteyelim.

procedure TForm1.Button3Click(Sender: TObject);
begin
With Query1 Do
Begin
Query1.Close;
SQL.Clear;
SQL.Add('SELECT adi, soyadi, Departman, MesaiBaslangic From personel);
SQL.Add('Where Departman="Bilgi işlem"');
Query1.Open;
End;
end;
 

DVi

Yeni üye
10 May 2008
4
0
Hocam çok teşekkürler..
SQL ile ilgili Delphi XE8'de karşılaştığım bir sıkıntıya çözüm arıyorum.. Belki sizin bir öneriniz olabilir..
Sorun şu: ADO Query ile değişken bir sorgu çalıştırıyorum, fakat sorgunun SQL'den dönüşü epey uzun sürüyor (bazen 1 dk, bazen 5 dk, kayıt sayısı arttıkça süresi uzuyor).. Ve bu sorgunun çalıştırıldıktan sonra, program sorgu bitene kadar donuyor, Not Responding'e düşüyor.. Lütfen bekleyin gibi animated gif filan koymuştum ama tabii animasyon falan da hikaye oluyor, çaıştıramıyor çünkü..
Bir Timer koyup 2-3 sn aralarla Application.Processmessages yapmayı filan denedim, ama timer bile çalışamıyor o sorgu bitmeden..
Aslında Threaded SQL yapabiliyorum ama diğer bir sorun da, bu sorgudan gelecek sonucun ekranda da cxGrid içinde gösterilmesi gerektiği.. O yüzden threaded yapsam da program çalışması düzeliyor ama bu sefer dataset olarak kullanamıyorum..
Dolayısıyla çok sıkıntılı bir durum oluşuyor..
Bu sorunu çözebilmek için bir önerileriniz, tavsiyeniz olabilir mi? Ya da ADOQuery yerine başka kullanılabilecek component var mıdır?
Teşekkürler..
 

Black Viking

Kıdemli Üye
13 Şub 2016
2,005
1
[vkng@vkng~]
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.