SQL Raporlama
SQL Raporlama
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.
İ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.
Merhaba,
Kolay Gelsin..
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;
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:
Sorgulama yapacağın yerdeki kodu da şu şekilde değiştirebilirsin:
Kolay gelsin..
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;
Kod: Tümünü seç
Kosul:= 'TARIH1 >= :TARIH1_ AND TARIH2 <= :TARIH2_';
if Edit1.Text <> '' then
Kosul:= Kosul + ' AND KOD = :KOD_';
bende acizane şöyle yapmıştım,
Aslanıda bu soru programlama alanına yazılmalıy dı diye düşünüyorum.
kolay gelsin
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;
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.

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?
Not : Kod larınız CODE tagları içine alınmıştır. HUSONET
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.
merhaba;
İsteğine göre sorgulama yapmaması doğal
çünkü 'Kosul' diye bir stringe SQL cümleni atmıssın ama Query1'de de bunu kullanmamıssın.
*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
iyi günler....
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.

çü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;
*'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

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.