Beliebige Datenbank-Abfragen in FastReport: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Im Report)
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 13: Zeile 13:
 
Dieser Artikel zeigt, wie einfach das geht.  
 
Dieser Artikel zeigt, wie einfach das geht.  
 
;Allerdings muss man sagen, dass man hierfür Datenbank-Kenntnisse haben sollte und die SQL-Sprache kennen sollte!
 
;Allerdings muss man sagen, dass man hierfür Datenbank-Kenntnisse haben sollte und die SQL-Sprache kennen sollte!
 +
 +
== Die Seite Data im Report ==
 +
 +
in jedem Report gibt es eine Seite "Data" in dem Register links oben.
 +
 +
[[Datei:FastReport_Data_01_RegisterSeite.png]]
 +
 +
Hier kann man zusätzliche Datenquellen unterbringen, die auf Tabellen der Datenbank zugreifen:
 +
 +
;ADO-Table
 +
:Greift direkt auf eine Tabelle der Datenbank zu. Man kann/muss den Namen der Tabelle angeben und kann die Daten filtern, z.B. die Auftragsdaten nach der Auftragsnummer.
 +
 +
;ADO-Query
 +
:Greift über eine SQL-Abfrage auf beliebige Tabellen der Datenbank zu. Man kann/muss die SQL-Abfrage angeben und kann die Daten über eine "Where"-Klausel mit einem Parameter filtern, z.B. die Auftragsdaten nach der Auftragsnummer. Diese Methode ist sehr flexibel, erfordert aber Datenbank- und SQL-Kenntnisse!
 +
:Dieser Artikel beschreibt diese Methode.
 +
 +
== Einfügen einer Query in die Data-Seite ==
 +
 +
Dazu zieht man einfach das Query-Objekt aus der Leiste links auf die Data-Seite.
 +
 +
Die Query hat nun folgende wichtige Eigenschaften:
 +
 +
 +
== Eigenschaften der Query ==
 +
 +
Die wichtigsten Eigenschaften einer Query sind:
 +
 +
{| class="wikitable" style="text-align: left;"
 +
!Eigenschaft
 +
!Beschreibung
 +
|- valign="top"
 +
|Database
 +
|Legt die Verbindung zur Datenbank fest. Standardmäßig wird die Verbindung der Standard-Tabellen des Reports verwendet. Alternativ dazu könnte man auch ein Connection-Objekt aus der Leiste links auf die Seite "Data" ziehen und dort eine eigene Datenbank-Verbindung aufbauen.
 +
|- valign="top"
 +
|FieldAliases
 +
|Hier könnte man den Datenbank-Felder einen ausführlichen Alias-Namen vergeben, um sie besser zu verstehen.
 +
|- valign="top"
 +
|Filter
 +
|Wird bei einer Query normalerweise nicht benötigt, weil die SQL-Abfrage ein "where" beinhaltet. Bei einem Table-Objekt kann man den Filter jedoch verwenden, um nur bestimmte Daten aus den Tabelle zu ziehen.
 +
|- valign="top"
 +
|Master
 +
|Optional eine Möglichkeit, eine 1:n-Beziehung zu einer Master-Tabelle herzustellen.
 +
|- valign="top"
 +
|Params
 +
|Gibt die Möglichkeit, Parameter aus der SQL-Abfrage mit einem Wert oder einem Feld zu verknüpfen. '''Sehr wichtige Funktion!'''.
 +
Parameter im SQL-Text beginnen mit einem Doppelpunkt, dahinter wird ein eindeutiger Parameter-Name eingegeben. Mit dem '''...''' Button in dieser Zeile kann man die Parameter mit einem Wert oder einem beliebigen Feld des Reports verknüpfen, z.B. mit dem Feld "Auftragsnummer". Damit bezieht sich das Abfrage -Ergebnis auf Daten mit dieser Auftragsnummer!
 +
|- valign="top"
 +
|SQL
 +
|Hier wird der SQL-Text für die Datenabfrage angegeben. Er legt fest, welchen Daten aus der Datenbank abgerufen werden sollen. Sinnvollerweise enthält der SQL-Text eine "Where"-Klausel mit einem Parameter-Feld (":ParamName").
 +
|- valign="top"
 +
|
 +
|
 +
|}
 +
 +
== SQL-Text ==
 +
 +
Der SQL-Text bestimmt, welche Daten aus der Datenbank abgerufen werden sollen. Das kann ein einfaches "select * from xxx" sein oder eine komplexe Abfrage mit mehreren verbundenen Tabellen.
 +
 +
'''Entscheidend ist''', dass in der "Where"-Klausel ein Parameter enthalten ist! Diesen Parameter kann man dann mit einem Datenfeld verbinden, z.B. mit der Auftragsnummer.
 +
 +
=== Beispiel ===
 +
 +
In einem Werkstatt-Auftrag-Report sollen Daten aus einem verbundenen Transport-Auftrag stehen. Also zieht man eine Query auf die Seite "Data" und füllt den SQL-Text so (abgekürzt):
 +
 +
select MAUFKO.AUFTRNR,MAUFKO.STATUSNR,MAUFKO.STATUSTEXT,MAUFKO.DRUCKDAT,MAUFKO.DRUCKZEIT,MAUFKO.DRUCKUSER,
 +
MAUFKO.ADRKURZNAME,MAUFKO.ADRESSE,MAUFKO.STR, MAUFKO.LANDKENNZ,MAUFKO.PLZ,MAUFKO.ORT,MAUFKO.LAND,MAUFKO.SPRACHE,MAUFKO.AUFTRAGSART,
 +
MAUFKO.VERANSTNAME,MAUFKO.VERANSTORT,MAUFKO.VERANSTRAUM,
 +
 +
MAUFPO.POSNR, MAUFPO.UNTPOSNR, MAUFPO.STATUSNR, MAUFPO.STATUSTEXT, MAUFPO.ARTNR,
 +
MAUFPO.TYP,MAUFPO.BEZEICHNUNG,MAUFPO.KISTE,MAUFPO.STLISTE,MAUFPO.ARTIKELART,MAUFPO.ARTIKELHERKUNFT,MAUFPO.KENNZMIETEVERKAUF,
 +
MAUFPO.AUFTRMENGE,MAUFPO.EINHEIT,MAUFPO.EKPREIS,MAUFPO.DATVON,MAUFPO.ZEITVON,MAUFPO.DATBIS,MAUFPO.ZEITBIS,MAUFPO.BEREINHEIT,
 +
AUFPO.ADRPoints
 +
from MAUFPO MAUFPO
 +
left outer join MAUFKO MAUFKO on MAUFKO.AUFTRNR=MAUFPO.AUFTRNR
 +
where MAUFPO.REPNr=:REPAUF_REPNR
 +
 +
 +
=== Parameter definieren ===
 +
 +
Der Text-Ausdruck
 +
 +
:REPAUF_REPNR
 +
 +
mit dem Doppelpunkt ist ein sog. Parameterfeld. Beim Ausführen des Reports wird der festgelegte Wert eingesetzt, z.B. das Datenbankfeld mit der Auftragsnummer.
 +
 +
Mit dem Button '''Params ...''' kann man den Wert des Parameters festlegen.
 +
 +
Beispiel:
 +
 +
[[Datei:FastReport_Data_02_Paramfeld.png]]
 +
 +
In diesem Beispiel wird das Datenbankfeld
 +
 +
'''<Werkstattauftrag."WerkstattAuftrNr">'''
 +
 +
für den Parameter festgelegt:
 +
 +
[[Datei:FastReport_Data_03_Paramfeld.png]]
 +
 +
Somit bezieht sich die SQL-Abfrage auf den Werkstattauftrag ("REPAUF") mit der Werkstatt-Auftr.Nr. ("REPAUF.RepNr"), die im Report verwendet wird!
 +
 +
 +
== Im Report ==
 +
 +
sieht das so aus:
 +
 +
[[Datei:FastReport_Data_04_Tabelle.png]]
 +
 +
Die SQL-Abfrage der Query mit dem Namen "TransportAuftrag" wird jetzt als Tabelle im Daten-Register angezeigt. Alle Felder der Abfrage können nun im Report verwendet werden.

Aktuelle Version vom 27. Juni 2025, 12:08 Uhr

1 Allgemeines

Das Druck-Modul "GevitasFormPrint" stellt dem Report-Editor alle Daten zur Verfügung, die für das jeweilige Formular gerade sinnvoll sind, z.B.

  • bei einem Angebot die Auftragskopf-Daten, Auftragspositionen usw.
  • bei einem Werkstatt-Auftrag die Reparatur-Daten, Kunden-Daten, Auftrags-Daten usw.
Datenbank-Kenntnisse sind hierfür nicht erforderlich!

Manchmal will man jedoch weitere Daten im Report haben, die das Druck-Modul nicht berücksichtigt. Für diesen Fall kann man einen Report um weitere, beliebige Datenbank-Abfragen erweitern.

Dieser Artikel zeigt, wie einfach das geht.

Allerdings muss man sagen, dass man hierfür Datenbank-Kenntnisse haben sollte und die SQL-Sprache kennen sollte!

2 Die Seite Data im Report

in jedem Report gibt es eine Seite "Data" in dem Register links oben.

FastReport Data 01 RegisterSeite.png

Hier kann man zusätzliche Datenquellen unterbringen, die auf Tabellen der Datenbank zugreifen:

ADO-Table
Greift direkt auf eine Tabelle der Datenbank zu. Man kann/muss den Namen der Tabelle angeben und kann die Daten filtern, z.B. die Auftragsdaten nach der Auftragsnummer.
ADO-Query
Greift über eine SQL-Abfrage auf beliebige Tabellen der Datenbank zu. Man kann/muss die SQL-Abfrage angeben und kann die Daten über eine "Where"-Klausel mit einem Parameter filtern, z.B. die Auftragsdaten nach der Auftragsnummer. Diese Methode ist sehr flexibel, erfordert aber Datenbank- und SQL-Kenntnisse!
Dieser Artikel beschreibt diese Methode.

3 Einfügen einer Query in die Data-Seite

Dazu zieht man einfach das Query-Objekt aus der Leiste links auf die Data-Seite.

Die Query hat nun folgende wichtige Eigenschaften:


4 Eigenschaften der Query

Die wichtigsten Eigenschaften einer Query sind:

Eigenschaft Beschreibung
Database Legt die Verbindung zur Datenbank fest. Standardmäßig wird die Verbindung der Standard-Tabellen des Reports verwendet. Alternativ dazu könnte man auch ein Connection-Objekt aus der Leiste links auf die Seite "Data" ziehen und dort eine eigene Datenbank-Verbindung aufbauen.
FieldAliases Hier könnte man den Datenbank-Felder einen ausführlichen Alias-Namen vergeben, um sie besser zu verstehen.
Filter Wird bei einer Query normalerweise nicht benötigt, weil die SQL-Abfrage ein "where" beinhaltet. Bei einem Table-Objekt kann man den Filter jedoch verwenden, um nur bestimmte Daten aus den Tabelle zu ziehen.
Master Optional eine Möglichkeit, eine 1:n-Beziehung zu einer Master-Tabelle herzustellen.
Params Gibt die Möglichkeit, Parameter aus der SQL-Abfrage mit einem Wert oder einem Feld zu verknüpfen. Sehr wichtige Funktion!.

Parameter im SQL-Text beginnen mit einem Doppelpunkt, dahinter wird ein eindeutiger Parameter-Name eingegeben. Mit dem ... Button in dieser Zeile kann man die Parameter mit einem Wert oder einem beliebigen Feld des Reports verknüpfen, z.B. mit dem Feld "Auftragsnummer". Damit bezieht sich das Abfrage -Ergebnis auf Daten mit dieser Auftragsnummer!

SQL Hier wird der SQL-Text für die Datenabfrage angegeben. Er legt fest, welchen Daten aus der Datenbank abgerufen werden sollen. Sinnvollerweise enthält der SQL-Text eine "Where"-Klausel mit einem Parameter-Feld (":ParamName").

5 SQL-Text

Der SQL-Text bestimmt, welche Daten aus der Datenbank abgerufen werden sollen. Das kann ein einfaches "select * from xxx" sein oder eine komplexe Abfrage mit mehreren verbundenen Tabellen.

Entscheidend ist, dass in der "Where"-Klausel ein Parameter enthalten ist! Diesen Parameter kann man dann mit einem Datenfeld verbinden, z.B. mit der Auftragsnummer.

5.1 Beispiel

In einem Werkstatt-Auftrag-Report sollen Daten aus einem verbundenen Transport-Auftrag stehen. Also zieht man eine Query auf die Seite "Data" und füllt den SQL-Text so (abgekürzt):

select MAUFKO.AUFTRNR,MAUFKO.STATUSNR,MAUFKO.STATUSTEXT,MAUFKO.DRUCKDAT,MAUFKO.DRUCKZEIT,MAUFKO.DRUCKUSER,
MAUFKO.ADRKURZNAME,MAUFKO.ADRESSE,MAUFKO.STR, MAUFKO.LANDKENNZ,MAUFKO.PLZ,MAUFKO.ORT,MAUFKO.LAND,MAUFKO.SPRACHE,MAUFKO.AUFTRAGSART,
MAUFKO.VERANSTNAME,MAUFKO.VERANSTORT,MAUFKO.VERANSTRAUM,

MAUFPO.POSNR, MAUFPO.UNTPOSNR, MAUFPO.STATUSNR, MAUFPO.STATUSTEXT, MAUFPO.ARTNR, 
MAUFPO.TYP,MAUFPO.BEZEICHNUNG,MAUFPO.KISTE,MAUFPO.STLISTE,MAUFPO.ARTIKELART,MAUFPO.ARTIKELHERKUNFT,MAUFPO.KENNZMIETEVERKAUF,
MAUFPO.AUFTRMENGE,MAUFPO.EINHEIT,MAUFPO.EKPREIS,MAUFPO.DATVON,MAUFPO.ZEITVON,MAUFPO.DATBIS,MAUFPO.ZEITBIS,MAUFPO.BEREINHEIT,
AUFPO.ADRPoints
from MAUFPO MAUFPO 
left outer join MAUFKO MAUFKO on MAUFKO.AUFTRNR=MAUFPO.AUFTRNR
where MAUFPO.REPNr=:REPAUF_REPNR


5.2 Parameter definieren

Der Text-Ausdruck

:REPAUF_REPNR

mit dem Doppelpunkt ist ein sog. Parameterfeld. Beim Ausführen des Reports wird der festgelegte Wert eingesetzt, z.B. das Datenbankfeld mit der Auftragsnummer.

Mit dem Button Params ... kann man den Wert des Parameters festlegen.

Beispiel:

FastReport Data 02 Paramfeld.png

In diesem Beispiel wird das Datenbankfeld

<Werkstattauftrag."WerkstattAuftrNr"> 

für den Parameter festgelegt:

FastReport Data 03 Paramfeld.png

Somit bezieht sich die SQL-Abfrage auf den Werkstattauftrag ("REPAUF") mit der Werkstatt-Auftr.Nr. ("REPAUF.RepNr"), die im Report verwendet wird!


6 Im Report

sieht das so aus:

FastReport Data 04 Tabelle.png

Die SQL-Abfrage der Query mit dem Namen "TransportAuftrag" wird jetzt als Tabelle im Daten-Register angezeigt. Alle Felder der Abfrage können nun im Report verwendet werden.