AramaKriteri Bos ise

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

AramaKriteri Bos ise

Mesaj gönderen dtgb »

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;
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: AramaKriteri Bos ise

Mesaj gönderen bobasturk »

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.

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.');
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.

Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: AramaKriteri Bos ise

Mesaj gönderen mrmarman »

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.

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;
@bobasturk'ün kodu da şu şekilde olurdu.

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;
Resim
Resim ....Resim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: AramaKriteri Bos ise

Mesaj gönderen bobasturk »

ustam ellerine sağlık, müteşekkirim.

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.

Resim
Kullanıcı avatarı
dtgb
Üye
Mesajlar: 175
Kayıt: 07 May 2004 10:02

Re: AramaKriteri Bos ise

Mesaj gönderen dtgb »

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.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: AramaKriteri Bos ise

Mesaj gönderen conari »

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
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: AramaKriteri Bos ise

Mesaj gönderen Lost Soul »

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.
Cevapla