If Query1.RecordCount>0 Then hatası ?

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen ender_arslanturk »

Selâmlar,

Query SQL Kodu

Kod: Tümünü seç

Select* From Cevap Where ID>0
and (
Contains(Soru , '*Allah*') or Contains(Cevap, '*Allah*') or 
Contains(Soru , '*Allahın*') or Contains(Cevap, '*Allahın*') or 
Contains(Soru , '*Allah''ın*') or Contains(Cevap, '*Allah''ın*') or 
Contains(Soru , '*Allah'' ın*') or Contains(Cevap, '*Allah'' ın*') or 
Contains(Soru , '*isimleri*') or Contains(Cevap, '*isimleri*') or 
Contains(Soru , '*nelerdir*') or Contains(Cevap, '*nelerdir*') 
)
Geliştirdiğim bir İslâm'i proje de; SQL de, üstte ki kodu yazdığımızda sorgu bileşeni query open yapıyor. Fakat

Kod: Tümünü seç

If Query1.RecordCount>0 Then
satırına geldiğinde donuyor.

Open sonrasına showmessage mesajı ile open yaptığını görebiliyorum. ama ondan sonra gelen if kontrolünün yine sonrasına showmessage ı vermiyor.

Fakat sql de sadece

Kod: Tümünü seç

Select* From Cevap Where ID>0 
dediğimde çalışıyor. Delphi XE, Advantage Veri Tabanı bileşenleri ile sorgumu gerçekleştirmekteyim.

Procedure kodu

Kod: Tümünü seç

        AdsQuery1.Open;
        ShowMessage('1')

        If AdsQuery1.RecordCount>0 Then //Burada donuyor. :s
        ShowMessage('2');
Bu durumda ne yapmam gerekiyor ?
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen ender_arslanturk »

Veritabanında hemen hemen 15000 kayıt var ve sorgu sonucu 438 kayıt olarak dönüyor.

Donma bir süre olmakta ondan sonra mesajı gösteriyor.

Acaba sorguyu hızlandırabilecek ne yapabilirim ?
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen akdatilla »

Merhaba
RecordCount kullanmamak avantaj sağlayabilir.
bir while döngüsü ile kayıtları okuyabilirsin.
if kontrolü olarakta

Kod: Tümünü seç

if not AdoQuery1.Eof then
begin
end;
şeklinde kayıt varlığını kontrol edebilirsin.
RecordCount fonksiyonu bütün kayıtların okutulmasını gerektirir.
İşinizde başarılar dilerim, kolay gelsin.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen ender_arslanturk »

akdatilla yazdı:Merhaba
RecordCount kullanmamak avantaj sağlayabilir.
bir while döngüsü ile kayıtları okuyabilirsin.
if kontrolü olarakta

Kod: Tümünü seç

if not AdoQuery1.Eof then
begin
end;
şeklinde kayıt varlığını kontrol edebilirsin.
RecordCount fonksiyonu bütün kayıtların okutulmasını gerektirir.
İşinizde başarılar dilerim, kolay gelsin.
teşekkür ederim. Bunu deneyeceğim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen sabanakman »

Yazılım işinde yollar tükenmez, bu da başka bir yöntem :) ..:

Kod: Tümünü seç

if not Query1.IsEmpty then
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen SimaWB »

sabanakman yazdı:Yazılım işinde yollar tükenmez, bu da başka bir yöntem :) ..:

Kod: Tümünü seç

if not Query1.IsEmpty then
IsEmpty fonksiyonunun tanımına baktığımızda :

Kod: Tümünü seç

function TDataSet.IsEmpty: Boolean;
begin
  Result := FActiveRecord >= FRecordCount;
end;
içerisinde yine RecordCount çağrıldığı için ender_arslanturk'ün sorunu aynen devam edecektir...
There's no place like 127.0.0.1
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen ender_arslanturk »

Kod: Tümünü seç

if not AdoQuery1.Eof then
or

Kod: Tümünü seç

if not AdoQuery1.Bof then
İlk ve Son kayıt kontrolü işe aradı.. Herke(s)(z)e teşekkürler.. :)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen sabanakman »

Bazı tablolar, ayarlandıkları özelliklere göre kayıtların hepsini birden çekmezler, tablo açılır ama kayıtlar arka plandan gelmeye devam eder veya ilgili kayda eriştikçe grup grup kayıt çeker. Mesela bir milyon satırlık select * from tablo sorgusu yaklaşık bir dakika sürsün. Bu ayarda olan tablo aktif edildiğinde her hangi bir bekleme yapmadan tabloyu açabilir ama kayıtların hepsi birden o anda hazır değildir, kayıtlar arka plandan gelmeye devam eder. Haliyle RecordCount özelliğinin doğru çalışması için bütün kayıtların tablo tarafından açılmış olması gerekmektedir, zaman kaybı da bu kayıtların hazırlanması aşamasından kaynaklanmaktadır. Başta belirttiğim özellikte çalışan yapıda bir DataSet ise kayıtları grup grup çekmektedir. Bir adet kayıt bile çekemeyen bir Dataset'in property'lere bağlanmamış herhangi bir metot çalıştırmayan sadece değer tutan değişkenlere bağlı (FActiveRecord >= FRecordCount ) şartı herhangi bir performans kaybı yaşatmayacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: If Query1.RecordCount>0 Then hatası ?

Mesaj gönderen ender_arslanturk »

sabanakman yazdı:Bazı tablolar, ayarlandıkları özelliklere göre kayıtların hepsini birden çekmezler, tablo açılır ama kayıtlar arka plandan gelmeye devam eder veya ilgili kayda eriştikçe grup grup kayıt çeker. Mesela bir milyon satırlık select * from tablo sorgusu yaklaşık bir dakika sürsün. Bu ayarda olan tablo aktif edildiğinde her hangi bir bekleme yapmadan tabloyu açabilir ama kayıtların hepsi birden o anda hazır değildir, kayıtlar arka plandan gelmeye devam eder. Haliyle RecordCount özelliğinin doğru çalışması için bütün kayıtların tablo tarafından açılmış olması gerekmektedir, zaman kaybı da bu kayıtların hazırlanması aşamasından kaynaklanmaktadır. Başta belirttiğim özellikte çalışan yapıda bir DataSet ise kayıtları grup grup çekmektedir. Bir adet kayıt bile çekemeyen bir Dataset'in property'lere bağlanmamış herhangi bir metot çalıştırmayan sadece değer tutan değişkenlere bağlı (FActiveRecord >= FRecordCount ) şartı herhangi bir performans kaybı yaşatmayacaktır.
Hocam açıklayıcı bir bilgiydi. Teşekkür ederim..
Cevapla