IBQuery Gönderen: Fatih Tarih: 08 October 2005 15:59:49
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.
Select * From TabloAdiniz
Order By AlanAdiniz
SQL özelliğine aşağıdaki şekilde Çalışma Zamanında SQL cümlesi ekleyebilirsiniz.
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.
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.
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.
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
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.
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.
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.
IBQueryAdiniz.Close;
IBQueryAdiniz.SQL.Clear;
IBQueryAdiniz.SQL.Add(‘Select * From TabloAdiniz Where ADI=:ParamAd’);
IBQueryAdiniz.ParamByName('ParamAd').Value:=Edit1.Text;
IBQueryAdiniz.Open;
ÖzellikleriAutoCalcField > 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.
Ynt: IBQuery Gönderen: clayhuseyin Tarih: 22 May 2007 21:16:55
Fatih kardeş verdiğin cevap için sağolasın ben Dateset kullanıyorum ve orda CaxhedUpdates sekmesini True olması lazımmış olay tammadır. Teşekkur ederim.
Ynt: IBQuery Gönderen: FetihlerFatihi Tarih: 23 May 2007 12:16:59
Rica ederim. IBDataSet'te bu özelliği kullanmak zorunda değilsiniz.