Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   FastReport ohne Datenbank (https://www.delphipraxis.net/207621-fastreport-ohne-datenbank.html)

Friday 15. Apr 2021 11:34

FastReport ohne Datenbank
 
Hallo,
mit Delphi 10.4.2 und dem darin enthaltenen FastReport 6 möchte ich meinen ersten Report erstellen.
Eine Datenbank ist nicht vorhanden, auch keine Dateien, sondern Daten die im Programm generiert werden, sollen als Report ausgegeben werden.
Meinem Verständnis nach geht das mit TfrxUserDataSet, bei dem im Ereignis
Code:
procedure TForm1.TfrxUserDataSet1GetValue(const VarName: string; var Value: Variant);
oder
Code:
procedure TForm1.TfrxUserDataSet1NewGetValue(Sender: TObject; const VarName: string; var Value: Variant);
programmatisch Value der gewünschte Wert in Abhängigkeit von VarName und der Anzahl wie oft das Ereignis bereits aufgerufen wurde zugewiesen wird.

Meine Frage dazu: Gibt es auch eine Möglichkeit die Daten im Vorfeld alle in ein bzw mehrere DataSets zu füllen (ohne extra eine xml Datei oder Datenbank zu erstellen)?
Leider gibt es von FastReport keine Samples in der mitgelieferten Version und auch die Hilfe ist zu diesem Thema dürftig.

Der schöne Günther 15. Apr 2021 11:58

AW: FastReport ohne Datenbank
 
Ich bin kein FastReport-Experte, traue mich aber zu sagen "Ja, die UserDataSets sind der richtige Weg dafür".

Ich persönlich habe die am Schluss trotzdem nie genutzt da mein Anwendungsfall eher war "Mach ein schönes A4-Blatt" statt "Band-Reports mit dynamischer Länge". Ich gehe dann einfach hin, suche mir auf dem Report die Komponenten (Textfelder) mit dem jeweiligen Namen (z.B. clientAddressTextbox), und setze den Inhalt per Code. Das geht natürlich immer ��

himitsu 15. Apr 2021 12:03

AW: FastReport ohne Datenbank
 
Delphi-Referenz durchsuchenTClientDataSet
MemoryDataSet
VirtualDataSet
oder wie auch immer ein Hesteller es nennt

* Columns erstellen
* Dataset aktiv setzen
* und dann viele Insert+Post, bis voll

dummzeuch 15. Apr 2021 12:36

AW: FastReport ohne Datenbank
 
Zitat:

Zitat von Friday (Beitrag 1487178)
mit Delphi 10.4.2 und dem darin enthaltenen FastReport 6 möchte ich meinen ersten Report erstellen.
Eine Datenbank ist nicht vorhanden, auch keine Dateien, sondern Daten die im Programm generiert werden, sollen als Report ausgegeben werden.
Meinem Verständnis nach geht das mit TfrxUserDataSet, bei dem im Ereignis
Code:
procedure TForm1.TfrxUserDataSet1GetValue(const VarName: string; var Value: Variant);
oder
Code:
procedure TForm1.TfrxUserDataSet1NewGetValue(Sender: TObject; const VarName: string; var Value: Variant);
programmatisch Value der gewünschte Wert in Abhängigkeit von VarName und der Anzahl wie oft das Ereignis bereits aufgerufen wurde zugewiesen wird.

Soweit korrekt. Machen wir seit Jahren so - allerdings mit der Vollversion von Fastreport.

Zitat:

Meine Frage dazu: Gibt es auch eine Möglichkeit die Daten im Vorfeld alle in ein bzw mehrere DataSets zu füllen (ohne extra eine xml Datei oder Datenbank zu erstellen)?
Leider gibt es von FastReport keine Samples in der mitgelieferten Version und auch die Hilfe ist zu diesem Thema dürftig.
Das wiederum geht nicht mit frxUserDataSet. Dazu muss man ein anderes Dataset verwenden, das man so fuellen kann, TMemTable oder sowas.

softwarejunk 15. Apr 2021 15:18

AW: FastReport ohne Datenbank
 
Ich bin ebenfalls kein Experte, kann aber Günther in seiner Meinung nur bestätigen. Ich hoffe dir hilft es. Du kannst von weiteren Fortschritten gerne berichten.


Liebe Grüße

juergen 15. Apr 2021 15:19

AW: FastReport ohne Datenbank
 
Ich hab das mit einer StingList() mal so gemacht

Delphi-Quellcode:
TYPE
  Tfrm_Main = class(TForm)
    ...
    frxReport1: TfrxReport;
    StringDS: TfrxUserDataSet;
   

 
PROCEDURE Tfrm_Main.frxReport1GetValue(
  CONST
  VarName:
  STRING;
  VAR
  Value:
  Variant );
BEGIN
  IF CompareText( VarName, 'element' ) = 0 THEN Value := sl[StringDS.RecNo];
END;
 
 


 Procedure....
.....  
      Screen.Cursor := crSQLWait;
    TRY
      BEGIN      
        StringDS.RangeEnd := reCount;
        StringDS.RangeEndCount := sl.Count;
        frxReport1.ShowReport;
      END;
    FINALLY
      Screen.Cursor := crDefault;
    END;


Edit: Das ist in der Demo von FastReport auch so beschrieben (...FastReport6\Demos\PrintStringList\)

TurboMagic 15. Apr 2021 19:43

AW: FastReport ohne Datenbank
 
Wo werden denn hier die Daten in das UserDataset geschrieben?

juergen 15. Apr 2021 20:17

AW: FastReport ohne Datenbank
 
@TurboMagic,
Danke für den Hinweis! :thumb:
Ich hatte das Event GetValue() vom frxReport1 ganz vergessen.
Habe das in meinem Code-Ausschnitt ergänzt.

Friday 16. Apr 2021 06:29

AW: FastReport ohne Datenbank
 
Danke für die Hinweise, vielleicht bleibe ich dann doch erstmal beim frxUserDataSet. Bis auf Bilder in Bands (also Zuweisung des Bildes über Ereignis OnGetBlobValue) klappt das so auch.
Aber aktuell reicht mir auch die Zuweisung einzelner Bilder.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz