Arşiv Anasayfa Firebird / Interbase
Sayfalar: 1
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  Smile
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 (Smile 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;


Ö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.
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.