ich möchte gern in mein PRG einen Report einbauen, nun habe ich schon einige
ANleitungen gegoogelt, aber be diesen ist immer eine feste abfrage in der
SQL-Komponente eingetragen,
Mein Prg habe ich aber so aufgebaut das die Abfragen im Quelltext stehen
und es nur eine SQL Komponente gibt welcher den abfragestring zugewiesen bekommt
Frage: bin ich jetzt in einer Sackgasse
oder kann mann einen Report auch erstellen ohne feste SQLabfragen in den Komponenten
einzutragen
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, sqlite3conn, sqldb, db, FileUtil, TAGraph, TARadialSeries,
TASeries, Forms, Controls, Graphics,
Dialogs, StdCtrls, DBGrids, DbCtrls, ComCtrls, ExtDlgs, ExtCtrls, Grids,
strutils;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Bu_grid: TButton;
Bu_Einbuchen: TButton;
But_Calender: TButton;
CalendarDialog1: TCalendarDialog;
Chart1: TChart;
Chart1BarSeries1: TBarSeries;
ComboKostenarten: TComboBox;
Label2: TLabel;
Label_datum: TLabel;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
PageControl1: TPageControl;
SQLite3Connection: TSQLite3Connection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
StringGrid1: TStringGrid;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Bu_EinbuchenClick(Sender: TObject);
procedure But_CalenderClick(Sender: TObject);
procedure Bu_gridClick(Sender: TObject);
procedure ComboBox1Select(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StringGrid1Enter(Sender: TObject);
procedure TabSheet2Enter(Sender: TObject);
procedure GRID1_fuellen();
procedure alle_Daten_laden();
procedure FEHLERBEHANDLUNG(fehlertext,fehlerinhalt:string);
procedure benzinpreisdarstellung();
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin {
SQLQuery1.close;
SQLQuery1.SQL.Text:='select * from kostenarten';
SQLQuery1.open;
ComboBox1.Items.Clear;
while SQLQuery1.EOF = false do
begin
// ListBox1.Items.Add(SQLQuery1.FieldByName('id').AsString);
ComboBox1.Items.Add(SQLQuery1.FieldByName('id').AsString);
SQLQuery1.Next;
end;
}
//
benzinpreisdarstellung();
end;
procedure TForm1.Bu_EinbuchenClick(Sender: TObject);
Var
TT,MM,JJ:Word ;
kmstand,benzinpreis,getanktemenge,kommentar, buchungsdatum,TTT : String;
kostenart : integer;
testvar1 : Real;
begin
DecodeDate(CalendarDialog1.date,JJ,MM,TT); // das Datum aufbröseln
buchungsdatum:=(IntToStr(JJ)+'-'+IntToStr(MM)+'-'+IntToStr(TT));
kostenart:=(ComboKostenarten.ItemIndex+1);
kmstand:=LabeledEdit1.Text;
kommentar:=LabeledEdit4.Text;
benzinpreis:=StringReplace((LabeledEdit2.Text),',','.',[rfreplaceall]);
getanktemenge:=StringReplace((LabeledEdit3.Text),',','.',[rfreplaceall]);
try // Testen das keine Buchstaben eingeben werden //
StrToFloat(kmstand);
StrToFloat(benzinpreis);
StrToFloat(getanktemenge);
Except
FEHLERBEHANDLUNG('FEHLER','es könen nur Zahlen gebucht werden');
exit // Procedure abrechen = also keine SQL mehr ausführen //
end;
SQLQuery1.close;
SQLQuery1.SQL.Text:='insert into buchungen Values (NULL,:kostenart_fk, :preis, :menge, :kmstand, :datum, :beschreibung,:kmstart)';
SQLQuery1.ParamByName('kostenart_fk').AsInteger:=kostenart;
SQLQuery1.ParamByName('preis').AsString:=benzinpreis;
SQLQuery1.ParamByName('menge').AsString:=getanktemenge;
SQLQuery1.ParamByName('kmstand').AsString:=kmstand;
SQLQuery1.ParamByName('datum').AsString:=buchungsdatum;
SQLQuery1.ParamByName('beschreibung').AsString:=kommentar;
SQLQuery1.ParamByName('kmstart');
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
FEHLERBEHANDLUNG('PERFEKT','Buchung ist eingtragen');
end;
procedure TForm1.But_CalenderClick(Sender: TObject);
var
TMPD:double;
T,M,J: Word;
begin
CalendarDialog1.Date:=now(); // Standard = heute
CalendarDialog1.Execute;
TMPD:=CalendarDialog1.Date;
DecodeDate(TMPD,J,M,T); // die Datumszahl als Double Aufteilen im Tag Monat Jahr
Label_datum.Caption:=FloatToStr(T)+'.'+FloatToStr(M)+'.'+FloatToStr(J);
end;
procedure TForm1.Bu_gridClick(Sender: TObject);
begin
GRID1_fuellen();
end;
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
// label1.Caption:=IntToStr(ComboBox1.ItemIndex+1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
alle_Daten_laden();
{ TODO 4 : Die Auswertung auf Tab3 mit eintragen und nur noch per Label }
benzinpreisdarstellung();
//TabSheet2.;
end;
procedure TForm1.StringGrid1Enter(Sender: TObject);
begin
GRID1_fuellen();
end;
procedure TForm1.TabSheet2Enter(Sender: TObject);
begin
SQLQuery1.Close;
SQLQuery1.SQL.Text:='select * from kostenarten';
SQLQuery1.Open;
ComboKostenarten.Clear;
while SQLQuery1.EOF = False do // Füllen der ComboBox //
begin
ComboKostenarten.Items.Add(SQLQuery1.FieldByName('id').AsString + ' - ' + SQLQuery1.FieldByName('kosten').AsString);
SQLQuery1.Next;
end;
SQLQuery1.Close;
ComboKostenarten.ItemIndex:=0;
end;
procedure TForm1.GRID1_fuellen();
var
reihe : integer;
begin
StringGrid1.Clean;
SQLQuery1.close;
SQLQuery1.SQL.Text:='select * from auswertung order by kmstand desc';
SQLQuery1.open;
reihe:=1;
StringGrid1.Cells[0,0]:='datum';
StringGrid1.Cells[1,0]:='kmstand';
StringGrid1.Cells[3,0]:='LtrPreis';
StringGrid1.Cells[2,0]:='gefahren';
StringGrid1.Cells[4,0]:='menge';
StringGrid1.Cells[5,0]:='bezahlt';
StringGrid1.Cells[6,0]:='Verbrauch';
while SQLQuery1.EOF = False do
begin
StringGrid1.RowCount:=reihe+1;
StringGrid1.Cells[0,reihe]:=(SQLQuery1.FieldByName('datum').AsString);
StringGrid1.Cells[1,reihe]:=(SQLQuery1.FieldByName('kmstand').AsString);
StringGrid1.Cells[3,reihe]:=(SQLQuery1.FieldByName('LtrPreis').AsString);
StringGrid1.Cells[2,reihe]:=(SQLQuery1.FieldByName('gefahren').AsString);
StringGrid1.Cells[4,reihe]:=(SQLQuery1.FieldByName('menge').AsString);
StringGrid1.Cells[5,reihe]:=(SQLQuery1.FieldByName('bezahlt').AsString);
StringGrid1.Cells[6,reihe]:=(SQLQuery1.FieldByName('Verbrauch').AsString);
reihe:=reihe+1;
SQLQuery1.Next;
end;
SQLQuery1.Close;
end;
procedure TForm1.alle_Daten_laden();
begin
// Alle Daten sofort laden //
{ TODO 4 : TEST3 gegen VIEW kostenauswertung ändern }
{ TODO 2 : eine Grafische Komponente einfügen die den Kostenverlauf BENZINPREIS grafisch darstellt }
SQLQuery1.Close;
SQLQuery1.SQL.Text:='select * from test3 order by id desc';
SQLQuery1.open;
{
// memo1.Clear;
while SQLQuery1.eof = false do
begin
Memo1.Lines.Add(SQLQuery1.FieldByName('GETANKT').AsString + ' Ltr getankt ' + SQLQuery1.FieldByName('gefahren').AsString + ' gefahren ergibt einen Verbrauch von: ' + SQLQuery1.FieldByName('VERBRAUCHT_auf_100').AsString + ' Ltr');
Memo1.Lines.Add('');
SQLQuery1.Next;
end;
}
SQLQuery1.Close;
// zweite abfrage //
SQLQuery1.sql.Text:='select * from kostenauswertung';
SQLQuery1.open;
while SQLQuery1.EOF = false do
begin
Label2.Caption:=('Bislang ' + SQLQuery1.Fields[0].AsString +' € inkl ' + SQLQuery1.Fields[1].AsString + ' € Steuern bezahlt um ' + SQLQuery1.Fields[3].AsString + ' KM zu fahren' +#13#10+
'Getankt wurden dafür ' + SQLQuery1.Fields[2].AsString +' Ltr Benzin' + #13#10 + 'was einen Verbrauch von ' + SQLQuery1.Fields[5].AsString + ' Ltr auf 100 KM ausmacht')+#13#10+('und ' + SQLQuery1.Fields[4].AsString + ' € Kosten pro KM ergibt');
// Label3.Caption:=('Getankt wurden dafür ' + SQLQuery1.Fields[2].AsString +' Ltr Benzin was einen Verbrauch von ' + SQLQuery1.Fields[5].AsString + ' Ltr auf 100 KM ausmacht')+#13#10+('und ' + SQLQuery1.Fields[4].AsString + ' € Kosten pro KM ergibt');
SQLQuery1.Next;
end;
SQLQuery1.Close;
end;
procedure TForm1.FEHLERBEHANDLUNG(fehlertext,fehlerinhalt:string);
begin
MessageDlg(fehlertext,fehlerinhalt +#13#10+'Setze alle Eingaben auf 000',mtConfirmation,[mbOK],0);
LabeledEdit1.Text:='000';
LabeledEdit2.Text:='000';
LabeledEdit3.Text:='000';
end;
procedure TForm1.benzinpreisdarstellung();
var balken : integer;
erg : Real;
begin
// 3D Effekt
Chart1BarSeries1.Depth:=2;
// und die Balken in Blau
Chart1BarSeries1.BarBrush.Color:=clblue;
// x und Y Leiste in 1er Schritten
Chart1.BottomAxis.Intervals.NiceSteps:='1';
Chart1.LeftAxis.Intervals.NiceSteps:='1.1';
// Eine Textbeschreibung was der Chart Anzeigt
Chart1.Title.Text.Add('Benzinkosten Verlauf');
Chart1.Title.Visible:=true;
// Doppelzeichnen vermeiden
Chart1BarSeries1.Clear;
Chart1.Title.Text.Clear;
balken:=0;
SQLQuery1.close;
SQLQuery1.SQL.Text:='select LtrPreis from auswertung';
SQLQuery1.Open;
while SQLQuery1.EOF = False do
begin
erg := (SQLQuery1.FieldByName('LtrPreis').AsFloat) ;
Chart1BarSeries1.Add(erg);
balken:=balken+1;
SQLQuery1.Next;
end;
end;
end.