SQL birden fazla alanda arama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

SQL birden fazla alanda arama

Mesaj gönderen Lord_Ares »

Merhaba,
Firebird veritabanında Rakamlar adında 10 alandan oluşan bir tablom var. Bu tabloda R1, R2 gibi 6 adet alanım bulunuyor. Bu altı alan içinde 23 rakamını aramak varsa kaç adet olduğunu almak istiyorum. Bunun için aşağıdaki şekilde denedim fakat sonuçlar yanlış çıktı. Toplamda 76 adet 23 çıkması gerekirken 50 Adet çıkıyor. Birden fazla alan üzerinde arama şeklim mi yanlış ? Nasıl aramalıyım..

Kod: Tümünü seç

 
      with Form1.QDENEME do begin
          SQL.Clear;
          SQL.Add('Select * FROM RAKAMLAR');
          SQL.Add('WHERE R1= :RAK or R2= :RAK or R3= :RAK');
          ParamByName('RAK').AsInteger :=ARANAN;
          Open;
          Form1.Caption:= IntToStr(Form1.QDENEME.RecordCount);
     end;

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3057
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL birden fazla alanda arama

Mesaj gönderen sabanakman »

declare ile değişken tanımlayıp tek parametreyle onu ayarlayarak kullanmayı deneyin. SQL Server üzerinde aşağıdaki şekilde kullanım mümkündür ama FireBird tarfında durum farklı mıdır bilemiyorum.

Kod: Tümünü seç

 
      with Form1.QDENEME do begin
          SQL.Clear;
          SQL.Add('declare @RAK int');
          SQL.Add('set @RAK=:RAK');
          SQL.Add('Select * FROM RAKAMLAR');
          SQL.Add('WHERE R1= @RAK or R2= @RAK or R3= @RAK');
          ParamByName('RAK').AsInteger :=ARANAN;
          Open;
          Form1.Caption:= IntToStr(Form1.QDENEME.RecordCount);
     end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL birden fazla alanda arama

Mesaj gönderen Lord_Ares »

Teşekkürler üstadım bir deneyip sonucu gözlemliyeyim. İnşallah olur..

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2195
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL birden fazla alanda arama

Mesaj gönderen freeman35 »

sql string olarak her seferinde oluşturulacaksa, parametre kullanmak mantıksız. Sadece tarih için kullanılabilinir, oda convert sırasında format sorunu yaşama ihtimaline karşılık

Kod: Tümünü seç

with Form1.QDENEME do begin
          SQL.Clear;
          SQL.Add('Select * FROM RAKAMLAR');          
          SQL.Add('WHERE R1=' +Aranan.ToString +' or R2= ' +Aranan.ToString +' or R3= ' +Aranan.ToString);
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL birden fazla alanda arama

Mesaj gönderen Lord_Ares »

Her iki yapıyı da denedim, 3 alan üzerinde toplamda 76 kayıt bulması gerekirken 50 kayıt buldu. İşin ilginç yanı And yapısı ile 3 alanda arama yaparsam boş sonuç döndü. Or ile kullandığımda bulunan kayıt sayısı eksikti. Acaba sorun nerde :))) Sanırım birden fazla alan üzerinde yapmaktansa tek tek tüm alanlarda yapmak daha doğru sonuç verecek.

yusuf simsek
Üye
Mesajlar: 317
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: SQL birden fazla alanda arama

Mesaj gönderen yusuf simsek »

R1, R2 ve R3 alanları içerisinde NULL değer varmı kontrol edebilir misiniz... Varsa "0" olarak güncelleyip tekrar sonucu kontrol eder misiniz!

ilaveten Şartları Parantez içine alıp tekrar deneyebilir misinimiz?

Kod: Tümünü seç

WHERE ( R1= :RAK ) or ( R2= :RAK ) or ( R3= :RAK )
OR ile yapılan aramalarda bazan firebird'in kafası karışabiliyor :)

Bir Üstadımın dediği gibi, "MANTIKSIZ SORUNLARA MANTIKSIZ ÇÖÖZÜMLERLE YAKLAŞMAK LAZIM!"
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2195
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL birden fazla alanda arama

Mesaj gönderen freeman35 »

AND ile hiç kayıt gelmemesi normal, koşulların hepsinin sağlanması lazım. Table da ki field tipin nedir? oda intigerdan farklı değildir umarım
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL birden fazla alanda arama

Mesaj gönderen Lord_Ares »

Null alan hiç yok tüm alanlar integer. Or ile çıkan sonuç sayısının eksik olması da ilginç. Test için her üç alana aynı bilgileri girip denedim sonuç aynı ya gözümden birşey kaçıyor yada fribird dediniz gibi uçtuuu :))) Yeni bir veritabanı oluşturup test edeyim..

mehmetantalya
Üye
Mesajlar: 187
Kayıt: 30 Eyl 2013 10:17

Re: SQL birden fazla alanda arama

Mesaj gönderen mehmetantalya »

recordcount ise donen kayit sayisini kontrol etmek yerine sql kodu icerinde

Kod: Tümünü seç

Select count(id) FROM RAKAMLAR
gibi bir sorgu ile donen kayda bakabilir misiniz.

Cevapla