(*
Zur Erklärung:
DBReport = Eigenes Reportformat (Zip) aus der Datenbank. In diesem ist ein Fastreport (fr3) sowie ein SQL-Statement enthalten
frxDataset = "Datasetcontainer". Das "richtige" Dataset wird beim Ausführen generiert und dem frxDataset zugewiesen.
*)
unit tsReporterNew;
interface
uses
frxClass, frxBarcode, frxDBSet, tsDB,
DB, Classes;
type
TReportController =
class
private
FfrxReport: TfrxReport;
FfrxDataSet: TfrxDBDataset;
FDBReport: TReport;
FSQL:
string;
procedure InternalPrepareReport;
public
property SQL:
string read FSQL
write FSQL;
procedure AddDBReport( _rep: TReport );
function GetDBReport: TReport;
procedure ShowReport( _clearLastReport: Boolean = true );
procedure DesignReport;
public
constructor Create;
destructor Destroy;
override;
end;
implementation
uses
tsHelpers;
{ TReportController }
procedure TReportController.AddDBReport(_rep: TReport);
begin
FDBReport:= _rep;
FSQL:= FDBReport.SQL;
FfrxReport.LoadFromStream( FDBReport.Report );
// FfrxDataSet.DataSet:= nil;
FfrxReport.ReportOptions.
Name:= FDBReport.
Name;
FfrxReport.PrintOptions.Printer:= FDBReport.Printer;
end;
constructor TReportController.Create;
begin
FfrxReport:= TfrxReport.Create(
nil );
FfrxDataSet:= TfrxDBDataset.Create( FfrxReport );
// FfrxDataSet.Parent:= FfrxReport;
FfrxDataSet.
Name:= '
reportdataset';
FfrxDataSet.DataSet:=
nil;
FfrxDataSet.UserName:= '
reportdataset';
FfrxReport.DataSets.Add( FfrxDataSet );
// FfrxReport.DataSet:= FfrxDataSet;
end;
procedure TReportController.DesignReport;
begin
InternalPrepareReport;
FfrxReport.PrepareReport( true );
FfrxReport.DesignReport( true );
end;
destructor TReportController.Destroy;
begin
if Assigned( FfrxDataSet.DataSet )
then
FfrxDataSet.DataSet.Free;
FfrxDataSet.Free;
FfrxReport.Free;
inherited;
end;
function TReportController.GetDBReport: TReport;
begin
FDBReport.Report.Clear;
FfrxReport.SaveToStream( FDBReport.Report );
FDBReport.Report.Position:= 0;
Result:= FDBReport;
end;
procedure TReportController.InternalPrepareReport;
var
ds: TDataSet;
begin
if Assigned( FfrxDataSet.DataSet )
then begin
FfrxDataSet.DataSet.Free;
FfrxDataSet.DataSet:=
nil;
end;
FfrxDataSet.DataSet:= TEDB.Instance.CreateDataset( TSQLPatcher.ReplaceConstants( FSQL ));
//Erstellt das Dataset (TDataset)
// DataSets.Add( FDBDataset );
end;
procedure TReportController.ShowReport(_clearLastReport: Boolean);
begin
InternalPrepareReport;
FfrxReport.ShowReport( _clearLastReport );
end;
end.