SQL Raporlama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

SQL Raporlama

Mesaj gönderen ozcank »

Arkadaşlar;
İlk Tarih (DateTimePicker1) ve Son Tarih (DateTimePicker2) birde Edit1 alanım var.Ben SQL ile Tarih aralığı verdiğim zaman iki tarih aralığını listeleyecek Edit1 e Kod yazdığım zaman tarihden bağımsız sadece kod listeleyecek böyle bir listelemeyi nasıl yapabilirim?Yardım ederseniz çok sevinirim.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Bence Bir tane ceheckbox koy forma ona göre kontrol ettir.Cehckbox işaretliyse koda göre işaretli değilse tarihe göre gibi,,,
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,

Kod: Tümünü seç

procedure Raporla;
var
  Kosul: string;
begin
  Kosul:= 'TARIH1 >= :TARIH1_ AND TARIH2 <= :TARIH2_';
  if Edit1.Text <> '' then
    Kosul:= 'KOD = :KOD_';
  Query.SQL.Clear;
  Query.SQL.Add('SELECT * FROM TABLE_NAME');
  Query.SQL.Add('WHERE ' + Kosul);
  if not Query.Prepared then
    Query.Prepare;
  if Edit1.Text <> '' then
  begin
    Query.ParamByName('KOD_').AsString:= Edit1.Text;
  end else begin
    Query.ParamByName('TARIH1_').AsDateTime:= DateTimePicker1.DateTime;
    Query.ParamByName('TARIH2_').AsDateTime:= DateTimePicker2.DateTime;
  end;
  try
    Query.Open;
  except
    on E: Exception do
    begin
      MessageDlg('Tablo Açılamıyor !' + #13 + E.Message,
        mtError, [mbOK], 0);
      Exit;
    end;
  end;
end;
Kolay Gelsin..
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

cevabına çok teşekkür ederim bu yazmış olduğunuz kod a Checkbox eklemniz mümkün mü?
CheckBox1 işaretli ise ;

Edit1 görünsün, Edit1 ve tarih aralıklı sorgulama yapabilsin

işaretsiz ise tarih aralıklı rapor alsın?
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,

CheckBox'a aslında gerek yok çünkü Edit1 (Yani Kod) nesnesi boş bırakılırsa tarihe göre, Edit1'e bir şeyler yazılırsa da hem koda hem tarihe göre sorgulama yapılır. Ama yine de CheckBox koymak istiyorsan,

CheckBox'ın OnClick Olayına aşağıdaki kodu yazabilirsin:

Kod: Tümünü seç

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Edit1.Visible:= (Sender as TCheckBox).Checked;
end;
Sorgulama yapacağın yerdeki kodu da şu şekilde değiştirebilirsin:

Kod: Tümünü seç

  Kosul:= 'TARIH1 >= :TARIH1_ AND TARIH2 <= :TARIH2_'; 
  if Edit1.Text <> '' then 
    Kosul:= Kosul + ' AND KOD = :KOD_'; 
Kolay gelsin..
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

bende acizane şöyle yapmıştım,

Kod: Tümünü seç

var
  tarih1,tarih2:tdate;
  begin
      if checkbox1.Checked =true then
      begin
          raporsrgibquery.Close;
          raporsrgibquery.SQL.Clear;
          raporsrgibquery.SQL.Add('select*from RAPORLAR');
          raporsrgibquery.SQL.Add('Where INCTARIHI Between :tarih1 and :tarih2');
          raporsrgibquery.ParamByName('tarih1').AsDate:=datetimepicker1.Date;
          raporsrgibquery.ParamByName('tarih2').AsDate:=datetimepicker2.Date;
          raporsrgibquery.Open;
          raporsrgibquery.Last;
      end;

      if checkbox2.Checked =true then
      begin
          raporsrgibquery.Close;
          raporsrgibquery.SQL.Clear;
          raporsrgibquery.SQL.Add('select*from RAPORLAR');
          raporsrgibquery.SQL.Add('Where INCTARIHI Between :tarih1 and :tarih2 and IZ_DURUMU=:IZ_DURUMU');
          raporsrgibquery.ParamByName('tarih1').AsDate:=datetimepicker1.Date;
          raporsrgibquery.ParamByName('tarih2').AsDate:=datetimepicker2.Date;
          raporsrgibquery.ParamByName('IZ_DURUMU').AsString:=combobox1.Text;
          raporsrgibquery.Open;
          raporsrgibquery.Last;
      end;

      if checkbox3.Checked =true then
      begin
          raporsrgibquery.Close;
          raporsrgibquery.SQL.Clear;
          raporsrgibquery.SQL.Add('select*from RAPORLAR');
          raporsrgibquery.SQL.Add('Where INCTARIHI Between :tarih1 and :tarih2 and ISTOLYTURU=:ISTOLYTURU');
          raporsrgibquery.ParamByName('tarih1').AsDate:=datetimepicker1.Date;
          raporsrgibquery.ParamByName('tarih2').AsDate:=datetimepicker2.Date;
          raporsrgibquery.ParamByName('ISTOLYTURU').AsString:=DBLookupcombobox1.Text;
          raporsrgibquery.Open;
          raporsrgibquery.Last;
      end;

      if checkbox4.Checked =true then
      begin
          raporsrgibquery.Close;
          raporsrgibquery.SQL.Clear;
          raporsrgibquery.SQL.Add('select*from RAPORLAR');
          raporsrgibquery.SQL.Add('Where INCTARIHI Between :tarih1 and :tarih2 and ISTOLYTURU=:ISTOLYTURU and IZ_DURUMU=:IZ_DURUMU');
          raporsrgibquery.ParamByName('tarih1').AsDate:=datetimepicker1.Date;
          raporsrgibquery.ParamByName('tarih2').AsDate:=datetimepicker2.Date;
          raporsrgibquery.ParamByName('ISTOLYTURU').AsString:=DBLookupcombobox1.Text;
          raporsrgibquery.ParamByName('IZ_DURUMU').AsString:=combobox1.Text;
          raporsrgibquery.Open;
          raporsrgibquery.Last;
      end;

      if raporsrgibquery.IsEmpty then begin
        showmessage('Aranılan Kayıtlar Bulunamadı!');
      end;
Aslanıda bu soru programlama alanına yazılmalıy dı diye düşünüyorum.

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
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

KOD ve KOD_ ne amaclı kullandınız ben anlayamadım KOD ne? KOD_ ne?
KOD:String mi?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Arkadaşlar bu şekilde yaptım ROSERVELADSOY da not found hatası veriyor ve sorgulama yapmıyor aynı zaman da tarih sorgulaması da yapmıyor acaba biryerde hatamı yaptım?

Kod: Tümünü seç

procedure TForm26.Button1Click(Sender: TObject);
Var
Kosul:String;
begin
Kosul:='DateTimePicker1.DateTime>=:ROMONTAJTAR AND DateTimePicker2.DateTime<=:ROMONTAJTAR';
If Edit1.Text<>'' Then
Begin
Query1.Sql.Clear;
Query1.Sql.Add('SELECT * FROM ROKAYIT');
If Not Query1.Prepared Then
Query1.Prepare;
If Edit1.Text<>'' Then
Begin
Query1.ParamByName('ROSERVELADSOY').AsString:=Edit1.Text;
End
Else
Begin
Query1.ParamByName('ROILKTAR1').AsDateTime:=DateTimePicker1.DateTime;
Query1.ParamByName('ROSONTAR1').AsDateTime:=DateTimePicker2.DateTime;
End;
Try
Query1.Open;
Except
On E:Exception Do
Begin
MessageDlg('Tablo Açılamıyor !'+ #13 + E.Message,MtError,[MbOk],0);
Exit;
End;
End;
End;
End;
end.
Not : Kod larınız CODE tagları içine alınmıştır. HUSONET
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;

Kod: Tümünü seç

procedure TForm26.Button1Click(Sender: TObject); 
Var 
Kosul:String; 
begin 
Kosul:='DateTimePicker1.DateTime>=:ROMONTAJTAR AND DateTimePicker2.DateTime<=:ROMONTAJTAR'; 
If Edit1.Text<>'' Then 
Begin 
Query1.Sql.Clear; 
Query1.Sql.Add('SELECT * FROM ROKAYIT'); 
If Not Query1.Prepared Then 
Query1.Prepare; 
If Edit1.Text<>'' Then 
Begin 
Query1.ParamByName('ROSERVELADSOY').AsString:=Edit1.Text; 
End 
Else 
Begin 
Query1.ParamByName('ROILKTAR1').AsDateTime:=DateTimePicker1.DateTime; 
Query1.ParamByName('ROSONTAR1').AsDateTime:=DateTimePicker2.DateTime; 
End; 
Try 
Query1.Open; 
Except 
On E:Exception Do 
Begin 
MessageDlg('Tablo Açılamıyor !'+ #13 + E.Message,MtError,[MbOk],0); 
Exit; 
End; 
End; 
End; 
End; 
end.
İsteğine göre sorgulama yapmaması doğal :roll:
çünkü 'Kosul' diye bir stringe SQL cümleni atmıssın ama Query1'de de bunu kullanmamıssın.

Kod: Tümünü seç

  if Edit1.Text <> '' then
    begin
      Query1.ParamByName('ROSERVELADSOY').AsString := Edit1.Text;
    end
    else
    begin
      Query1.ParamByName('ROILKTAR1').AsDateTime := DateTimePicker1.DateTime;
      Query1.ParamByName('ROSONTAR1').AsDateTime := DateTimePicker2.DateTime;
    end;
*yukarıda ki kodda 'if Edit1.Text <> '' then' demissin zaten bunu demene gerek yok zaten en yukarıda bunu demissin
*'else begin' demissin zaten en yukarıda demissin 'if Edit1.Text <> '' then' ,istesende bu kod bloğuna girmez.


aşagıdaki gibi çalışması lazım gibi :roll:

Kod: Tümünü seç

procedure TForm26.Button1Click(Sender: TObject);
var
  Kosul: string;
begin
  Kosul := 'between  ROMONTAJTAR '''+DateTimePicker1.DateTime+'''  AND '''+DateTimePicker2.DateTime+''' ';
  if Edit1.Text <> '' then
  begin
    Query1.Sql.Clear;
    Query1.Sql.Add('SELECT * FROM ROKAYIT where ROSERVELADSOY=:ROSERVELADSOY and ' + Kosul + '');
      Query1.ParamByName('ROSERVELADSOY').AsString := Edit1.Text;
    try
      Query1.Prepare;
      Query1.Open;
    except
      on E: Exception do
      begin
        MessageDlg('Tablo Açılamıyor !' + #13 + E.Message, MtError, [MbOk], 0);
        Exit;
      end;
    end;
  end;
//end;
end.
iyi günler....
Cevapla