veritabanında arama

crazygirl919
30-12-2008, 11:39   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
6 mesaj
Kayıt Tarihi:Kayıt: Ağu 2008

meraba arkadaslar emlak otomasyonu yapaıyorum ve arama kısmında takıldım.

mesala combobox1 in degerleri: farketmez,kiralık,satılık şeklinde.

eger kullanıcı farketmez secerse hem kiralık hem satılık evleri gosterecek.eger kullanıcı kiralıksecerse sadece kiralık evleri gosterecek...

aynı diğer comboboxlarda da farketmez secenegi ve diğer degerleri var. tek tek iflerler hangisi farketmez olarak secili diye arama yapınca 7 alanım oldugu için 7nın tum kombınasyonlarını yazmak zorunda kalıyorum.bunu kısa bir şekilde nasıl yaparım? veritabanı olarak dephinin kendi veritabanını kullanıyorum.

ornek kod://birli kombinasyonalrdan biri

if (radiobutton3.Checked) and (combobox1.Text='FARKETMEZ') and (combobox3.Text='FARKETMEZ') and (combobox4.Text='FARKETMEZ') and (combobox5.Text<>'FARKETMEZ') and (edit1.Text='FARKETMEZ') and (edit2.Text='FARKETMEZ') then
begin
Query1.SQL.Clear ;
Query1.SQL.Add('Select * from kayitlar Where ISITMA =:a') ;
Query1.ParamByName('a').AsString := combobox4.Text;
Query1.Open;
end;

Kapalı Hesap (79876)
01-01-2009, 02:43   |  #2  
Kapalı Hesap
Teşekkür Sayısı: 0
1,252 mesaj
Kayıt Tarihi:Kayıt: Tem 2008

Şimdi hepsi farketmez olunca arama yapmıyacak sadece kayıtları gösterecek. bir sitringe aranacak ifadeyi ekleyerek sonucu bulabiliriz.

[ Tüm kodu seç ] [ Yeni Pencerede Göster ]
var s:string; begin //button click olayının Query1.SQL.Clear; s:='Select * from kayitlar Where 1=1 '; if combobox1.Text<>'FARKETMEZ' then begin s:=s+'and EMLAKTURU=:EML '; Query1.ParamByName('EML').AsString:=combobox1.Text; end; if combobox2.Text<>'FARKETMEZ' then begin s:=s+'and ISITMA=:ISIT '; Query1.ParamByName('ISIT').AsString:=combobox2.Text; end; if combobox3.Text<>'FARKETMEZ' then begin s:=s+'and ODA=:ODA '; Query1.ParamByName('ODA').AsString:=combobox3.Text; end; if combobox4.Text<>'FARKETMEZ' then begin s:=s+'and FIYAT=:FIY '; Query1.ParamByName('FIY').AsString:=combobox4.Text; end; Query1.SQL.Add(s); Query1.Open; end;
Bir stringle çalıştım  kodda "1=1" ifadesi dikkatini çekmiş olabilir.Bir anlamı yok  ama  aşağıdaki kontrol işlemlerinin ne olacağını kestiremediğimzden hatadan kaçmak için böyle birşey düşündüm. Kodu incelersen hangileri "farketmez" değilse "s"  değişkenine yeni bir arama ifadesi ekliyor.
Radio buttonunun görevini bilmediğim için onu kullanmadım. Form tasarımının bir resmini çekip gönderseydin daha anlaşılır olacaktı.
Tablonda  emlakturu, ısıtma, oda, fiyat olduğunu varsaydım  sen kendi tablona göre düzenle.

Bir tavsiyede bulunayım formuna koyduğun her nesneye kullanmadan isim ver. üşengeçlik etme mesela cbEmlakTuru gibi kısaltmalarla.

eof-

Son Düzenleme: Kapalı Hesap (86020) ~ 01 Ocak 2009 02:59
crazygirl919
01-01-2009, 15:06   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
6 mesaj
Kayıt Tarihi:Kayıt: Ağu 2008

çok tesekkur ederım bende sonradan bu sekılde yapmıstım;)

Kapalı Hesap (79876)
01-01-2009, 16:50   |  #4  
Kapalı Hesap
Teşekkür Sayısı: 0
1,252 mesaj
Kayıt Tarihi:Kayıt: Tem 2008

Sende sağol delphide Query kullamını unutmak üzereydim hatırladım şimdi.
projende Query kullanman güzel table nesnesi kullansaydın daha kolay yapılırdı ama sql daha gelişmiş filtreleme sıralama gibi birçok  özelliğe sahip.

Kod daha da kısaltılabilir istersen ama sadece 7 alanın var gerek yok.