FİLTER Mİ WHERE Mİ

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

FİLTER Mİ WHERE Mİ

Mesaj gönderen Lord_Ares »

MERHABA,
Firebird te edite yazmaya başladığın anda o harfle başlayanları göstermeye çalışıyorum. Yani table dan bildiğimiz filter özelliği.
Fakat bunu firebird te hangisini ve nasıl kullanmalıyım.
LabeledEdit14 tin onchange kısmına şu kodları yazarak denedim.
bu şekilde bir sonuç alamadım.

Kod: Tümünü seç

IF LabeledEdit14.Text<>'' THEN BEGIN
    DataM.TTURSATIS.Filtered:=FALSE; 
    DataM.TTURSATIS.FilterOptions:=[foCaseInsensitive];
    DataM.TTURSATIS.Filter:='[TURADI]='+QuotedStr(Form1.LabeledEdit14.Text+'*');
    DataM.TTURSATIS.Filtered:=TRUE;
END ELSE DataM.TTURSATIS.Filtered:=FALSE;
bu şekilde de program kırıldı

Kod: Tümünü seç

IF LabeledEdit14.Text<>'' THEN BEGIN
DataM.TTURSATIS.Close;
DataM.TTURSATIS.SelectSQL.Clear;
DataM.TTURSATIS.SelectSQL.Add('select TURADI from TURSATIS WHERE TURADI like '''+LabeledEdit14.Text+'%''');
DataM.TTURSATIS.Open
END ELSE BEGIN
DataM.TTURSATIS.Close;
DataM.TTURSATIS.SelectSQL.Clear;
DataM.TTURSATIS.SelectSQL.Add('select * from TURSATIS' );
DataM.TTURSATIS.Open
END;

ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen ikutluay »

bunu query ile yapmanızı önermem. çok fazla dosya aç kapa ve select oluşacak ve program performansı olumsuz etkilenecektir.

En sağlamı, illede yapacağım diyorsanız tüm kayıtları çekip filtre ile yapın. bu şekilde performans ve trafik etkisi daha az olur
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen Lord_Ares »

en çok uğraştıran kısımda, ibdatase bağlayıpta bilgileri gösterdiğim dbgridi datasource kısmını değiştirip Querye bağlamak tam bir eziyet oluyor.
Forumdan okuyup öğrendiğim kadarıyla ( yanlış anlamadıysam)
Arama işlemleri için ibquery kullanmalıyım
Kayıt ekleme silme işlemlerini yapmak ve kullanıcıya göstermek için ibdataset kullanmalıyım
Ekrana bilgi göstermeyecek işlemler için ibsql kullanmalıyım

Sorun : forma bir dbgirid ekleyip ibdataset ile işlemlere başlıyorsunuz, veritabanında bir arama gerçekleştireceğiniz de Query kullanın dataset tüm bilgiyi çekeceği için zamanla sıkıntı olur denmiş, sizde madem bu işin doğrusu bu deyip dbgridi querye bağlıyor aramadan dönen değerleri gösterip işiniz bittiğinde tekrar ibdatasete bağlıyorsunuz.
Bu ikisi arasında atalanıp duruyoruz :)) paradoxta yaşadığım rahatlığı arar oldum tek bir Query ve dilediğini yap...
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen Kuri_YJ »

Selamlar,

Arama yaptığınız table'ın boyutu nedir? Yani toplamda çekeceğiniz Record sayısı ortalamada nedir? Networkünüz bu trafiği kaldırabilir mi? Eğer problem yok derseniz işlem çok basit.

Kod: Tümünü seç

SELECT ADI, SOYADI, DOG_TARIH
FROM TBL_KISILER
WHERE ADI LIKE :PRM_AD
Delphi tarafında da girilen değeri parametreye şu şekilde geçersiniz,

Kod: Tümünü seç

  qryArama.SQL.ParamByName('PRM_AD').AsString := edtAd.Text + '%' ;
Ama ben şöyle bir yöntem uyguluyorum, Genel bir Query çektikten sonra, Quantum Grid'in filtrelemesini kullanıyorum. Aynı şeyi IBQuery'nin Filter özelliğini kullanarak da manuel bir biçimde siz de yapabilirsiniz.

Ayrıca,

IBQuery'i IBUpdateSQL kullanarak ReadOnly durumdan ReadWrite ve Delete yapabilirsiniz. IBUpdateSQL ile kullanırsanız IBQuery'nin hızından ve Yazma Silme işlemlerinin de kendi kontrolunuzda yürümesinden memnun olacaksınız.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen Lord_Ares »

Kuri_YJ, bilgi için teşekkürler. Kayıt sayım az ortalama aylık kayıt girişi 500 ü geçmez. fakat sorun şurada
formmumdaki dbgrid ibdatasete bağlı. ibquery ile filtrelemeyi gerçekleştirsem, sonuçları dbgridte gösteremeyeceğim.
dbgridin datasource kısmını ibquerye bağlasam , bu seferde kayıt ekleme işlemleri sırasında tekrar ibdatasete bağlamam gerekecek. Bu sürekli böyle gelişen bir konumu, ben mi yanlış kullanıyorum..
Nasıl kullanılmalı doğru olan nedir.. Bu üçlü (ibdataset,ibquery,ibsql) nasıl aynı anda tek bir dbgrid ile kullanılır.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen Kuri_YJ »

Selamlar,

Bir IBQuery'e IBUpdateSQL bağlarsan, IBQuery aynı zamanda IBDataset özelliklerini uygulayabilir. Yani, INSERT UPDATE DELETE EDIT gibi şeyleri yapabilirsin. Dediğim gibi IBUpdateSQL'i araştır. Kabaca, Bir IBQuery nesnesine bir IBUpdateSQL bağlarsan ve IBUpdateSQL'inde, INSERT olduğunda ne yapacağını, DELETE olduğunda ne yapacağını UPDATE olduğunda ne yapacağını ve de REFRESH olduğunda ne yapacağını ayrı ayrı SQL cümleleri ile belirtiyorsun. IBQuery.Insert dediğinde veya IBQuery.Append dediğinde senin adına gidip, IBUpdateSQL'de belirttiğin SQL Cümlesini işletir.

Bu şekilde Query nesnesiyle INSERT, UPDATE, DELETE yapabilir duruma geliyorsun.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: FİLTER Mİ WHERE Mİ

Mesaj gönderen Kuri_YJ »

Selamlar,

Filtreyi denedim çalışıyor. Ancak normal TTable gibi değil. Filtreyi kendiniz kontrol etmelisiniz.

Yani,

Dataset'inizin OnFilterRecord kısmına bir şart düşüyorsunuz o zaman çalışıyor.

Kod: Tümünü seç

  Accept := (Sizin Karşılaştırmanız) ;
OnfilterRecord eventinde, Accept değişkenine, eğer şartınız uyuyor ise True uymuyor ise False yüklerseniz o zaman Filtre çalışıyor.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla