arama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
longhorn

arama

Mesaj gönderen longhorn »

arkadaşlar bana tabloda arama için yardım gerekiyor
benim kullandığım kod aşağıdaki gibi.
istediğim şey ise mesela yüzlerce kayıt var isme göre arama yapmak istiyorum.ama mesela ismi tam hatırlamıyorum ve sadece edit1.text'e yazdığım kayıda yakın kayıtların listelenmesini istiyorum.örnek olarak kayıtlı mehtap,mehpare,mehmet gibi kayıtlar var diyelim.edit1.text'e 'Me' yazınca me ile başlayan tüm kayıtların listelenmesini istiyorum.eğer yoksa veya yanlış girilmişse bir mesaj vermesini istiyorum.
aşağıdaki kod bunun için yeterli değil yardım ederseniz sevinirim.
teşekkür ederim.

query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from sirket where Sirket_ismi like "'+Edit1.Text+'%"');
query1.Open;
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Aslında üstteki kod bunun için yeterli ancak yazdığınız yordam yanlış olabilir bu kodu editın OnChange olayına yazın ve tabiki editın boş olup olmadığınıda kontrol edin
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Kod: Tümünü seç

if Query1.RecordCount = 0 then
  ShowMessage(Edit1.Text + ' ile başlayan kayıt bulunamadı!');
Kolay gelsin.
longhorn

arama

Mesaj gönderen longhorn »

tamam eğer kayıt yoksa mesaj veriyor.aramada yapıyor fakat her listeyi açtığımda ilk kaydı gösteriyor benim arattırdığım kayıtları göstermiyor ben sadece benim arattırdığım kayda yakın olan kayıtların görünmesini istiyorum ama bu şekilde tüm kayıtları gösteriyor.lütfen yardım edin.
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Şimdi sen her arama formunu açtığımda bir önceki arama sonuçları kaldığı yerden gözüksün mü istiyorsun.. Benim anlayabildiğim bu..

O zaman arama formunu açtığında bir önceki sorgulamayı tekrar çalıştır..
Yoksa en son arama formunu kapatırken editın içinde ne yazıyordu onumu bulamıyorsun anlayamadım galiba sorunu... :(
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
longhorn

arama

Mesaj gönderen longhorn »

sorun şu ben arama yapmak istiyorum.3 tane formum var birinde kayıt girişi birinde liste birindede arama.mesela yüzlerce kayıt var ve ben aramak istedğim kaydı bulmak için (mesela ahmet isimli kaydı arıyorum)
edit1.text'e ahm veya ah yazınca bu şekilde başlayan tüm kayıtların liste formundaki dbdgrid üzerinde listelenmesini istiyorum.eğer kayıt yoksa veya yanlış yazılmışsa bir mesaj verip kayıt yoktur demesini istiyorum.umarım bu sefer daha anlaşılır olmuştur.teşekkür ederim.
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Aslında veritabanına göre değişik yöntemler uygulanabilir. Böyle bir durumda arama formunda uyguladığın sorguyu liste formundaki dbgridin bağlı olduğu querye uygularsan olur.. Ancak dbgride query değilde table bapladıysan (kesinlikle tavsiye etmem) table filter özelliğinde yararlanabilirsin ancak filter çok yavaş olacaktır..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
calvan
Üye
Mesajlar: 119
Kayıt: 16 Haz 2003 05:10

Mesaj gönderen calvan »

kod da bi sorun gözükmüyor, edit1 in onchange olayına yazdığında sorun olmamalı ben genelde sql.clear yapmadan kodu query nin string alanına yazıp kod ortamından sadece parametre göndermeyi tercih ediyorum.

arama yapmak için edit1, listeyi görmek için DbGrid kullanıp query i dbgride bağladığımda sıorun çıkmıyor

ayrıca sorguladığın database nedir?
çünkü kodda "'+Edit1.Text+'%"

" var ben sql server da denedim '' olmalı yani çift tırnak değil iki tane tek tırnak olmalı.
kodu
query1.SQL.Add('select * from Firma_Fiyat where Firma like '+#39+Edit1.Text+'%'+#39);

şeklinde yazdım sorunsuz çalışıyor
mahmut
Üye
Mesajlar: 82
Kayıt: 21 May 2004 11:00
Konum: KONYA
İletişim:

Mesaj gönderen mahmut »

Arkadaşım kodun dogru fakat diğer arkadasların dediği gibi veri tabanında önemli bu konuda sana çalışan bir kod örneğini sunuyorum inşallah işişni görür..

Kod: Tümünü seç

   If Edit1.Text<>'' Then
   Begin
    Query1.Close;
    Query1.Sql.Text:='select * from tabloismi Where değişkenin like "'+Edit1.Text+'%"';
    Query1.Open;
    DBGrid1.DataSource:=DataSource1;
    End Else
   Begin
      Query1.Close;
      Query1.Sql.Text:='select * from tabloismi';
      Query1.Open;
      DBGrid1.DataSource:=Datasource1;
   End;
Kolay Gelsin
longhorn

arama

Mesaj gönderen longhorn »

Herkese Çok Teşekkür ederim.sorunum halloldu.Herkese kolay gelsin.teşekkür ederim.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba arkadaşlar binimde bi sorum olucaktı

query ile diğer sorguları yapabiliyorum yani tablonun belirli alanlarındaki kayıtları edite girdiğim kriter uygunsa bularak dbgride dökülüyor.

yapmak istediğim edite bir kriter gireceğim ve bu girilen kriteri tüm tablonun içinde arayacak yani belirli bir alan yok tüm tablo içinde arayarak varsa uyan kayıt bulup gösterecek.

burada editleri iki tane düşünüyorum. adı ve soyadı için. yaptığım çalışmada kişilerin ikinci üçüncü dördüncü ad ve soyadları var bunların tabloda ayrı ayrı alanları oluşturuldu. adı, soyadı, adı1, soyadı1.... şeklinde gidiyor. burada aramayı tablo ya yayarak kayıt bulmak istiyorum. diğer türlü biraz güzel olmayan bi sorgu formu oluşmuş olacak ve kişiye peşi sıra ad soyad ların olduğu alanlar kadar sorgu yaptırılacak.

tabolm dbaseIV ile hazırlanmış durumda ve delphi7 kullanıyorum.

teşekkür ve saygılarla.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »


Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Hüseyin abi seni bu zahmete soktuğum için çok üzgünüm ve yardımların içinde çok teşekkür ederim.

Aramalarımda ve sizin belirttiğiniz sayfalarda hep belirli field lerde arama yapılıyor. Biz se tek bir edit girerek tüm tablo içinde aramasını istiyoruz. yani sorguda belirli bir alan yok tüm tablo var. verdiğin adreslerden

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject); 
begin 
   SorguYap(Edit1.Text, Edit2.Text); 
end; 

procedure TForm1.Edit2Change(Sender: TObject); 
begin 
   SorguYap(Edit1.Text, Edit2.Text); 
end; 

Procedure TForm1.SorguYap(Edit1, Edit2 : String); 
begin 
  // İlk olarak başında ve sonundaki boşluklar temizlensin. 
  Edit1 := Trim(Edit1); 
  Edit2 := Trim(Edit2); 

With Query1 do 
  begin 
    Active := False; 
    SQL.Clear; 
    SQL.Add('Select * from giris'); 
    If (Edit1 <> '') OR (Edit2 <> '') then 
    begin // Editler boş ise tüm liste gelir, herhangi biri dolu ise 
      If (Edit1 <> '') AND (Edit2 <> '') then 
      SQL.Add('where ((LOWER(Oda) Like LOWER(:param1)) or (LOWER(AdiSoyadi) Like LOWER(:param2)))' ) 
      else If Edit1 <> '' then SQL.Add('where (LOWER(Oda) Like LOWER(:param1))') 
      else If Edit2 <> '' then SQL.Add('where (LOWER(Oda) Like LOWER(:param2))'); 
    end; // If editlerden en az birisi  dolu ise... 

    If Edit1 <> '' then 
    Params.ParamByName('param1').AsString:='%'+Edit1+'%'; 
    If Edit2 <> '' then 
    Params.ParamByName('param2').AsString:='%'+Edit2+'%'; 
    Active := True; 
  end; // With 
end; 
yukarıda geçilen kodu kallanmayı düşünüyorum. Yani sorgu içindeki paramlara ve alan adlarına tablom kadar gireceğim ve edit bitane olacak

acaba doğru yapmış olurmuyum.

teşekkür ve saygılar.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bahsettiğin şeyi bir çok yöntemle yapabilirsin. Yukarıda ki kodu incelemeden fikir vermek istiyorum birincisi kod yazarken illaki kodunun başka kodlara benzemesi gerekmez ve bir olayı bir çok kod yazımıyla yapabilirsin.

1.nci bir anda bütün fieldları aramak istiyorsan önerim Sql dizisinde whereden sonra yakalamak istediğin verilerde fieldlar arasında or parametresi kullanabilirsin.
2.nci yöntem sorguyu tek field'a göderirsin kayıt olup olmadığını kontrol edip ikinci field ı sorgularsın.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Hüseyin abi rahatsız ediyorum,

OR kullanarak şu şekil bi kod yazdım (acizane);

Kod: Tümünü seç

query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select*from Arsiv');
query1.SQL.Add('where ((ADI) OR (SOYADI) OR (BABA_ADI)) LIKE :Param1');
query1.ParamByName('Param1').AsString :=edit8.text;
query1.Open;
burada run deyince çalışıyor fakat edit8 e bir isim girince hata veriyor ve run durduruluyor tekrar run diyince TOKEN:OR hatısını veriyor. AND Olarak değiştiriyorum yine TOKEN:AND hatasını veriyor. büyük ihtimal hata bizde acaba nerde? :oops: :)
Cevapla