3 Alanlı Arama Yapmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
3 Alanlı Arama Yapmak
Merhabalar herkese;
Arama yapmada problem yaşıyorum:
Ekranımda 3 farklı alana göre arama yapmak üzere edit kontrolleri yerleştirdim: Ad, Soyad ve Gsm. Kullanıcı bunlardan herhangi birine bir harf girdiğinde (OnChange), table o girilen harfe göre filitrelenmeli. yani kullanıcı 3 alana da birşeyler yazdı ise, gelecek arama sonucu bu alanlara göre olmalı. çok ilginç ki FindNearest kullandığımda, bu kelimeyi tanımlanmamış değişken olarak görüyor( delphi 6 kullanıyorum). Yardımcı olursanız çok mutlu olacağım...
Arama yapmada problem yaşıyorum:
Ekranımda 3 farklı alana göre arama yapmak üzere edit kontrolleri yerleştirdim: Ad, Soyad ve Gsm. Kullanıcı bunlardan herhangi birine bir harf girdiğinde (OnChange), table o girilen harfe göre filitrelenmeli. yani kullanıcı 3 alana da birşeyler yazdı ise, gelecek arama sonucu bu alanlara göre olmalı. çok ilginç ki FindNearest kullandığımda, bu kelimeyi tanımlanmamış değişken olarak görüyor( delphi 6 kullanıyorum). Yardımcı olursanız çok mutlu olacağım...
Güçlü olan haklı değil, haklı olan güçlüdür!
Merhaba,
ad için edit1
soyad için edit2
gsm için edit3 kullandığınızı varsayarsak.
her üç editin üzerini tıklayıp ortak onchange olayına
kodunu verip bir deneyin. Tabi Mustafa hocamın dediği gibi sql e geçmek en iyisi.
Kolay gelsin.
ad için edit1
soyad için edit2
gsm için edit3 kullandığınızı varsayarsak.
her üç editin üzerini tıklayıp ortak onchange olayına
Kod: Tümünü seç
table1.Filtered:=false ;
table1.Filter:='AD='+quotedstr(EDIT1.Text+'*')+' AND SOYAD='+quotedstr(EDIT2.Text+'*')+' AND GSM='+quotedstr(EDIT3.Text+'*');
table1.Filtered:=true;
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis

Öğe, istenen ad veya sıra sayısı ile ilişkili derleme içinde bulunamıyor
sql ile yapmak istiyorum, şöyle bir kod yazdım ama o da hata veriyor:
var
cumle:string;
begin
cumle:='';
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+edit1.Text+'%'')';
if edit2.Text<>'' then cumle:=cumle+' AND SOYADI LIKE('+chr(39)+'%'+edit2.Text+'%'+chr(39)+')';
if edit3.Text<>'' then cumle:=cumle+' AND GSM_NO LIKE('+chr(39)+'%'+edit3.Text+'%'+chr(39)+')';
adoquery4.CLOSE;
adoquery4.SQL.Clear;
adoquery4.SQL.text:='SELECT * FROM KISILER WHERE 1=1 '+cumle;
adoquery4.OPEN;

Güçlü olan haklı değil, haklı olan güçlüdür!
Merhaba,
Ben yukarıdakini deneyerek yaptım çalışıyordur.
ad :mahmut
soyad: algan
gsm :345666
şeklinde kayıtlı bir şahıs varken
edit1 :m
edit2:a
edit3:3
yazdığım zaman bana o kaydı getirdi. Ben bunu ttable bileşeni ile yapmıştım.
Siz her üç edit bileşenin onchange olayını aynı yaptınız mı?
Kolay gelsin.
sql e geçmeden önce hangi bileşeni kullanıyordunuz.CinAnka yazdı:verdiğiniz kod çalışmadı:
Öğe, istenen ad veya sıra sayısı ile ilişkili derleme içinde bulunamıyor
Ben yukarıdakini deneyerek yaptım çalışıyordur.
ad :mahmut
soyad: algan
gsm :345666
şeklinde kayıtlı bir şahıs varken
edit1 :m
edit2:a
edit3:3
yazdığım zaman bana o kaydı getirdi. Ben bunu ttable bileşeni ile yapmıştım.
Siz her üç edit bileşenin onchange olayını aynı yaptınız mı?
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis
Merhaba,
size cevabı yazdım. Tam post ederken internet bağlantım kesildi.
O yüzden bir kaç saat gecikmeyle yazmak zorunda kaldım. yerine
şeklinde yaparsanız sorgunuz çalışır.
Bu tür durumlarda ters giden bir şey olursa. open yapmadan önce
şeklinde deyiminizin son durumuna bakabilirsiniz.
Not:verdiğiniz şekilde edit1 ile başlayanlar ve içinde edit2 ve edit3 olanlar görüntülenir.
Kolay gelsin.
size cevabı yazdım. Tam post ederken internet bağlantım kesildi.

O yüzden bir kaç saat gecikmeyle yazmak zorunda kaldım.
Kod: Tümünü seç
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+edit1.Text+'%'')';
Kod: Tümünü seç
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+chr(39)+edit1.Text+'%'')';
Bu tür durumlarda ters giden bir şey olursa. open yapmadan önce
Kod: Tümünü seç
showmessage(adoquery4.SQL.text);
Not:verdiğiniz şekilde edit1 ile başlayanlar ve içinde edit2 ve edit3 olanlar görüntülenir.
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis
Çok teşekkür ederim; 3 alanlı aramayı yaptırdım... Sonradan bu başlığa bakanlara yardımcı olması bakımından toplu bir görünüm için kodu dahil etmek istiyorum:
Yeni sorularla karşınızda olmak üzere herkese bol bol kolay gelsinler...
Kod: Tümünü seç
procedure TForm1.Edit1Change(Sender: TObject);
VAR
cumle:String;
begin
cumle:='';
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+chr(39)+edit1.Text+'%'')';
if edit2.Text<>'' then cumle:=cumle+' AND SOYADI LIKE('+chr(39)+'%'+edit2.Text+'%'+chr(39)+')';
if edit3.Text<>'' then cumle:=cumle+' AND GSM_NO LIKE('+chr(39)+'%'+edit3.Text+'%'+chr(39)+')';
adoquery1.CLOSE;
adoquery1.SQL.Clear;
adoquery1.SQL.text:='SELECT * FROM KISILER WHERE 1=1 '+cumle;
adoquery1.OPEN;
end;
procedure TForm1.Edit2Change(Sender: TObject);
VAR
cumle:String;
begin
cumle:='';
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+chr(39)+edit1.Text+'%'')';
if edit2.Text<>'' then cumle:=cumle+' AND SOYADI LIKE('+chr(39)+'%'+edit2.Text+'%'+chr(39)+')';
if edit3.Text<>'' then cumle:=cumle+' AND GSM_NO LIKE('+chr(39)+'%'+edit3.Text+'%'+chr(39)+')';
adoquery1.CLOSE;
adoquery1.SQL.Clear;
adoquery1.SQL.text:='SELECT * FROM KISILER WHERE 1=1 '+cumle;
adoquery1.OPEN;
end;
procedure TForm1.Edit3Change(Sender: TObject);
VAR
cumle:String;
begin
cumle:='';
if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+chr(39)+edit1.Text+'%'')';
if edit2.Text<>'' then cumle:=cumle+' AND SOYADI LIKE('+chr(39)+'%'+edit2.Text+'%'+chr(39)+')';
if edit3.Text<>'' then cumle:=cumle+' AND GSM_NO LIKE('+chr(39)+'%'+edit3.Text+'%'+chr(39)+')';
adoquery1.CLOSE;
adoquery1.SQL.Clear;
adoquery1.SQL.text:='SELECT * FROM KISILER WHERE 1=1 '+cumle;
adoquery1.OPEN;
end;
Güçlü olan haklı değil, haklı olan güçlüdür!
s.a.
@CinAnka; çözümü bizlerle paylaştığın için teşekkür ederim.
Sizden ricam bundan sonraki mesajlarınızda kodlarınızı "code" tagı içerisine almanız. Kodları okurken kolay oluyor o yüzden.
Yukardaki mesajınızı ben editledim.
Bundan sonrakilerde dikkatli olursanız sevinirim.
İyi günler.
@CinAnka; çözümü bizlerle paylaştığın için teşekkür ederim.
Sizden ricam bundan sonraki mesajlarınızda kodlarınızı "code" tagı içerisine almanız. Kodları okurken kolay oluyor o yüzden.
Yukardaki mesajınızı ben editledim.
Bundan sonrakilerde dikkatli olursanız sevinirim.
İyi günler.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim