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..
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;
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.
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. - .
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
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 !!!
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.
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..