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. 🤗
Hierachische Abfrage
-
- Beiträge: 43
- Registriert: Di 20. Jan 2015, 18:56
- Wohnort: Hungen
Hierachische Abfrage
Hallo
ich habe als Grundlage die Base-Datei "Beispiel_Suchen_und_Filtern.odb" verwendet um diese Art der Lösung für meine Bilder-DB zuverwenden. Meine Datenbank läuft unter MariaDB (MySql) und ist eigentlich nur eine Tabelle mit den nötigen Spalten, wie z.B.: Jahr, Anlass , Ort, Land , komplPfad.
Die hierachische Abfrage beginnt bei Jahr (Listenfeld 1), danach Anlässe(Listenfeld 2 für das Jahr , Orte (Listenfeld 3)für Jahr und Anlass.
Die Auswahlliste für die Anlässe z.B. für das Jahr = 2016 liefert die Werte Reise und Urlaub. Beide Werte werden auch im "Listenfeld 2" zu Auswahl angezeigt, wobei der 2. Werte "Urlaub" beim Anklicken nicht zum aktuellen Wert wird. Wird "Reise" (1. Listenwert) angeklickt wird diese erst nach Verlassen bzw. nach neuer Auswahl auf "Urlaub" angezeigt. Wo könnte die Ursache sein ? Die Übernahme als aktueller Wert erfolgt doch automatisch ?
MfG
Roland
ich habe als Grundlage die Base-Datei "Beispiel_Suchen_und_Filtern.odb" verwendet um diese Art der Lösung für meine Bilder-DB zuverwenden. Meine Datenbank läuft unter MariaDB (MySql) und ist eigentlich nur eine Tabelle mit den nötigen Spalten, wie z.B.: Jahr, Anlass , Ort, Land , komplPfad.
Die hierachische Abfrage beginnt bei Jahr (Listenfeld 1), danach Anlässe(Listenfeld 2 für das Jahr , Orte (Listenfeld 3)für Jahr und Anlass.
Die Auswahlliste für die Anlässe z.B. für das Jahr = 2016 liefert die Werte Reise und Urlaub. Beide Werte werden auch im "Listenfeld 2" zu Auswahl angezeigt, wobei der 2. Werte "Urlaub" beim Anklicken nicht zum aktuellen Wert wird. Wird "Reise" (1. Listenwert) angeklickt wird diese erst nach Verlassen bzw. nach neuer Auswahl auf "Urlaub" angezeigt. Wo könnte die Ursache sein ? Die Übernahme als aktueller Wert erfolgt doch automatisch ?
MfG
Roland
Re: Hierachische Abfrage
Hallo Roland,
welche Version der Datenbank hast Du denn genommen? Und mit dem Inhalt aus welchem Formular hast Du dort Probleme?
Gruß
Robert
welche Version der Datenbank hast Du denn genommen? Und mit dem Inhalt aus welchem Formular hast Du dort Probleme?
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: 43
- Registriert: Di 20. Jan 2015, 18:56
- Wohnort: Hungen
Re: Hierachische Abfrage
Hallo
ich habe die Datenbank über xampp installiert und mysql.exe hat die version 10.4.17.0 64-Bit.
LO hat die Version 7.1.6.2 64-Bit.
Datei: Beispiel_Suchen_und_Filtern.odb war die Grundlage einschl. des Makro:
SUB Hierarchisches_Kontrollfeld(oEvent AS OBJECT)
Dies habe ich angepasst. Hier der Quelltext :
Alle Objekte liegen im Formular
Listenfeld 1 : Daten -> SQL : SELECT DISTINCT "jahr" FROM "dbbilder"."bilder1" "bilder1"
Zusatzinfo : Jahr,,Listenfeld 2
Listenfeld 2: Zusatzinfo: Anlass,,Listenfeld 3
Listenfeld 3: Zusatzinfo: Ort,,Listenfeld 4
Listenfeld 4: Zusatzinfo: Land,
Tabelle: Daten : dbbilder.bilder1
Ich hoffe die Infos können Dir helfen.
MfG
Roland
ich habe die Datenbank über xampp installiert und mysql.exe hat die version 10.4.17.0 64-Bit.
LO hat die Version 7.1.6.2 64-Bit.
Datei: Beispiel_Suchen_und_Filtern.odb war die Grundlage einschl. des Makro:
SUB Hierarchisches_Kontrollfeld(oEvent AS OBJECT)
Dies habe ich angepasst. Hier der Quelltext :
Code: Alles auswählen
SUB Hierarchisches_Kontrollfeld(oEvent AS OBJECT)
REM Die Kontrollfelder funktionieren hierarchisch, wenn sich die Kontrollfelder auf die gleiche Datengrundlage beziehen.
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeldHidden AS OBJECT
DIM oFeld AS OBJECT
DIM oFeld1 AS OBJECT
DIM oFeld2 AS OBJECT
DIM stSql AS STRING
DIM aInhalt()
DIM stTag AS String
[b]Dim atmpCmd() As string [/b] ' hier kommt der gesplittete command rein es wird nur der erste Teil in den stSql eingesetzt
oFeld = oEvent.Source.Model
stTag = oFeld.Tag
oForm = oFeld.Parent
REM Tag wird unter den Zusatzinformationen eingegeben
REM Hier steht:
REM 0. Feldname des zu filterndes Feldes in der Tabelle,
REM 1. Feldname des versteckten Konrollfeldes, das den Filterwert speichern soll,
REM 2. eventuell weiteres Listfeld
REM Der Tag wird von dem auslösenden Element ausgelesen.
' msgbox ASC("""")
aFilter() = Split(stTag, ",")
stFilter = ""
IF Trim(aFilter(1)) = "" THEN
IF oFeld.getCurrentValue <>"" THEN
stFilter = chr(34) & Trim(aFilter(0)) & chr(34) & "='" & oFeld.getCurrentValue() & "'"
REM Der Filter wird in das Formular eingetragen. Er kann dort anschließend aus- und auch wieder eingeschaltet werden (Filterbuttons)
REM Existiert ein Filter von einem vorhergehenden Feld, so wird der Filter angehängt.
IF oForm.Filter <> "" AND InStr(oForm.Filter, """"+Trim(aFilter(0))+"""='") = 0 THEN
stFilter = oForm.Filter + " AND " + stFilter
REM Existiert bereits ein Filter von einem vorhergehenden Filterversuch des gleichen Feldes, so wird der Filter nicht angehängt sondern ab dem Filterversuch neu geschrieben.
ELSEIF oForm.Filter <> "" THEN
stFilter = Left(oForm.Filter, InStr(oForm.Filter, """"+Trim(aFilter(0))+"""='")-1) + stFilter
END IF
END If
' msgbox ("160:" & stFilter)
oForm.Filter = stFilter
oForm.reload()
Else
oFeldHidden = oForm.getByName(Trim(aFilter(1)))
REM Der Feldname des zu filterndes Feldes in der Tabelle wird mit dem aus dem Listenfeld ausgelesene Filterwert kombiniert
IF oFeld.getCurrentValue <>"" THEN
stFilter = chr(34) & Trim(aFilter(0)) & Chr(34) & "='" & oFeld.getCurrentValue() & "'"
REM Existiert ein Filter von einem vorhergehenden Feld, so wird der Filter angehängt.
IF oFeldHidden.HiddenValue <> "" AND InStr(oFeldHidden.HiddenValue, """"+Trim(aFilter(0))+"""='") = 0 THEN
stFilter = oFeldHidden.HiddenValue + " AND " + stFilter
REM Existiert bereits ein Filter von einem vorhergehenden Filterversuch des gleichen Feldes, so wird der Filter nicht angehängt sondern ab dem Filterversuch neu geschrieben.
ELSEIF oFeldHidden.HiddenValue <> "" THEN
stFilter = Left(oFeldHidden.HiddenValue, InStr(oFeldHidden.HiddenValue, """"+Trim(aFilter(0))+"""='")-1) + stFilter
END IF
END If
' msgbox ("176:" & stFilter)
oFeldHidden.HiddenValue = stFilter
END If
REM Wenn in dem Tag 2 Einträge sind, so muss ein weiteres Listenfeld neu mit gefilterten Inhalten versehen werden.
IF UBound(aFilter()) > 1 THEN
oFeld1 = oForm.getByName(Trim(aFilter(2)))
aFilter1() = Split(oFeld1.Tag,",")
IF oFeld.getCurrentValue <>"" THEN
REM Die nachfolgende Listbox wird mit dem gleichen Filter gefiltert, mit der auch das gesamte Formular bereits gefiltert wurde.
REM Der SQL-Befehl kann nicht direkt an die Listbox übergeben werden. Hier werden die Felder ausgelesen und die Listbox damit gefüllt.
atmpCmd = Split(oForm.Command, ".")
' stSql = "SELECT DISTINCT """+Trim(aFilter1(0))+""" FROM """+oForm.Command+""" WHERE "+stFilter+" ORDER BY """+Trim(aFilter1(0))+""""
[b]stSql = "SELECT DISTINCT """+Trim(aFilter1(0)) & """ FROM """ & atmpCmd(1) & """ WHERE "+stFilter & " ORDER BY """ & Trim(aFilter1(0))+""""[/b]
' msgbox ("187:" & stSql)
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
inZaehler = 0 'Zähler für das Array, in das die Werte der Nebentabelle geschrieben werden
WHILE oAbfrageergebnis.next
ReDim Preserve aInhalt(inZaehler) 'Dimensionierung des Arrays mit Sicherung (Preserve) des vorherigen Inhaltes
aInhalt(inZaehler) = oAbfrageergebnis.getString(1) 'Auslesen des ersten Feldes
inZaehler = inZaehler+1 'Erweiterung des Zählers zur Neudimensionierung
Wend
ELSE
aInhalt(0) = ""
END If
oFeld1.StringItemList = aInhalt() 'Der Inhalt wird in die Listbox geschrieben
' XRAY(oFeld1)
oFeld1.refresh() 'Die Listbox wird neu eingelesen
REM Alle folgenden Listboxen werden geleert
WHILE UBound(aFilter1()) > 1
DIM aLeer()
oFeld2 = oForm.getByName(Trim(aFilter1(2)))
DIM aFilter1()
aFilter1() = Split(oFeld2.Tag,",")
oFeld2.StringItemList = aLeer() 'Die Listbox wird geleert
oFeld2.refresh() 'Die Listbox wird neu eingelesen
WEND
END IF
END Sub
Listenfeld 1 : Daten -> SQL : SELECT DISTINCT "jahr" FROM "dbbilder"."bilder1" "bilder1"
Zusatzinfo : Jahr,,Listenfeld 2
Listenfeld 2: Zusatzinfo: Anlass,,Listenfeld 3
Listenfeld 3: Zusatzinfo: Ort,,Listenfeld 4
Listenfeld 4: Zusatzinfo: Land,
Tabelle: Daten : dbbilder.bilder1
Ich hoffe die Infos können Dir helfen.
MfG
Roland
Re: Hierachische Abfrage
Hallo Roland,
zuerst einmal nur kurz die Nachricht: Ich habe die Datenbank im Original hier überprüft. Achtung! In LO 7.2.2.2 ist ein Bug drin, so dass die Listenfelder nicht automatisch aktualisieren! Du hast aber die Version LO 7.1.6.2, so dass ich da noch weiter schauen muss.
Stimmt denn die Groß- und Kleinschreibung? Im Code für das erste Listenfehl steht "jahr", in dem, was in den Zusatzinformationen steht, "Jahr".
Sind denn auch die folgenden Listenfelder jeweils mit dem Makro verknüpft?
Gruß
Robert
zuerst einmal nur kurz die Nachricht: Ich habe die Datenbank im Original hier überprüft. Achtung! In LO 7.2.2.2 ist ein Bug drin, so dass die Listenfelder nicht automatisch aktualisieren! Du hast aber die Version LO 7.1.6.2, so dass ich da noch weiter schauen muss.
Stimmt denn die Groß- und Kleinschreibung? Im Code für das erste Listenfehl steht "jahr", in dem, was in den Zusatzinformationen steht, "Jahr".
Sind denn auch die folgenden Listenfelder jeweils mit dem Makro verknüpft?
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: 43
- Registriert: Di 20. Jan 2015, 18:56
- Wohnort: Hungen
Re: Hierachische Abfrage
Hallo Robert,
ich habe jetzt nur noch die Kleinschreibung wo Feldname der Tabelle auftreten drinn. Die Namen der Listenfelder habe ich nochmals in den Zusatzbereich über kopieren eingetragen, alle sind mit dem Makro beim Event "Modifizieren" verbunden.
Datenbank und LO laufen auf dem gleichen PC.
Es tritt z.B. folgendes auf : Jahr = 2016 ausgewählt -> Liste für Anlass akrualisiert (Autokauf,Besuch,Blumen,Kochen) werden beim Aufklappen von Listenfeld 2 angezeigt, das ist OK.
Wird z.B. Eintrag "Besuch" angeklickt bleibt der akt. Wert leer (in der Anzeige) und mein zusätzlicher Labeltext bleibt auf Anzeige "Listenfeld 1" stehen.
Klicke ich dann z.B. den 2. Listenfeld "Blumen" an wird der vorher ausgewhlte "Besuch" zum aktuellen und auch mein Labeltext zeigt dann "Listenfeld 2" an.
Ich hab das Gefühl entweder Zeitproblem oder ein Event wurde nicht fertig abgearbeitet.
Gruß Roland
ich habe jetzt nur noch die Kleinschreibung wo Feldname der Tabelle auftreten drinn. Die Namen der Listenfelder habe ich nochmals in den Zusatzbereich über kopieren eingetragen, alle sind mit dem Makro beim Event "Modifizieren" verbunden.
Datenbank und LO laufen auf dem gleichen PC.
Es tritt z.B. folgendes auf : Jahr = 2016 ausgewählt -> Liste für Anlass akrualisiert (Autokauf,Besuch,Blumen,Kochen) werden beim Aufklappen von Listenfeld 2 angezeigt, das ist OK.
Wird z.B. Eintrag "Besuch" angeklickt bleibt der akt. Wert leer (in der Anzeige) und mein zusätzlicher Labeltext bleibt auf Anzeige "Listenfeld 1" stehen.
Klicke ich dann z.B. den 2. Listenfeld "Blumen" an wird der vorher ausgewhlte "Besuch" zum aktuellen und auch mein Labeltext zeigt dann "Listenfeld 2" an.
Ich hab das Gefühl entweder Zeitproblem oder ein Event wurde nicht fertig abgearbeitet.
Gruß Roland
Re: Hierachische Abfrage
Hallo Roland,
wo liegt denn Deine MariaDB? Auf Deinem eigenen Rechner? Dann würde ich das hier einmal versuchen nachzustellen.
Für Deine Zwecke kann das Makro ja auch etwas entrümpelt werden. Da ist noch etwas von einem versteckten Kontrollfeld drin, das Du ja gar nicht benötigst.
Gruß
Robert
wo liegt denn Deine MariaDB? Auf Deinem eigenen Rechner? Dann würde ich das hier einmal versuchen nachzustellen.
Für Deine Zwecke kann das Makro ja auch etwas entrümpelt werden. Da ist noch etwas von einem versteckten Kontrollfeld drin, das Du ja gar nicht benötigst.
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
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 ❤️