IBQuery

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

IBQuery

Mesaj gönderen Fatih! »

Veritabanı tablolarına ulaşmak için en çok kullanılan bileşenlerden biridir. Veritabanından tabloyu bu bileşenin SQL özelliğine yazacağımız SQL cümlesiyle tabloları Delphide Listeliyoruz.
Object Inspector’dan Bileşenin SQL özelliğine tıkladığınızda Select * From TabloAdiniz yazdıktan sonra Active özelliğini True yaptığınızda Tablodaki Veriler Listelenecektir.
SQL özelliğine aşağıdaki gibi bir kod yazarsanız kayıtlar belirttiğiniz alan adına göre sıralı şekilde listelenecektir.

Kod: Tümünü seç

Select * From TabloAdiniz
Order By AlanAdiniz
SQL özelliğine aşağıdaki şekilde Çalışma Zamanında SQL cümlesi ekleyebilirsiniz.

Kod: Tümünü seç

IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz’);
yukarıdaki komut verdiğiniz SQL Cümlenisini IBQuery Bileşeninin SQL özelliğinin sonuna bu sorguyu ekler. Bu sebeple Bileşenin SQL özelliğinde daha önce yazılmış bir Sorgu varsa hata vermesine sebep olacaktır. Bunu engellemek için IBQuery’nin içinde bulunan sorguyu yeni sorguyu eklemeden temizlememiz gerekir. Bunun için kodumuz şu şekilde olmalıdır.

Kod: Tümünü seç

IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz Order By AlanAdiniz’);
Sorgunun hepsini tek satırda toplamak zorunda değilsiniz
IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz’);
IBQueryAdiniz.SQL.Add(‘Order By AlanAdiniz’);
Kodumuzun çalışabilmesi için Open metoduyla IBQuery Bileşenini Active etmemiz gerekmektedir. Ayrıca açık olan IBQuerye müdahale ederseniz hata verecektir bunun için SQL Özelliğine herhangi bir değer atamadan önce Close metoduyla IBQueryi kapatmalısınız.
kodumuz tam olarak aşağıdaki şekilde olacaktır.

Kod: Tümünü seç

IBQueryAdiniz.Close;
IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz’);
IBQueryAdiniz.SQL.Add(‘Order By ADI’);
IBQueryAdiniz.Open;
Yukarıdaki Kodda IBQuery içindeki tüm sorguyu değiştirmek yerine orday by metodunun bulunduğu satırı değiştirmek isteseydik aşağıdaki gibi bir kod kullanırdık.

Kod: Tümünü seç

IBQueryAdiniz.Close;
IBQueryAdiniz.SQL. Strings[1]:=' Order By SOYADI ';
IBQueryAdiniz.Open;
Gördüğünüz gibi burada Clear metodu kullanmadık. Çünkü IBQuery Bileşeninin SQL özelliğinin Sonua değil order by komutunun bulunduğu satırı değiştirdik. 1. satır 0 (sıfır) olarak kabul edilir. Her iki şekilde de sorgu iki tırnak işareti arasıda yazılmalı.
Aşağıdaki şekilde şartlı bir sorgunuz olduğunu varsayarsak

Kod: Tümünü seç

Select * From TabloAdiniz Where ADI=’Fatih’
Sorgulamadaki Fatih şartı String bir tipte olduğu için iki tırnak arasına almalıyız. Bu tarih verileri içinde gereklidir.
Buradaki Fatih yerine Edit vb. bileşenlerden alınacak bir parametre olarak kullanmak isteseydik aşağıdaki şekilde kullanırdık.

Kod: Tümünü seç

IBQueryAdiniz.Close;
IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz Where ADI=’+#39+Edit1.Text+#39);
IBQueryAdiniz.Open;
Buradaki #39 işareti tırnak işareti anlamına geliyor.yukarıda anlattığım gibi string tipler iki tırnak arasında olmalıdır. Tırnak yerine ascii kodunu kullanmamın sebebi tırnak işaretlerinin karışmamasını sağlamak. Böylece aklımız bulanmaz :)
IBQuerynin SQL özelliğine Delphiden değer fgöndermenin bir diğer yolu ise ParamByName metodudur.
Sorgu aşağıdaki şekilde bir sorgumuz olduğunu varsayalım.

Kod: Tümünü seç

Select * From TabloAdiniz Where ADI=:ParamAd
paramAd yerine istediğiniz ismi seçebilirsiniz. Dışarıdan girilecek bir parametre olduğunu göstermek için parametre adı önüne iki nokta üst üste (:) bnişareti konur. Bu şekilde istediğiniz kadar parametre kullanabilirsiniz.
Aşağıdaki örnek kullanımını inceleyerek Diğer özelliklerine geçelim.

Kod: Tümünü seç

IBQueryAdiniz.Close;
IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz Where ADI=:ParamAd’);
IBQueryAdiniz.ParamByName('ParamAd').Value:=Edit1.Text;
IBQueryAdiniz.Open;
Özellikleri

AutoCalcField > False yapılırsa Delphi Tarafından oluşturulmuş Calculated alanlar görevini yerie getirmez.

CacheUpdate Ve UpdateObject özellikleri için IBUpdateSQL bileşeninin kullanımına bakın.

ForceRefresh > True yapılırsa Kayıt her post edildiğinde Tabloyu Refresh yapar.

Olayları



AfterCancel > Cancel Metodu Görevini Yaptıktan sonra meydana gelir.

AfterClose > DataSetiniz Kapandığı Zaman meydana gelir. Yani IBQueryAdiniz.Close; Komutu kullanıldıktan Sonra Meydana Gelir

AfterDatabaseDisConnect > Database İle Bağlantı Kesildikten sonra meydana gelir.

AfterDelete > Kayıt Silindikten Sonra Meydana Gelir. Örneğin bu olayda Transactionu Cimmit ederek tabloların anında tabloya yansımasını sağlayabilirsiniz.

AfrterEdit > Tablo Düzenleme moduna girdikten sonra meydana gelir.

AfterInsert > yeni kayıt eklendiği zaman meydana gelir. Diyelim formunuzda bir dbcheckbox bileşeni var ve siz varsayılan olarak bunun işaretsiz olmasını istiyorsunuz. Bu olada ilgili alana false vb. değeri atayarak işaretlenmemiş bir şekilde görünmesini sağlayabilirsiniz.

AfterOpen > Tabloyu açtığınız zaman meydana gelir. Diyelim bir sorgulama yapıyorsunuz ve sorgu sonucunda statusbar vb. bir bileşene kaç kaydın listelendiğini yazmak istiyorsunuz. Bu işlemi buraya yazmak işinizi kolaylaştıracaktır.

AfterPost > Kayıtlar tabloya gönderildikten sonra meydana gelir. Ben genelde Transactionu commit etmek için kullanırım.

AfterRefresh > Tabloya Refresh (yenile) yapıldığı zaman meydana gelir.

AfterScroll > Kayıtlar arasında dolaşırken meydana gelir. Örneğin Veritabanına resmi kaydetmediyseniz Harddiskinizden alırken Veritabanındaki kayıtlarla aynı anda gösterebilmenizi sağlar.

AfterTransactionEnd > Transaction modundan çıktığı zaman meydana gelir.

BeforeCancel > Cancel Metodu Görevini Yapmadan önce meydana gelir.

BeforeClose > DataSetiniz Kapanmadan meydana gelir.

BeforeDatabaseDisConnect > Database İle Bağlantı Kesilmeden önce meydana gelir.

BeforeDelete > Kayıt Silinmeden önce Meydana Gelir. Bu olayda kullanıcıya mesaj penceresiyle silip silinmemesi konusunda emin olup olmadığını sorabilirsiniz. Kullanıcı silmekten vaz geçerse SysUtils.Abort; komutuyla silme işlemini iptal edebilirsiniz.

BeforeEdit > Tablo Düzenleme moduna girmeden önce meydana gelir.

BeforeInsert > yeni kayıt eklenmeden önce meydana gelir. Diyelim bir demo program yazdınız ve 10 kayıttan fazla girilmesini istemiyorsunuz. Bu olayda kayıt sayısını kontrol edin ve 10 veya 10’dan fazla kayıt varsa yine SysUtils.Abort; komutuyla işlemi iptal edip kayıt girilmesini engelleyebilirsiniz.

BeforeOpen > Tabloyu açmadan önce meydana gelir.

BeforePost > Tabloya kayıt gönderilmeden önce meydana gelir. Burada bir alanın boş geçimlesini istemiyorsanız. Alanın dolu olup olmadığını kontrol edebilir. İsterseniz kayıtların tabloya gönderilmesini engelleyebilirsiniz.

BeforeRefresh > Tabloya Refresh (yenile) yapılmadan önce meydana gelir.

BeforeScroll > Bir kayıttan diğer kayda hareket etmeden önce meydana gelir.

BeforeTransactionEnd > Transaction modundan çıkmadan önce meydana gelir.

OnCalcFields > Calculated (Hesaplanmış) alanların hesaplayacağı değerler bu olaya yazılır.

OnDeleteError > Silme İşleminde hata meydana geldiği zaman oluşur.

OnEditError > Kaydı Düzenlerken hata meydana geldiği zaman oluşur.

OnFilterRecord > Kayıtları Filtrelerken Meydana Gelir.

OnNewRecord > AfterInsert gibidir.

OnPostError > Kayıt Tabloya gönderilirken hata meydana geldiği zaman oluşur.

OnUpdateError > Kayıt güncellenirken hata meydana geldiği zaman oluşur.

OnUpdateRecord Z Kayıt güncellenirken meydana gelir

Bileşen olaylarına iyi çalışmanızı öneririm. İşlerinizi kolaylaştırabilirler.
Cevapla