SQL arama kriterileri
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- jafari1983
- Üye
- Mesajlar: 44
- Kayıt: 05 Eyl 2010 10:32
SQL arama kriterileri
Salamun aleykum arkadaşlar. Benim problemim arama ile ilgili. MS Access 2003+ADO kullanıyorum. Mağaza programı yazmaq istiyorum. Arama formunda problem çıkıyor. Ben hem tarihe göre aramak istiyorum, hem malın koduna göre, hem de satıcıya göre. 4 tane Edit.Box yerleştirdim formuma. Problem burda, eğer editboxlardan biri boşsa ve ya ikisi boşsa ve ya üçü boşsa 4-cü ye göre ara (farkı yok, her hangi bir Edit.Box dördüncü ola bilir). Yani, 4 tane Edit.Boxların hangisi doluysa ona göre ara, ve ya 2si doluysa ikisine göre ara, ve ya üçü dolysa üçüne göre ara, ve ya hepsi doluysa hepsine göre ara. Aklım hiç almıyor bunun kodu nasıl olacak... Önceden teşekkürler!
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Re: SQL arama kriterileri
editleri kontrol ederek sorguyu adım adım oluşturabilirsiniz...
Kod: Tümünü seç
var
sql:string;
begin
sql:='SELECT * FROM TABLO WHERE (1=1) ';
if edit1.text<>'' then
sql:=sql+' AND (ALAN1='+quotedstr(edit1.text)+') ';
if edit2.text<>'' then
sql:=sql+' AND (ALAN2='+quotedstr(edit2.text)+') ';
//..................
showmessage(sql);
end;
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

- jafari1983
- Üye
- Mesajlar: 44
- Kayıt: 05 Eyl 2010 10:32
Re: SQL arama kriterileri
Allah sizden razi olsun kardesim, ben bu kadar kod yazdim, hepsi aptalca mi ?
Kod: Tümünü seç
procedure TForm2.Button1Click(Sender: TObject);
begin
if Edit1.Text<>'' then //eger kod sifirdan ferqlidirse
with ADOQuery1 do begin
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod =:kod');
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Active := true;
end
else if (Edit1.Text<>'') and (Edit2.Text<>'') then //eger kod ve ad sifirdan ferqlidirse
with ADOQuery1 do begin
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod =:kod AND Ad=:ad');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Active := true;
end
else if (Edit1.Text<>'') and (Edit2.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') then
with ADOQuery1 do begin //eger kod, ad ve tarix sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod = :kod AND Ad=:Ad AND (Tarix >= :tar1 and Tarix <= :tar2)');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Active := true;
end
else if (Edit1.Text<>'') and (Edit2.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') and (Edit5.Text<>'') then
with ADOQuery1 do begin //eger kod, ad, tarix ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod=:kod AND Ad=:ad AND Satici=:sat AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if (Edit1.Text<>'') and (Edit5.Text<>'') then
with ADOQuery1 do begin //eger kod ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod=:kod and Satici=:sat ');
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if (Edit1.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') then
with ADOQuery1 do begin //eger kod ve tarix sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod=:kod AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Active := true;
end
else if (Edit1.Text<>'') and (Edit2.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') then
with ADOQuery1 do begin //eger kod, ad ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod=:kod and Satici=:sat AND Ad=:Ad AND ');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if (Edit1.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') and (Edit5.Text<>'') then
with ADOQuery1 do begin //eger kod, tarix ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Kod=:kod and Satici=:sat AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('kod').Value := StrToInt(Edit1.Text);
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if Edit2.Text<>''then
with ADOQuery1 do begin //eger ad sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Ad=:Ad');
Parameters.ParamByName('ad').Value := Edit2.Text;
Active := true;
end
else if (Edit2.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'')then
with ADOQuery1 do begin //eger ad ve tarix sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Ad=:ad AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Active := true;
end
else if (Edit2.Text<>'') and (Edit5.Text<>'') then
with ADOQuery1 do begin //eger ad ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Satici=:sat AND Ad=:ad');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if (Edit1.Text<>'') and (Edit5.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') and (Edit5.Text<>'') then
with ADOQuery1 do begin //eger ad, tarix ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Satici=:sat AND Ad=:Ad AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('ad').Value := Edit2.Text;
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') then
with ADOQuery1 do begin //eger tarix sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Active := true;
end
else if (Edit5.Text<>'') and (MaskEdit3.Text<>'') and (MaskEdit4.Text<>'') then
with ADOQuery1 do begin //eger tarix ve satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Satici=:sat AND (Tarix>=:tar1 and Tarix<=:tar2)');
Parameters.ParamByName('tar1').Value := StrTodate(MaskEdit3.Text);
Parameters.ParamByName('tar2').Value := StrTodate(MaskEdit4.Text);
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else if Edit5.Text<>'' then
with ADOQuery1 do begin //eger satici sifirdan ferqlidirse
Active := false;
SQL.Clear;
SQL.Add('select * from Table1 where Satici=:sat');
Parameters.ParamByName('sat').Value := Edit5.Text;
Active := true;
end
else
ShowMessage('Axtaris ucun melumat daxil edilmedi!!!');
end;
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Re: SQL arama kriterileri
yok aptalca demeyelim de gereksiz...
sizin yöntemle kriter arttıkca kontrol edilecek ihtimaller bitmek bilmez...
sizin yöntemle kriter arttıkca kontrol edilecek ihtimaller bitmek bilmez...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

- jafari1983
- Üye
- Mesajlar: 44
- Kayıt: 05 Eyl 2010 10:32
Re: SQL arama kriterileri
çok teşekkür ederim, işime yaradı, 200 satırlıq kodu 4 satırla hall ettin. ama bir problem daha var. Benim Edit.Boxların bazıları currency, integer ve DateTime formatinda. Onları senin verdiğin kodda nasıl yazacam ? Sonra % işaretini de ilave etmek istiyorum string olan editboxlarda, ama nereye ilave edeceğimi bilmiyom....
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Re: SQL arama kriterileri
özellikle currency ve datetime alanlarında dikkatli olman, uğraşman gerekebilir. sql tarafında ondalık ayracı noktadır, delphi tarafında (kullanıcının sistem ayarlarına bağlı olarak) virgüldür...
editlerde % kullanıcam derken like la aramaktan mı bahsediyorsun?
bence en iyisi parametre kullanımı... mantığı anlaman için bir örnek daha, gerisi sana kalmış...
editlerde % kullanıcam derken like la aramaktan mı bahsediyorsun?
bence en iyisi parametre kullanımı... mantığı anlaman için bir örnek daha, gerisi sana kalmış...
Kod: Tümünü seç
sql:='SELECT * FROM TABLO WHERE (1=1) ';
if edit1.text<>'' then
sql:=sql+' AND (ALAN1=@ALAN1)';
if edit2.text<>'' then
sql:=sql+' AND (ALAN2 LIKE @ALAN2)';
if edit3.text<>'' then
sql:=sql+' AND (ALAN3=@ALAN3)';
with AdoQuery,SQL do
begin
close;
clear;
add(sql);
paramByName('ALAN1').asfloat:=strtofloat(edit1.text);
paramByName('ALAN2').asstring:='%'+edit2.text;
paramByName('ALAN3').asstring:=edit3.text;
open;
end;
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

- jafari1983
- Üye
- Mesajlar: 44
- Kayıt: 05 Eyl 2010 10:32
Re: SQL arama kriterileri
Bir daha salamun aleykum. Kardeş, parametrelerle bu kodu çalıştıramadım, Edit1.Text- boş brakdığımda ("" is not a valid integer value) hatasını veriyor. Parametreler satrını sildiğimde diğer kodlar çalışıyor, 3-4 gündür dememediğim şey kalmadı, ama bir türlü çalışmadı. Sİz de kontrol edin lütfen, belki bir yerlerde hata yapmışam. Biraz detaylı yazın lütfen, ben Delphide çok yeniyim.... Baramınız Kutlu Olsun.
Kod: Tümünü seç
procedure TForm2.Button1Click(Sender: TObject);
var
sql:string;
begin
sql:='SELECT * FROM Table1 WHERE (1=1) ';
if Edit1.Text<>'' then
sql:=sql+' AND (Kod=:kod)';
if Edit5.Text<>'' then
sql:=sql+' AND (Satici='+QuotedStr(Edit5.Text)+') ';
ADOQuery1.Active := false;
ADOQuery1.SQL.Clear;
ADOQuery1.Parameters.ParamByName('kod').Value:=StrToInt(Edit1.Text);
ADOQuery1.SQL.Add(sql);
ADOQuery1.Active := true;
showmessage(sql);
end;
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Re: SQL arama kriterileri
sqli oluştururken editler boş mu diye kontrol etmişsin çok güzel, ancak parametreye değer atarken aynı kontrolü yapmayı unutmuşsun, ayrıca string alanları da parametreli aktarmanı öneririm.
yoksa kullanım yerine göre sıkıntılar oluşabilir. mesela girilen değerde tırnak işareti varsa sql yamulur... gerçi quotedstring demişsiniz ama böylece ona da gerek kalmaz...
ayrıca sayısal giriş yapılacak editlere kontrol ekleyerek harf girişini engellerseniz iyi olur, kullanıcının ne yapacağı belli olmaz...
yoksa kullanım yerine göre sıkıntılar oluşabilir. mesela girilen değerde tırnak işareti varsa sql yamulur... gerçi quotedstring demişsiniz ama böylece ona da gerek kalmaz...
Kod: Tümünü seç
'deneme
İstanbul'dan
.....
Kod: Tümünü seç
var
sql:string;
begin
sql:='SELECT * FROM Table1 WHERE (1=1) ';
if Edit1.Text<>'' then
sql:=sql+' AND (Kod=:kod)';
if Edit5.Text<>'' then
sql:=sql+' AND (Satici=:satici) ';
ADOQuery1.Active := false;
ADOQuery1.SQL.Clear;
if Edit1.Text<>'' then
ADOQuery1.Parameters.ParamByName('kod').AsInteger:=StrToInt(Edit1.Text);
if Edit5.Text<>'' then
ADOQuery1.Parameters.ParamByName('satici').AsString:=Edit5.Text;
ADOQuery1.SQL.Add(sql);
ADOQuery1.Active := true;
showmessage(sql);
end;
ayrıca sayısal giriş yapılacak editlere kontrol ekleyerek harf girişini engellerseniz iyi olur, kullanıcının ne yapacağı belli olmaz...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

- jafari1983
- Üye
- Mesajlar: 44
- Kayıt: 05 Eyl 2010 10:32
Re: SQL arama kriterileri
Allah senden razı olsun kardeş.
Herşey şimdi tamam! Çok teşekkür edirem.

"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"