SQL ile filtreleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
murat2608
Üye
Mesajlar: 19
Kayıt: 29 Haz 2004 01:15
Konum: Bursa

SQL ile filtreleme

Mesaj gönderen murat2608 »

Açıkçası bu konuyu yazmak konusunda biraz düşündüm çünkü çoğunuz için çok basit birşey olduğuna eminim. Ama "Bilmemek değil öğrenmemek ayıptır" düsturunca yazmaya karar verdim.

Sorunum şu:

Kod: Tümünü seç

Button1Click
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from customers');
  ADOQuery1.SQL.Add('where CustomerID='+edit1.text+'');
  ADOQuery1.Open;
end;
örnek olarak Office kurulumu ile birlikte gelen Northwind adlı Access veritabanı dosyasının içindeki customers.mdb tablosunu aldım. Edit'ın içine girdiğim değeri CustomerID alanında bularak filtreleme yapmak istiyorum. Yukarıdaki kodları yazıp F9 dediğimde

''CustomerID=' sorgu ifadesi içindeki Sözdizimi hatası (eksik işleç)'

diye bir hata veriyor. Nedir bu?

Birde bu edit'ın içine yazdığım değeri büyük-küçük harf olayını önemsemeden ve -atıyorum- ALİ yazdığımda hem ALİ ile başlayan kayıtları hem de SALİH gibi kayıtları getirmesi için nasıl bir kodlama yapmam gerekiyor.

Eğer yardım edebilirseniz sevinirim.
Sevgi, sayygı ve muhabbet ile...
Sesini değil,
Sözünü yükselt !
Yağmurlardır zambakları büyüten
Gökgürültüleri değil ...
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Re: SQL ile filtreleme

Mesaj gönderen mege »

murat2608 yazdı:.... "Bilmemek değil öğrenmemek ayıptır" düsturunca yazmaya karar verdim...
atalarımız yazdı:bilmemek, öğrenmek değil aramamak ayıp
atalarımız yazdı:araya araya bağdat bulunur
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Aramayı LIKE ile yapmalısın
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Kod: Tümünü seç

select * from KISI where ADI like "'+Edit1.Text+'%"' + and SOYADI like "'+Edit2.Text+'%
Misafir

Mesaj gönderen Misafir »

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from customers');
ADOQuery1.SQL.Add('where CustomerID='+edit1.text+'');
ADOQuery1.Open;


Bu kodu şöyle yaparsak istediğin sonucu alırsın

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from customers');
ADOQuery1.SQL.Add('where CustomerID="'+edit1.text+'"');
ADOQuery1.Open;

Sanırım access metin işaretçisi olarak " (çift tırnak) veya ' (tek tırnak) kabul ediyordu. eğer bu aramanın tamamen eşittir şeklinde değil de içerir sonuçları da göstermesini istersen ilgili satırı şu şekilde değiştir.

ADOQuery1.SQL.Add('where CustomerID like "%'+edit1.text+'%"');

Kolay gelsin...
murat2608
Üye
Mesajlar: 19
Kayıt: 29 Haz 2004 01:15
Konum: Bursa

Mesaj gönderen murat2608 »

Hepinize ilgilendiğiniz için çok teşekkür ederim. Kodlar hatasız ve istediğim gibi çalışıyor. Tekrar sağolun.
Sesini değil,
Sözünü yükselt !
Yağmurlardır zambakları büyüten
Gökgürültüleri değil ...
murat2608
Üye
Mesajlar: 19
Kayıt: 29 Haz 2004 01:15
Konum: Bursa

Mesaj gönderen murat2608 »

hepinize tekrar merhaba
Filtreleme ili ilgili kodlar için teşekkür ederim.
Ancak benim ufak bir sorunum daha var. Bu konuda da sizlerden yardım isteyeceğim. Forumda arama yaptım ama bulamadım ?

Yine sizler için çok basit olduğuna eminim.

Şöyle ki edit, checkbox, dbgrid, adoquery ve datasource nesnelerinden oluşan basit bir form. Kodlarda şu şekilde ;

Kod: Tümünü seç

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if checkbox1.Checked=True then
      checkbox1.Caption:='Filtreli';
      ADOQuery1.Active:=False;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from customers');
      ADOQuery1.SQL.Add('where City="'+edit1.text+'"');
      ADOQuery1.Open;
      ADOQuery1.Active:=True;

  if checkbox1.Checked=False then
      checkbox1.Caption:='Filtresiz';
      ADOQuery1.Active:=False;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from customers');
      ADOQuery1.Open;
      ADOQuery1.Active:=True;
end;

end.
Şimdi sorun şu checkbox1.checked=true'da olsa false'de olsa filtreleme yapmıyor. Ancak kodun false kısmını yazmadığımda kodlar çalışyor. ADOQuery'nin Filter özelliği mi var, nasıl yapacağım beceremedim. Eğer yardımcı olursanız sevinirim. Teşekkürler.
Sesini değil,
Sözünü yükselt !
Yağmurlardır zambakları büyüten
Gökgürültüleri değil ...
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

yine memik yanığın kulağını çınlatıcam :)

yazdığın mantık doğrumu sence ? if leri blok içerisine almamışsın.. veritabanına girmeden temel pascalı biraz çalışsanız? ne dersiniz iyi olmazmı ?
bikere herzaman ortak yerlerini birleştir ve koşula min. ayrım bırak..
bu herzaman okumanı kolaylaştuırır

Kod: Tümünü seç

procedure TForm1.CheckBox1Click(Sender: TObject);
begin

      ADOQuery1.Active:=False;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select * from customers');
      ADOQuery1.SQL.Add('where 1=1'); //tüm kayıtları al
      //eğer check box seçili ise koşul olarak şunuda ekle
      if checkbox1.Checked ADOQuery1.SQL.Add('and City="'+edit1.text+'"');

     //böyle bir yığın daha koşul ekleyebilirsin
      //eğer check box2 seçili ise koşul olarak şunuda ekle
      if checkbox2.Checked ADOQuery1.SQL.Add('and Country="'+edit2.text+'"');


      ADOQuery1.Open;
      ADOQuery1.Active:=True;


//burası biraz farklı yapmalısın bu kafa karıştırıcı
  if checkbox1.Checked then
      checkbox1.Caption:='Filtreli'
  else
      checkbox1.Caption:='Filtresiz';

end;

end.

aramadan önce siteeki sql ipuçları ve temel pascal bilgilerine bakmalısın
ve herzamanki gibi bititricem Resim Resim Resim Resim Resim Resim Resim Resim
Cevapla