OR ? AND?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

OR ? AND?

Mesaj gönderen loxka »

S.A

Edit 1 ve 3nin OnChange 'ine;
Query1.Close;
Query1.Params[0].AsString:='%'+Edit1.Text+'%';
Query1.Params[1].AsString:='%'+Edit2.Text+'%';
Query1.Open;

SQL' de ;
select * from giris
where ((LOWER(Oda) Like LOWER(:param1)) or (LOWER(AdiSoyadi) Like LOWER(:param2)))
diyerek parametre atadım..

sorunum;
2 tane edit in içinden hangisi girilmiş ise onu arasın
Girilmeyenleri ise gözardı etsin..

çok bunalttı bu beni yardımlarınızı bekliyorum. teşekkürler
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Öncelikle OnChange e koyma, o Edit in OnExit i kullan.

Önce SQL cümlesini ayarlaman lazım

Kod: Tümünü seç

....
var TempStr : string;
.......
TempStr := '';
if Trim(Edit1.Text)<>''then begin
 if Trim(TempStr)<>''then TempStr := TempStr +' or ' + '((LOWER(Oda) Like LOWER(:param1))'
 else TempStr := '((LOWER(Oda) Like LOWER(:param1))';
end;

if Trim(Edit2.Text)<>''then begin
 if Trim(TempStr)<>''then TempStr := TempStr +' or ' + TempStr := '(LOWER(AdiSoyadi) Like LOWER(:param2)))'
 else TempStr := '(LOWER(AdiSoyadi) Like LOWER(:param2)))';
end;

Query1.SQL.Clear;
Query1.SQL.Add('select * from giris ');
if Trim(TempStr)<>''then  begin
 Query1.SQL.Add('Where');
 Query1.SQL.Add(TempStr);
end;

Daha sonrada parametrelerigöndermen lazım

Kod: Tümünü seç

Query1.Close; 
if Trim(Edit1.Text)<>''then Query1.Params[0].AsString:='%'+Edit1.Text+'%'; 
if Trim(Edit2.Text)<>''then Query1.Params[1].AsString:='%'+Edit2.Text+'%'; 
Query1.Open; 
Yazılım hatası olabilir, en azından matık budur,yada şöyle diyeyim, Ben bunu kullanıyorum

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- Anladığım kadarıyla bu işi SQL sorgusunda yapmalısınız.
- Bu durumda Parameter aktarımını; parametre index'i yerine direkt parametre isminden yaptırın.

Örnek :

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;
En son mrmarman tarafından 07 Oca 2004 05:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@freeman35 hızla cevap yazmışsın zaten.

- Benimki de benzer bir cevap oldu kusura bakma. :)

@loxka freeman35'in cevabını da uygulayabilirsin fakat parametre aktarımını dediğim gibi isme yap. Tek parametre olursa hata olabilir.
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

mrmcop ben kodu iyi incememişim, doğru yazmışsın, ParamByName('').AsString kullanılsın
Hız içinde tesadüfün iğne deliği diyebiliriz :lol:
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

her ikinizede teşekkür ederim , yanlız anlamadığım
Procedure TForm1.SorguYap(Edit1, Edit2 : String);
ifadesinde hata veriyor sanırım bunu bir şekilde procedure olarak işletmek lazım .. Nasıl yapmalıyım
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

Evet bir şekil şöyle.

TForm1. yazısının silinmiş halini yukarıya tanımlara eklemeniz lazım.

ya da en basiti, bu satır üzerine gelip CTRL+SHIFT+C tuş kombinasyonuna basın.

procedure SorguYap(Edit1, Edit2: String);

satırını sizin yerinize delphi IDE halledecektir.
En son mrmarman tarafından 11 Şub 2004 02:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bu da özel mesajla istediğin üzere dinamik bir çözüm. İstediğin kadar Edit ile sorgu yaptırabilmek için.

- Merak eden başka arkadaşlar da faydalansın diye yazdım..

Kod: Tümünü seç

// Kullanımı
// ---------
// SorguYap('Edit', 1, 6);
// Bu şekilde yazdığında Edit1, Edit2, Edit3, Edit4, Edit5, Edit6 isimli Edit kutuları sorgulanır.

// SorguYap('Kontrol', 3, 5);
// Bu şekilde yazdığında Kontrol3, Kontrol4, Kontrol5 isimli Edit kutuları sorgulanır.

Procedure TForm1.SorguYap(EditPrefix: String; EditBas, EditSon : Integer);
Var
  Sayac       : Integer;
  Yazi        : String;
  WhereSatiri : Integer;
begin
  // Dinamiktir Edit sayısı artsa da fonksiyon sabittir. Parametre girişi değişecektir.
  Query1.Active := False;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select * from giris');

  For Sayac := EditBas to EditSon do
  begin
    Yazi := Trim( TEdit( FindComponent( Format('%s%d', [EditPrefix, Sayac]) ) ).Text );
    If Yazi <> '' then
    begin
       If Pos('Where', Query1.SQL.Text) <= 0 then
       begin // Sadece bir kere bu şarta düşecektir. Çünkü şimdi Where koyucaz.
         Query1.SQL.Add('Where');
         WhereSatiri := Query1.SQL.Count;
       end;

       If Query1.SQL.Count > WhereSatiri // OR Koyalım mı Koymayalım mı ?
       then Query1.SQL.Add(' OR (LOWER(Oda) Like LOWER("%'+Yazi+'%" ))')
       else Query1.SQL.Add('    (LOWER(Oda) Like LOWER("%'+Yazi+'%" ))');
    end;
  end;
  Query1.Active := True;
end;
Resim
Resim ....Resim
Cevapla