Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   FastReport - Datenbankanbindung (https://www.delphipraxis.net/150884-fastreport-datenbankanbindung.html)

Cogito 29. Apr 2010 14:09


FastReport - Datenbankanbindung
 
Hallo zusammen,

ich bin gerade dabei FastReports zu testen um muss gestehen dass mir die Datenbankanbindung Probleme bereitet. Vielleicht könnt ihr mir helfen.
1. Ich nutze in meinem Programm bereits Datenbankverbindungen, die der Benutzer anlegen und speichern kann (unter anderem auch für selbst zu erstellende Abfragen usw...). Kann ich eine vom Benutzer eingerichtete DB-Verbindung nun sozusagen auch an FastReport durchreichen, damit der Benutzer diese dort nicht mehr extra machen braucht und sofort mit dem Aufbau eines Reports beginnen kann? (Ich verwende übrigens die Unidac Komponenten von devart)

2. Werden Datenbankverbindungen und die verwendeten Abfragen in einem Report für einen späteren Ausdruck gespeichert?

Bebe 29. Apr 2010 19:27

Re: FastReport - Datenbankanbindung
 
Liste der Anhänge anzeigen (Anzahl: 1)
zu 1. Ja
zu 2. Ja (QueryBuilder), jedoch sowie ich es gemacht habe nicht!

Ich habe dir mal ein kleines Projekt gebastelt. Da ich aber die Unidac Komponente nicht habe, dachte ich mir, es geht auch mit der VirtualTable Komponente.

hier ein kleiner Code Ausschnitt (Ausschnitt ist gut, das ist alles ... :) )
Delphi-Quellcode:
procedure TfrmReporting.btnGruppeClick(Sender: TObject);
begin
  dsGlobal.DataSet := tblGruppe; // mit fester Datenverbindung (tblGruppe)
  frxReport1.PrepareReport(True); // leere den Report
  frxReport1.DesignReport;       // damit öffnest du den Designer / im Report werden die Felder von tblGruppe angezeigt
end;

procedure TfrmReporting.btnMitarbeiterClick(Sender: TObject);
begin
  dsGlobal.DataSet := tblMitarbeiter; // mit fester Datenverbindung (tblMitarbeiter)
  frxReport1.PrepareReport(True);     // leere den Report
  frxReport1.DesignReport;            // damit öffnest du den Designer / im Report werden die Felder von tblMitarbeiter angezeigt
end;
noch mal zu 2. im Report wird natürlich die Verbindung gespeichert, aber hier tausche ich ja das Dataset aus, was der Report ja nicht speichert. Dadurch musst du zu jedem Report die angezapfte Tabelle oder Abfrage irgendwo zusätzlich speichern.

Meine Verknüpfung ist ja : Dataset > Datasource > frxDBDataset > frxReport

Gespeichert wird im Report nur die Verbindung frxDBDataset > frxReport

Gruß
Matze

Cogito 30. Apr 2010 08:03

Re: FastReport - Datenbankanbindung
 
Vielen Dank erstmal für die ausführliche Antwort!
Wie könnte ich denn eine Verbindung zwischen dem Report und der verwendeten Datenquelle herstellen? Nach dem Aufruf des Designers weiss ich ja nicht mal ob der Anwender den Report überhaupt abspeichert.

Bebe 30. Apr 2010 16:54

Re: FastReport - Datenbankanbindung
 
In einer INI Datei vielleicht oder aber alle Details in einer Tabelle ablegen. Bei der INI Datei eine pro Report oder so.

Da du ja im Programm den Report erstellen willst, weißt du ja wann der Designer beendet wird, dann kannst du dir alle Details aus dem Report entnehmen und abspeichern.

EarlyBird 30. Apr 2010 19:09

Re: FastReport - Datenbankanbindung
 
Hallo Bebe,
bei den SDAC Komponenten (auch von DEVART) ist im Demoordner eine FastReport Komponente mit der man Tables und Querys direkt im Report einbinden kann.
Das funktioniert super. Ich mache einen großteil meiner Reports so.
Bei mir ist die Komponente im Ordner C:\Programme\Devart\Sdac\Demos\Win32\ThirdParty\Fa stReport\FR4
Dort findest Du auch eine gute Readme.txt Datei.
So weit ich weis ist die Komponente bei UNIDAC auch dabei.

Gruß EarlyBird

Bebe 30. Apr 2010 19:26

Re: FastReport - Datenbankanbindung
 
Hallo EarlyBird,

danke für den Tipp, jedoch habe ich ihm auch diesen Vorschlag schon unterbreitet.

Siehe Datenmodell

Mir ging es in um die starre Vorgabe eine Datenquelle, natürlich ist die Vorgehensweise direkt mit der DevArt Komponente besser, da es die Datenbverbindung mit abspeichert.

Gruß
Matze

Cogito 1. Mai 2010 08:58

Re: FastReport - Datenbankanbindung
 
Zitat:

Zitat von Bebe
In einer INI Datei vielleicht oder aber alle Details in einer Tabelle ablegen. Bei der INI Datei eine pro Report oder so.

Da du ja im Programm den Report erstellen willst, weißt du ja wann der Designer beendet wird, dann kannst du dir alle Details aus dem Report entnehmen und abspeichern.

Kannst Du mir vielleicht mal ein Beispiel geben, wie ich nach dem Schliessen des Report-Designers Details über den erstellten Report rauskriegen kann?

Bebe 1. Mai 2010 09:37

Re: FastReport - Datenbankanbindung
 
zum Beispiel nach dem Befehl frxReport1.DesignReport den Zustand abfragen per frxReport1.Modified.

Delphi-Quellcode:
  dsGlobal.DataSet := tblMitarbeiter;
  frxReport1.PrepareReport(True); // damit löscht du, falls vorhanden, alte Report in der Komponente
  frxReport1.DesignReport;
  if frxReport1.Modified then
    ShowMessage('Report wurde geändert');

Cogito 3. Mai 2010 10:28

Re: FastReport - Datenbankanbindung
 
Vielen Dank, das funktioniert erst mal ganz gut.
Jetzt hab ich das Problem, das ich einen Report öffnen möchte (per Quellcode, nicht mit dem Dialog). Dazu mach ich folgendes:

Code:
frxReport.LoadFromFile(Dateiname);
frxReport.PrepareReport(True);
frxReport.DesignReport;
Doch dabei öffnet er mir nicht den Report (den ich kurz zuvor erzeugt habe), sondern bringt mir eine Schutzverletzung beim schliessen der Anwendung. Ich habe den Designer in mein Programm eingebettet, analog dem Demoprogramm.
Mach ich hier was falsch?

Edit: Hab den Fehler gerade selber gefunden, ich muss natürlich mit dem Referenzobjekt arbeiten! :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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