3 Alanlı Arama Yapmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

3 Alanlı Arama Yapmak

Mesaj gönderen CinAnka »

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...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7604
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Hangi vertabanı? Ben bu tip durumlarda genelde SQL kullanıyorum. Query ile çok esnek ve rahat bir şekilde halledebilirsin.

Kolay gelsin.
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

MS ACCESS kullanıyorum. sql string örneği verebilir misiniz? Çözüme ulaşayım da yolu çok önemli değil şu an için :wink:
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

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

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;

kodunu verip bir deneyin. Tabi Mustafa hocamın dediği gibi sql e geçmek en iyisi.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

:( verdiğiniz kod çalışmadı:
Öğ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;


:)... ne zormuş arama yapmak, teker teker kontrol etsem daha kolaydı wallahi...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
CinAnka yazdı::( verdiğiniz kod çalışmadı:
Öğe, istenen ad veya sıra sayısı ile ilişkili derleme içinde bulunamıyor
sql e geçmeden önce hangi bileşeni kullanıyordunuz.
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
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
size cevabı yazdım. Tam post ederken internet bağlantım kesildi. :oops:
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+'%'')';

yerine

Kod: Tümünü seç

    if edit1.Text<>'' then cumle:=cumle+' AND ADI LIKE('+chr(39)+edit1.Text+'%'')';

şeklinde yaparsanız sorgunuz çalışır.

Bu tür durumlarda ters giden bir şey olursa. open yapmadan önce

Kod: Tümünü seç

showmessage(adoquery4.SQL.text);
ş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.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

Ç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:

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;
Yeni sorularla karşınızda olmak üzere herkese bol bol kolay gelsinler...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

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.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla