BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Formularbasierter Filter, Ergebnis als Bericht
-
- Beiträge: 3
- Registriert: Fr 15. Mai 2020, 11:23
Formularbasierter Filter, Ergebnis als Bericht
Mal wieder ein neuer Dummy im Forum...
Ich, blutiger Anfänger, habe mir eine DB für Bücher zusammenbuchstabiert und -kopiert (hier erstmal vielen Dank ans Forum für die vielen Beispieldatenbanken).
Darin werden die Bücher in Themenbereiche eingeteilt und (nach Thema sortiert) nummeriert.
Datenbasis sind zwei Tabellen, eine für die Kategorien, die zweite für die Bücher.
In der Tabelle "Bücher" steht neben Titel und der Verknüpfung zur Kategorie ein ganzer Sack voll Schlagworte, die ich per Checkbox (Boolean) vergeben kann.
Befüllt und abgefragt wird das Ganze über zwei Formulare ("Neuaufnahme" und "Suche").
Beide beziehen sich direkt auf die Tabellen, ohne zwischengeschaltete Abfrage.
Funktioniert so weit auch alles einwandfrei.
Was mir noch zu meinem Glück fehlt, und woran ich gerade verzweifle:
Ich möchte das Ergebnis eines formularbasierten Filters im Formular "Suche" als Bericht ausgeben.
Heißt: Als Ergebnis soll der Bericht Den Titel und die Nummer der gefundenen Bücher als Liste enthalten.
Dabei ist die Formatierung des Berichts nicht mein Problem; nur eben enthält mein Bericht ALLE Bücher, egal was im Formular passiert.
In anderen Forenbeiträgen habe ich bereits mehrfach gelesen, dass es "über die Filtertabelle" ganz einfach geht. Aber was ist / wo finde ich diese "Filtertabelle"??
Ich, blutiger Anfänger, habe mir eine DB für Bücher zusammenbuchstabiert und -kopiert (hier erstmal vielen Dank ans Forum für die vielen Beispieldatenbanken).
Darin werden die Bücher in Themenbereiche eingeteilt und (nach Thema sortiert) nummeriert.
Datenbasis sind zwei Tabellen, eine für die Kategorien, die zweite für die Bücher.
In der Tabelle "Bücher" steht neben Titel und der Verknüpfung zur Kategorie ein ganzer Sack voll Schlagworte, die ich per Checkbox (Boolean) vergeben kann.
Befüllt und abgefragt wird das Ganze über zwei Formulare ("Neuaufnahme" und "Suche").
Beide beziehen sich direkt auf die Tabellen, ohne zwischengeschaltete Abfrage.
Funktioniert so weit auch alles einwandfrei.
Was mir noch zu meinem Glück fehlt, und woran ich gerade verzweifle:
Ich möchte das Ergebnis eines formularbasierten Filters im Formular "Suche" als Bericht ausgeben.
Heißt: Als Ergebnis soll der Bericht Den Titel und die Nummer der gefundenen Bücher als Liste enthalten.
Dabei ist die Formatierung des Berichts nicht mein Problem; nur eben enthält mein Bericht ALLE Bücher, egal was im Formular passiert.
In anderen Forenbeiträgen habe ich bereits mehrfach gelesen, dass es "über die Filtertabelle" ganz einfach geht. Aber was ist / wo finde ich diese "Filtertabelle"??
Re: Formularbasierter Filter, Ergebnis als Bericht
Hallo Rosenkrieger,
den Bericht kannst Du nicht über eine Filterung im Formular vorbestimmen. Diese Filterung muss so erfolgen, dass sie über die Abfrage zur Verfügung steht, auf der ein Bericht aufgaben kann.
Vergiss dafür die eingebauten Filterfunktionen des Formulars. Erstelle Dir eine Tabelle, die nur einen Datensatz haben soll, dessen Inhalt sie immer wieder überschreiben kann. Das ist dann die Tabelle "Filter". Als Primärschlüssel hat die bei mir ein Ja/Nein-Feld - dann können sowieso höchstens 2 Datensätze rein kommen. Der erste Datensatz ist über den Primärschlüssel von vornherein erstellt: "ID" = TRUE. In dieser Tabelle sind alle die Felder enthalten, nach denen ich meine Daten gerne filtern möchte, z.B. das Feld "AutorenID" - weil Du gerade von Büchern schreibst.
Damit hast Du eine Abfrage, in die Du auch noch weiter Daten einfügen kannst, die aber nach dem/der Autor/in gefiltert ist. Das reicht für den Bericht, weil Du da die gefilterten Daten haben willst. Das reicht aber nicht für das Formular, weil Du so nie alle Daten zu Gesicht bekommst.
Das zeigt dann alle Datensätze an, wenn das Feld in der Filtertabelle leer ist - sofern sie eine "AutorenID" haben.
Details dazu kannst Du aus dem Handbuch auslesen.
Gruß
Robert
den Bericht kannst Du nicht über eine Filterung im Formular vorbestimmen. Diese Filterung muss so erfolgen, dass sie über die Abfrage zur Verfügung steht, auf der ein Bericht aufgaben kann.
Vergiss dafür die eingebauten Filterfunktionen des Formulars. Erstelle Dir eine Tabelle, die nur einen Datensatz haben soll, dessen Inhalt sie immer wieder überschreiben kann. Das ist dann die Tabelle "Filter". Als Primärschlüssel hat die bei mir ein Ja/Nein-Feld - dann können sowieso höchstens 2 Datensätze rein kommen. Der erste Datensatz ist über den Primärschlüssel von vornherein erstellt: "ID" = TRUE. In dieser Tabelle sind alle die Felder enthalten, nach denen ich meine Daten gerne filtern möchte, z.B. das Feld "AutorenID" - weil Du gerade von Büchern schreibst.
Code: Alles auswählen
SELECT * FROM "Tabelle"
WHERE "AutorenID" = (SELECT "AutorenID" FROM "Filter" WHERE "ID" = TRUE)
Code: Alles auswählen
SELECT * FROM "Tabelle"
WHERE "AutorenID" = COALESCE((SELECT "AutorenID" FROM "Filter" WHERE "ID" = TRUE), "AutorenID")
Details dazu kannst Du aus dem Handbuch auslesen.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 3
- Registriert: Fr 15. Mai 2020, 11:23
Re: Formularbasierter Filter, Ergebnis als Bericht
Hallo Robert,
vielen Dank für Deinen Input; Du hast mich damit zumindest mal auf die richtige Spur gesetzt.
Zu Anfang hatte ich zwar erhebliche Probleme damit, alle 94 (!) BOOLEAN-Felder so auszuwerten, dass das gewünschte Ergebnis (Anzeige aller Datensätze mit Treffern, nicht nur solche, bei denen alle Suchbegriffe treffen)erscheint.
Mit folgender sql-Syntax (hier nur als Beispiel für ein BOOLEAN-Feld; das ganze dann 94x ) hatte ich letztlich Erfolg:
Nun bin ich auf folgendem Stand:
- ein (Such-)Formular mit 94 Checkboxen befüllt den (einzigen) Datensatz in der Tabelle "Filter". Ob der Primärschlüssel nun TRUE oder FALSE ist, ist bei meiner Abfrage egal.
- Die SQL-Abfrage starte ich per Makro (siehe unten) aus dem Formular heraus... und funzt.
- Ein Bericht auf Basis des Abfrageergebnisses zeigt mir sauber alles, was ich von der DB wissen will.
Eine Lücke im automatisierten Ablauf kann ich allerdings noch nicht schließen:
Es will mir einfach nicht gelingen, den Bericht mit in das Makro einzubauen, welches ich in mein Formular eingebaut habe.
Aus einem anderen Thread hatte ich eine Routine als Start meiner SQL-Abfrage abgekupfert, die gut funktioniert (siehe unten).
Meine etwas blauäugig modifizierte Version dieser Routine ("query" durch "report" ersetzt) verweigert allerdings den Dienst:
"BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: reports."
Bestimmt ist es ganz einfach für jemanden, der sich damit auskennt...
Also bitte ich nochmal um Hilfe.
vielen Dank für Deinen Input; Du hast mich damit zumindest mal auf die richtige Spur gesetzt.
Zu Anfang hatte ich zwar erhebliche Probleme damit, alle 94 (!) BOOLEAN-Felder so auszuwerten, dass das gewünschte Ergebnis (Anzeige aller Datensätze mit Treffern, nicht nur solche, bei denen alle Suchbegriffe treffen)erscheint.
Mit folgender sql-Syntax (hier nur als Beispiel für ein BOOLEAN-Feld; das ganze dann 94x ) hatte ich letztlich Erfolg:
Code: Alles auswählen
... WHERE ( "Filter"."BOOL_1" = TRUE AND "Buecherliste"."BOOL_1" = ( SELECT "BOOL_1" FROM "Filter" ) ) OR
( "Filter"."BOOL_2" = TRUE ...
- ein (Such-)Formular mit 94 Checkboxen befüllt den (einzigen) Datensatz in der Tabelle "Filter". Ob der Primärschlüssel nun TRUE oder FALSE ist, ist bei meiner Abfrage egal.
- Die SQL-Abfrage starte ich per Makro (siehe unten) aus dem Formular heraus... und funzt.
- Ein Bericht auf Basis des Abfrageergebnisses zeigt mir sauber alles, was ich von der DB wissen will.
Eine Lücke im automatisierten Ablauf kann ich allerdings noch nicht schließen:
Es will mir einfach nicht gelingen, den Bericht mit in das Makro einzubauen, welches ich in mein Formular eingebaut habe.
Aus einem anderen Thread hatte ich eine Routine als Start meiner SQL-Abfrage abgekupfert, die gut funktioniert (siehe unten).
Meine etwas blauäugig modifizierte Version dieser Routine ("query" durch "report" ersetzt) verweigert allerdings den Dienst:
"BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: reports."
Bestimmt ist es ganz einfach für jemanden, der sich damit auskennt...
Also bitte ich nochmal um Hilfe.
Code: Alles auswählen
SUB Filtern_und_Drucken
dim s_NameOfQuery$
dim s_NameOfReport$
Dim URL as New com.sun.star.util.URL
Dim Args(5) as New com.sun.star.beans.PropertyValue
Dim Dispatch As Object
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem Formularinhalt in Tabelle "Filter" speichern
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:RecSave", "", 0, Array())
rem funktioniert einwandfrei
rem ----------------------------------------------------------------------
rem "Abfrage_Bericht" auf Basis der Tabelle "Filter" ausführen
s_NameOfQuery="Abfrage_Bericht"
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = DatabaseContext.getByName(ThisDatabaseDocument.URL)
oConnection = oDataSource.GetConnection("","")
sql=oConnection.queries.getbyname(s_NameOfQuery).command
URL.Complete = ".component:DB/DataSourceBrowser"
Dispatch = StarDesktop.queryDispatch(URL,"_Blank",8)
Args(0).Name = "ActiveConnection"
Args(0).Value = oConnection
Args(1).Name = "CommandType"
Args(1).Value = 2
Args(2).Name = "Command"
Args(2).Value = sql
Args(3).Name = "ShowMenu"
Args(3).Value = True
Args(4).Name = "ShowTreeView"
Args(4).Value = False
Args(5).Name = "ShowTreeViewButton"
Args(5).Value = False
'und öffnen
Dispatch.dispatch(URL, Args)
rem Funktioniert!
rem Ab hier funzt nix:
rem ----------------------------------------------------------------------
rem "Bericht"erstellen
s_NameOfReport="Trefferliste"
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = DatabaseContext.getByName(ThisDatabaseDocument.URL)
oConnection = oDataSource.GetConnection("","")
rep=oConnection.reports.getbyname(s_NameOfReport).command
URL.Complete = ".component:DB/DataSourceBrowser"
Dispatch = StarDesktop.reportDispatch(URL,"_Blank",8)
Args(0).Name = "ActiveConnection"
Args(0).Value = oConnection
Args(1).Name = "CommandType"
Args(1).Value = 2
Args(2).Name = "Command"
Args(2).Value = rep
Args(3).Name = "ShowMenu"
Args(3).Value = True
Args(4).Name = "ShowTreeView"
Args(4).Value = False
Args(5).Name = "ShowTreeViewButton"
Args(5).Value = False
'und öffnen
Dispatch.dispatch(URL, Args)
END SUB
Re: Formularbasierter Filter, Ergebnis als Bericht
Hallo Rosenkrieger,
die Berichte sind nicht so in Base verwurzelt wie Tabellen und Abfragen. Du kannst auf das Kommando der berichte nicht zugreifen. Die Berichte müssen also auf einer Abfrage, besser noch einer Ansicht beruhen, die Du durch eine Tabelle filterst.
Das Ganze geht dann über
Gruß
Robert
die Berichte sind nicht so in Base verwurzelt wie Tabellen und Abfragen. Du kannst auf das Kommando der berichte nicht zugreifen. Die Berichte müssen also auf einer Abfrage, besser noch einer Ansicht beruhen, die Du durch eine Tabelle filterst.
Das Ganze geht dann über
Code: Alles auswählen
ThisDatabaseDocument.ReportDocuments.getByName("Berichtsname").open
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 3
- Registriert: Fr 15. Mai 2020, 11:23
Gelöst: Formularbasierter Filter, Ergebnis als Bericht
So einfach geht das also, wenn man's kann!
Nun klappt es von der Definition der Filterkriterien bis zum ausdruckfähigen Bericht.
Danke!
Nun klappt es von der Definition der Filterkriterien bis zum ausdruckfähigen Bericht.
Danke!
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️