AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fast Report - dataset does not exist

Ein Thema von RedOne · begonnen am 24. Jan 2013 · letzter Beitrag vom 1. Feb 2013
 
RedOne

Registriert seit: 2. Jun 2008
71 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Fast Report - dataset does not exist

  Alt 30. Jan 2013, 18:28
Hallo zusammen

Ich habs nun soweit geändert wie vorgeschlagen, aber immer noch die selben Probleme:
Initialisiere ich das frxDBDataset mit dem Report als Parent, wird kein Dataset gefunden. Initialisiere ich es mit Nil, sind auf dem Report 3 Datasets mit gleichem Namen.

Das Problem ist immer noch: Ich designe die Reports zur Laufzeit und gebe ein Dataset mit. Diesem Dataset habe ich einen Namen vergeben. Alle so generierten Reports greifen auf das Dataset mit diesem Namen zu. Wird ein Report ausgeführt, generiere ich den frxReport sowie das Dataset zur Laufzeit und weise es dem frxReport zu. Und damit mehrere Reports gleichzeitig ausgeführt werden können und jeder Report nur auf sein Dataset zugreifen kann, soll das Dataset nicht Global sein (wird es aber sobald man es mit Nil initialisiert).

Irgendwo habe ich einen Denkfehler... Das ist doch ein übliches Szenario? Eine Software, verschiedene Reports, auf allen Reports den gleichen Datasetname, das Dataset zur Laufzeit generieren (das SQL-Statement wird zusammen mit dem Report in einem eigenen Dateiformat gespeichert)...

Delphi-Quellcode:
(*
  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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz