Kodu nasıl düzenlemeliyim.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Kodu nasıl düzenlemeliyim.

Mesaj gönderen bobasturk »

Merhaba arkadaşlar. Herkese Hayırlı işler Allah kolaylıklar versin.

Kod: Tümünü seç

procedure TFormRaporSrg.BitBtn1Click(Sender: TObject);
var
     s1,s3:String;
     S2:TDate;
     b_OR,b_AND:Boolean;
     begin
     s1:=Edit1.Text;
     s2:=DateTimePicker1.date;
     S3:=Edit2.Text;

     b_OR:=(s1<>'') OR (s2<>'') OR (s3<>'');
     b_AND:=false;

     with ibQuery1 do
     begin
     if Active then Close;
     with SQL do
     begin
     Clear;
     Add('Select*From RAPORLAR');
     if b_OR then Add('Where');

     if s1<>'' then add('(RAPORNO LIKE ''%'+s1+'%'')');
     b_AND:=b_AND OR (S1<>'');

     if b_AND AND(s2<>'') then Add('AND');
     if s2<>'' then add('(INCTARIHI LIKE ''%'+s2+'%'')');
     b_AND:=b_AND OR (S2<>'');

     if b_AND AND(s3<>'') then Add('AND');
     if s3<>'' then add('(MUSADSOYAD LIKE ''%'+s3+'%'')');
     b_AND:=b_AND OR (S3<>'');

     add('ORDER BY RAPORNO');
     end;

     Open;
     if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
   end;
yukarıdaki kod ile üç kutucuk içinden hangisine veri girilirse ona göre sorgulama yapmak istiyorum. s2 değişkeni önceki kullanımlarımda Date bir alandı ve sorgulamada sorun yaşamıyordum ve yine kodda s1,s2,s3: string; olarak değişken tanımlıyordum ve tarihsel alanı sorgulayabiliyordum. O zamanki tablom dbaseIV ile hazırlanmıştı.

şimdiki çalışmamda firebird ve ibexpert ile tablo hazırladım ve tarihsel alanlarım date. ama sorgulamada tarihsel alanı sorgulama işlemini yapmadığı için s2 yi tdate olarak belirledim ve çalıştırdığımda OR (S2<>'') satırında beklemeye aldı buradan anlıyorum ki aşağıya doğru hatalar devam edicek, burada s2 satırlarını nasıl düzenlemem gerekir.

Saygı ve sevgilerle
hayırlı çalışmalar.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Kod: Tümünü seç

procedure TFormRaporSrg.BitBtn1Click(Sender: TObject);
var
     s1,s2,s3:String;
     b_OR,b_AND:Boolean;
     begin
     s1:=Edit1.Text;
     s2:=Edit2.text;
     s3:=edit3.Text;

     b_OR:=(s1<>'') OR (s2<>'') or (s3<>'');
     b_AND:=false;

     with ibQuery1 do
     begin
     if Active then Close;
     with SQL do
     begin
     Clear;
     Add('Select*From RAPORLAR');
     if b_OR then Add('Where');

     if s1<>'' then add('(RAPORNO LIKE ''%'+s1+'%'')');
     b_AND:=b_AND OR (S1<>'');

     if b_AND AND(s2<>'') then Add('AND');
     if s2<>'' then add('(MUSADSOYAD LIKE ''%'+s2+'%'')');
     b_AND:=b_AND OR (S2<>'');

     if b_AND AND(S3<>'') then Add('AND');
     if s3<>'' then add('(INCTARIHI LIKE ''%'+s3+'%'')');
     b_AND:=b_AND OR (S3<>'');

     add('ORDER BY RAPORNO');
     end;

     Open;
     if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
   end;
end;
kodun bu haliyle s1 ve s2 alanlarına girilen verileri sorgu sonuclarını alabiliyorum fakat s3 alana tarih girdiğimde aradığınız kayıt bulunamadı diyerek boş dönüyor.

Hata vermiyor. kod çalışıyor soruç boş dönüyor.

Kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.

Kod: Tümünü seç

procedure TFormRaporSrg.BitBtn1Click(Sender: TObject); 
var 
     s1,,s2,s3:String; 
begin 
     s1:=Edit1.Text; 
     s2:=datetostr(DateTimePicker1.date); 
     S3:=Edit2.Text; 
     ibquery1.close;//zaten kapalıysa hata vermeyecektir
     with ibQuery1.sql do 
     begin 
       Clear; 
       Add('Select*From RAPORLAR'); 
       Add('Where'); 
       add('(RAPORNO LIKE ''%'+s1+'%'')');//eğer s1 boşsa zaten tum kayıtlar gelir
       Add('AND'); 
       add('(INCTARIHI = '''+s2+''')'); //tarih de like  :? 
       Add('AND'); 
       add('(MUSADSOYAD LIKE ''%'+s3+'%'')');//s3 boşsa zaten tüm kayıtlar gelir
       add('ORDER BY RAPORNO'); 
     end; //with
     ibquery1.Open; 
     if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?'); 
   end; //procedure
Madem ib/fb kullanıyorsun sp kullanarak parametrelerle halletmek daha kullanışlı olur kanaatindeyim.
Kolay Gelsin..
Kolay Gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Sevgili ustam editlerden biri boş ise tüm verilerin dökülmesini istemiyorum. O yüzden bu daha önce ADO ile kullandığım kodu kullanıyorum. Bu sorgulama alanım genel sorgulama alanı olucak eldeki veriye göre sorgulama yapma üç tane kriter alanım var RAPORNO, MUSADSOYAD, INCTARIHI kişi bunlardan birini girerek sorgulama yapabilsin istiyorum. Daha önce soruyu değişik şekilde sormuştum ve ben yapamadım bu komutun adoquery1 kısmını ibquery1 olarak değiştirdim ve string alanlarda sonucu sorunsuz aldım şimdikine ise farklı olarak tarih alanı eklendi ve tarih alanına veri girince sorgulanınca aradığınız kayıt bulunamadı diyerek boş dönüyor. Kayıtlar içinde girilmiş olan bi tarih ile denedim yinede boş döndü. Burada tablo kısmında işi yapmayı bilmediğimden şimdilik böle götürüyorum. Tarih alanı date olduğu için onu ibquery de tanımlayamıyorum heral

teşekkürler
kolay gele
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Pardon yanlış anlamışım.

Tarih aramalarında like kullanılması sanırım pek uydun değil.
şöyle bişi sanırım işinizi görebilir.

Kod: Tümünü seç

procedure TFormRaporSrg.BitBtn1Click(Sender: TObject);
var
s1,s2,s3,ss:String;
begin
  s1:=Edit1.Text;
  s2:=Edit2.text;
  s3:=edit3.Text;
  ibquery1.close;
  with SQL do
  begin
    Clear;
    Add('Select * From RAPORLAR');
    if s1<>'' then s:='(RAPORNO LIKE ''%'+s1+'%'')';
    if s2<>'' then
    begin
      if s<>'' then s:=s+' AND ';
      s:=s+'(MUSADSOYAD LIKE ''%'+s2+'%'')'
    end;
    if s3<>'' then
    begin
      if s<>'' then s:=s+' AND ';
      s:=s+'(INCTARIHI = '''+s3+''')'
     end;
    if s<>'' then add ('WHERE '+s);
    add('ORDER BY RAPORNO');
  end;
  ibquery1.Open;
  if ibquery1.IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
end;
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustadım ellerine sağlık, kodun dilediğimiz gibi çalıştı. Buradan dbase ADO da like ile çalışan tarih alanının ib de like ile çalışmadığını öğrenmiş olduk.

ve ib de bu tür sorguyu öğrenmiş olduk. İşin mantığını tam kavrayabilmek için s genel bi değişken olarak mı kullanıldı // diye kısa açıklamasını yapabilirmisin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

:roll:
ordaki s alışkanlıkdan dolayı s
var kısmında tanımladığım ss değişkeni olacak aslında. :roll:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla