Merhabalar arkadaşlar,
Query kullanarak arama yapmak istiyorum , fakat şöyle bir sıkıntım var eğer dcb2.text in içeriği dolu ise o içeriğie göre aramasını yapsın fakat dcb2.text boş bırakılmış ise dcb2.text yi sorguya dahil etmesin
bunu nasıl yapabilirim...
dm.qt.Close;
dm.qt.SQL.Clear;
dm.qt.SQL.Add('select sicil_no,gurup, sum(Gramaj),COUNT(*) from TBL_Tartim where tarih between '''+DateToStr(dt1.Date)+''' and '''+DateToStr(dt2.Date)+''' and (makina_no = ''' + dcb1.Text + '''and( lot_no = ''' + dcb2.text + ''' or lot_no = "" ) GROUP BY sicil_no,gurup ') ;
dm.qt.Open;
AramaKriteri Bos ise
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: AramaKriteri Bos ise
merhaba,
bu forumda bulunan ustalardan aldığım kodu yıllardır kullanıyorum ve güzel çalışıyor. içerisine kriter girilmiş editleri göz önünde bulundurarak sorgulama yapıyor.
kolay gelsin
bu forumda bulunan ustalardan aldığım kodu yıllardır kullanıyorum ve güzel çalışıyor. içerisine kriter girilmiş editleri göz önünde bulundurarak sorgulama yapıyor.
Kod: Tümünü seç
var
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s:String;
begin
s1:=cxtextEdit1.text;
s2:=cxtextedit2.Text;
s3:=cxtextedit3.Text;
s4:=cxdateedit1.text;
s5:=cxdateedit2.Text;
s6:=cxlookupcombobox1.Text;
s7:=cxlookupcombobox2.text;
s8:=cxtextedit4.Text;
s9:=cxlookupcombobox3.text;
s10:=cxtextedit5.Text;
s11:=cxlookupcombobox4.text;
s12:=cxlookupcombobox5.text;
s13:=cxlookupcombobox6.text;
s14:=cxtextedit7.Text;
s15:=cxtextedit8.text;
s16:=cxtextedit9.text;
s17:=cxtextedit10.text;
rpgnlsorguibqry.close;
with rpgnlsorguibqry.sql do
begin
Clear;
Add('Select * From OLAYRAPOR');
if s1<>'' then s:='(OLAYYILI = '''+s1+''')';
if s2<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(RAPORNO = '''+s2+''')'
end;
if s3<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(EKRAPORNO = '''+s3+''')'
end;
if s4<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(OLAYTARIHI1 = '''+s4+''')'
end;
if s5<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(INCTARIHI = '''+s5+''')'
end;
if s6<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(SUCTURU CONTAINING '''+s6+''')'
end;
if s7<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ISTOLYADI CONTAINING '''+s7+''')'
end;
if s8<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(RAPOROLYADI CONTAINING '''+s8+''')'
end;
if s9<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ILI CONTAINING '''+s9+''')'
end;
if s10<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ILCESI LIKE ''%'+s10+'%'')'
end;
if s11<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(BOLGEPOLMRK LIKE ''%'+s11+'%'')'
end;
if s12<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ILGILIBIRIM LIKE ''%'+s12+'%'')'
end;
if s13<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(MAHALLE CONTAINING '''+s13+''')'
end;
if s14<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(CADDESOKAK CONTAINING '''+s14+''')'
end;
if s15<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ADRES LIKE ''%'+s15+'%'')'
end;
if s16<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(PLAKA CONTAINING '''+s16+''')'
end;
if s17<>'' then
begin
if s<>'' then s:=s+' AND ';
s:=s+'(ARACBILGI CONTAINING '''+s17+''')'
end;
if s<>'' then add ('WHERE '+s);
add('ORDER BY OLAYYILI, RAPORNO, EKRAPORNO');
end;
rpgnlsorguibqry.Open;
rpgnlsorguibqry.Last;
dbtext1.Caption:='TOPLAM [ '+inttostr(rpgnlsorguibqry.RecordCount)+
' ] KAYIT BULUNDU';
if rpgnlsorguibqry.IsEmpty then
ShowMessage('Aranılan Kriterde Kayıt Bulunamamıştır.');
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
Re: AramaKriteri Bos ise
Merhaba.
@bobasturk güzel açıklamış.
Önce SQL'deki sorunsalı irdeleyip, buna göre daha kısa bir yöntem daha sunalım.
Konumuz, ilk önce WHERE kullanıp takip edenlere AND kullanmak ise, ilk WHERE kullanımını Joker bir cümleye dönüştürürsek ondan sonra tüm değişkenler için korkmadan çekinmeden AND kullanma opsiyonununa altyapı hazırlamış olucaz. Yani WHERE 1=1 şeklinde kullanırsak, bu satır WHERE hakkını kullanmış olur ve daima true döneceğinden sorgulara etkisi olmaz. Bundan sonra her satırda if sorgusu ile dilediğin değişkeni AND ile dahil eder veya devre dışı bırakabilirsin.
Senin kodların bire bir düzenlenmiş haliyle görmek istersen aşağıdaki şekilde.
@bobasturk'ün kodu da şu şekilde olurdu.
@bobasturk güzel açıklamış.
Önce SQL'deki sorunsalı irdeleyip, buna göre daha kısa bir yöntem daha sunalım.
Konumuz, ilk önce WHERE kullanıp takip edenlere AND kullanmak ise, ilk WHERE kullanımını Joker bir cümleye dönüştürürsek ondan sonra tüm değişkenler için korkmadan çekinmeden AND kullanma opsiyonununa altyapı hazırlamış olucaz. Yani WHERE 1=1 şeklinde kullanırsak, bu satır WHERE hakkını kullanmış olur ve daima true döneceğinden sorgulara etkisi olmaz. Bundan sonra her satırda if sorgusu ile dilediğin değişkeni AND ile dahil eder veya devre dışı bırakabilirsin.
Senin kodların bire bir düzenlenmiş haliyle görmek istersen aşağıdaki şekilde.
Kod: Tümünü seç
dm.qt.Close;
dm.qt.SQL.Clear;
dm.qt.SQL.Add('select sicil_no,gurup, sum(Gramaj),COUNT(*) from TBL_Tartim' );
dm.qt.SQL.Add('WHERE 1=1'); // Joker yani etkisiz bir satır hale dönüştü.
dm.qt.SQL.Add('AND tarih between '''+DateToStr(dt1.Date)+''' and '''+DateToStr(dt2.Date)+''' ');
if Trim(dcb1.Text) <> ''
then dm.qt.SQL.Add('and (makina_no = ''' + dcb1.Text + ''' ' );
dm.qt.SQL.Add('and( lot_no = ''' + dcb2.text + ''' or lot_no = "" ) ');
dm.qt.SQL.Add('GROUP BY sicil_no,gurup ') ;
dm.qt.Open;
Kod: Tümünü seç
with rpgnlsorguibqry.sql do
begin
Clear;
Add('Select * From OLAYRAPOR');
Add('WHERE 1=1');
if s1 <> '' then Add( 'AND (OLAYYILI = '''+s1+''')' );
if s2 <> '' then Add( 'AND (RAPORNO = '''+s2+''')' );
if s3 <> '' then Add( 'AND (EKRAPORNO = '''+s3+''')' );
if s4 <> '' then Add( 'AND (OLAYTARIHI1= '''+s4+''')' );
if s5 <> '' then Add( 'AND (INCTARIHI = '''+s5+''')' );
if s6 <> '' then Add( 'AND (SUCTURU CONTAINING '''+s6+''')' );
if s7 <> '' then Add( 'AND (ISTOLYADI CONTAINING '''+s7+''')' );
if s8 <> '' then Add( 'AND (RAPOROLYADI CONTAINING '''+s8+''')' );
if s9 <> '' then Add( 'AND (ILI CONTAINING '''+s9+''')' );
if s10 <> '' then Add( 'AND ((ILCESI LIKE ''%'+s10+'%'')' );
if s11 <> '' then Add( 'AND ((BOLGEPOLMRK LIKE ''%'+s11+'%'')' );
if s12 <> '' then Add( 'AND ((MAHALLE CONTAINING '''+s13+''')' );
if s13 <> '' then Add( 'AND ((ILGILIBIRIM LIKE ''%'+s12+'%'')' );
if s14 <> '' then Add( 'AND ((CADDESOKAK CONTAINING '''+s14+''')' );
if s15 <> '' then Add( 'AND ((ADRES LIKE ''%'+s15+'%'')' );
if s16 <> '' then Add( 'AND ((PLAKA CONTAINING '''+s16+''')' );
if s17 <> '' then Add( 'AND ((ARACBILGI CONTAINING '''+s17+''')' );
Add('ORDER BY OLAYYILI, RAPORNO, EKRAPORNO');
end;
Re: AramaKriteri Bos ise
ustam ellerine sağlık, müteşekkirim.
kolay gelsin
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
Re: AramaKriteri Bos ise
elinize saglık bende sizin yaptıklarınıza göre kodumu düzenlemeye çalışıyorum sorunsuz çalışınca bende göndereceğim teşekkürler.
Re: AramaKriteri Bos ise
where 1=1 olayını ben farklı düşünmüştüm.
Sonra Şaban Hoca cevap yazınca biraz araştırdım.
geldiğim nokta da @Arman hocanın anlattığı oldu.
viewtopic.php?f=27&t=25492
Sonra Şaban Hoca cevap yazınca biraz araştırdım.
geldiğim nokta da @Arman hocanın anlattığı oldu.
viewtopic.php?f=27&t=25492
Bir kelimenin anlamını öğretsen bile yeter..
Re: AramaKriteri Bos ise
hmmm where 1=1 sayesinde dinamik döngüsel sorgularda kafadan 5 satır kâra geçiyoruz. güzel bir düşünce . Bu vesile ile öürenmiş olduk.