Seite 1 von 1

Base Datensatz von Formular zu Report

Verfasst: Fr 19. Apr 2019, 15:49
von biertrinker
Hallo ,

ich habe das mit den Berichten wohl noch nicht genau verstanden
per Google wird immer auf MacroProgrammierung verwiesen
wenn geziehlt ein Datensatz vom Formular an den Report übergeben werden soll

gibt es keinen einfachen Weg ?

BSP
ich habe eine Tabelle T1 mit den Feldern
ID / Name / Vorname / Tel

Diese werden im Formular Form1 angezeigt :

ID wird im Form1 nicht angezeigt
Name wird im Textfeld TXT1 angezeigt
Vorname wird im Textfeld TXT2 angezeigt
Tel wird im Textfel TXT3 angezeigt

Nun möchte ich einen Report öffnen und einfach
nur das der Report den Datensatz anzeigt
der auch aktuell im Formular angeigt wird

also der Report ungefähr folgendes SQL aufruft
"select * from T1 where Name = Form1.TXT1 "

Das geht doch bestimmt auch ohne Macro oder ??

Leider muss ich zugeben das ich noch nicht lange mit LibreOffice
arbeite und die Programmierung noch nicht ganz verstehe

Re: Base Datensatz von Formular zu Report

Verfasst: So 21. Apr 2019, 09:54
von F3K Total
Moin,
biertrinker hat geschrieben:
Fr 19. Apr 2019, 15:49
Das geht doch bestimmt auch ohne Macro oder ??
Ja, das geht, allerdings nicht ganz banal. Mit Hilfe einer einzeiligen Filtertabelle, im Beispiel anbei "Filter".
In diese Filtertabelle schreibt man im Formular "Adressenverwaltung_mit_Filter" per Listenfeld die ID des gewünschten Datensatzes.
Mit Hilfe der Abfrage "qAdressen" wird nun der Datensatz zu dieser ID gefunden:

Code: Alles auswählen

SELECT
    "ID", 
    "Nachname", 
    "Vorname", 
    "Nachname" || ', ' || "Vorname" AS "Name", 
    "Strasse", 
    "PLZ", 
    "Ort"
FROM
    "Adressen"
WHERE
    ( "ID" = ( SELECT "F_ID_ADDRESS" FROM "Filter" ) 
OR 
    ( SELECT "F_ID_ADDRESS" FROM "Filter" ) IS NULL )
Die gleiche Abfrage ist wiederum Datengrundlage des Berichtes "Bericht_Adresse_gefiltert" der bei Ausführung den im Formular gewählten Datensatz zeigt.
Viel Spaß beim Forschen
Gruß R

Re: Base Datensatz von Formular zu Report

Verfasst: So 21. Apr 2019, 12:24
von gogo
Es geht auch mit der BaseReportExtension, die geht aber NICHT mit der Firebird-Datenbank, da der Firebird-Treiber einen ganzen Haufen an Methoden (noch?) nicht unterstützt.

Weiters wäre es noch denkbar in der Tabelle ein Ja/Nein Feld zu machen, das vor dem Öffnen des Reports auf true gesetzt wird (während alle anderen Sätze auf false stehen) und dieses Feld wäre dann das Kriterium für die Report-Abfrage...

D.h. die Abfrage für den Report wäre dann etwa: "Select * from TabelleX where ReportJN = true" und das Makro das man dem Button zuordnen müsste wäre dann etwa so:

Code: Alles auswählen

sub OpenReportXYZ(oEvent)
' ermittelt die ID des aktuellen Datensatzes
ID_aktueller_Datensatz = oEvent.Source.Model.Parent.getByName("NameDesSteuerelementsInDemDieDatensatzIdSteht").text()

' erstellt ein Statement-Objekt mit dem man SQL-Queries ausfuehren kann
oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement

' fuehrt die Statements aus
oStatement.executeUpdate( "UPDATE TabelleX set ReportJN = false" )
oStatement.executeUpdate( "UPDATE TabelleX set ReportJN = true WHERE IDDatensatz = " & ID_aktueller_Datensatz & ";" )

' oeffnet den Report
ThisDatabaseDocument.ReportDocuments.getByName("BerichtXYZ").open

end sub

Re: Base Datensatz von Formular zu Report

Verfasst: So 21. Apr 2019, 19:22
von biertrinker
Hallo,

erstmal vielen Dank für die Tips
beide Wege werde ich mal ausprobieren :D

Re: Base Datensatz von Formular zu Report

Verfasst: Di 23. Apr 2019, 17:33
von F3K Total
Tja,
wann denn? Bisher hast du die Beispieldatei ja nicht einmal heruntergeladen. :evil:
R