OR ? AND?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
OR ? AND?
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
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
Öncelikle OnChange e koyma, o Edit in OnExit i kullan.
Önce SQL cümlesini ayarlaman lazım
Daha sonrada parametrelerigöndermen lazım
Yazılım hatası olabilir, en azından matık budur,yada şöyle diyeyim, Ben bunu kullanıyorum
Kolay gele
Ö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;
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
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 :
- 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.
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.
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.
- 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..
- 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;