BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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. 🤗

Listenfeld mit SQL Abfrage

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Listenfeld mit SQL Abfrage

Beitrag von chemnitzer » Fr 2. Apr 2021, 21:25

Hallo
als Neuling komme ich wieder nicht weiter.
MySQL Datenbank
Ich habe ein Listenfeld mit der Abfrage: SELECT DISTINCT "anlass" FROM "dbbilder"."bilder1" ORDER BY "anlass"
Dies liefert mir Anlässe wie : Urlaub, Geburtstag, Ausflug u.s.w
In einem zweiten Listenfeld mit der Abfrage : SELECT DISTINCT "jahr" FROM "dbbilder"."bilder1" WHERE "anlass"='Geburt' ORDER BY "jahr"
werden mir die Jahre ausgelesen
Jetzt möchte ich die Abfrage im zweiten Listenfeld per Makro ändern und zwar wenn ein Anlass ausgewählt wurde soll dieser bei der Jahres suche berücksichtigt werden . Manuell kann ich den SQL-String ändern und das funktioniert auch, aber über Makro geht es nicht.
zB.: in der WHERE "anlass" = 'Urlaub'
Im Makro schon versucht.
arSQL(0) = SELECT DISTINCT "jahr" FROM "dbbilder"."bilder1" WHERE "anlass"='Urlaub' ORDER BY "jahr"
oListBoxJahr.ListSource(0) = arSQL(0)
in oListBoxJahr.ListSource(0) bleibt der manuell eingetragene Befehl stehen
danch oListBoxJahr = refresh nicht das erwartete Ergebnis

Kann mir bitte jemand helfen.
Vielen Dank

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Listenfeld mit SQL Abfrage

Beitrag von F3K Total » Sa 3. Apr 2021, 08:55

Moin,
ein Schuss ins Blaue:
Statt

Code: Alles auswählen

oListBoxJahr = refresh
nimm mal

Code: Alles auswählen

oListBoxJahr.refresh
HTH Gruß R
EDIT: Ich würde das allerdings ohne Makro, mit einer einzeiligen Filtertabelle, in die der Wert der ersten Listbox geschrieben wird, versuchen.
Siehe auch z.B. im englischen Forum: https://forum.openoffice.org/en/forum/v ... 00&t=94393
Windows 10: AOO, LO Linux Mint: AOO, LO

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Listenfeld mit SQL Abfrage

Beitrag von RobertG » Sa 3. Apr 2021, 09:46

Ich nehme einmal Deinen Code und passe ihn so an, dass er zu dem im Handbuch passt:

Code: Alles auswählen

DIM arSQL(0) AS STRING
arSQL(0) = "SELECT DISTINCT ""jahr"" FROM ""dbbilder"".""bilder1"" WHERE ""anlass""='Urlaub' ORDER BY ""jahr"""
oListBoxJahr.ListSource = arSQL
oListBoxJahr.refresh
… und zu der Filtertabelle:
Bei Mehrbenutzersystemen wie MySQL entweder mit einer temporären Tabelle arbeiten (die sehen die anderen Nutzer nicht) oder mit einer Filtertabelle, in der die CONNECTION_ID() als Primärschlüssel gespeichert ist. Dann wird der Filter je nach Verbindung auch richtig raus gesucht. Beides im Handbuch im Makro-Kapitel beschrieben.
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

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Listenfeld mit SQL Abfrage

Beitrag von chemnitzer » So 4. Apr 2021, 13:28

Hallo
Danke für die Antwort es funktioniert ein stück weiter. Mein Fehler war das ich nur den String übergeben wollte aber Du hast mir gezeigt, dass das Array übergeben werden muss.
Ich habe jetzt den Querrystring in eine gespeicherte Abfrage geschrieben ( dieser wird entsprechend der Parameter) angepasst. Abfrage zur Kontrolle im SQL-Modus geöffnet -> OK.
Ich habe dazu eine Tabelle mit den entsprechenden Spalten und in den Formulareigenschaften Art des Inhaltes [Abfrage] und im Inhalt [qViewFuellen] stehen. Die Tabelle soll aber aktualisiert d.h. qViewFuellen ausgeführt werden. Wechsel ich in den Bearbeitungsmodus und wieder zurück wird sie aktualisiert. Wie kann ich das Ohne den Wechsel machen ?

Schöne Ostern und schonmal vielen Dank
von Roland

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Listenfeld mit SQL Abfrage

Beitrag von RobertG » So 4. Apr 2021, 16:08

Hallo Roland,

durch die Beschreibung, die Du da lieferst, steige ich nicht mehr durch. Die Tabelle ist doch in der Datenbank. Wenn Du da etwas rein geschrieben hast, dann verstehe ich nicht, was Du aktualisieren willst. Oder geht es um ein Formular, das mit oForm.reload() z.B. neu geladen werden kann?

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

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Listenfeld mit SQL Abfrage

Beitrag von chemnitzer » So 4. Apr 2021, 21:13

Hallo Robert
ich hab mal 3 Bilder im Anhang. Hoffentlich hilft Dir das weiter.
Hier wird der Aufbau des Formulars gezeigt.
screenshot-1B.jpg
screenshot-1B.jpg (46.37 KiB) 1595 mal betrachtet
Hier ist die selektierte Tabelle mit Werten angezeigt
screenshot-1-1B.jpg
screenshot-1-1B.jpg (60.58 KiB) 1595 mal betrachtet
Hier wird der erzeugte select-befehl, welcher in der gespeicherten Abfrage "Auswahl" eingetragen wird.
screenshot-1-2B.jpg
screenshot-1-2B.jpg (312.37 KiB) 1595 mal betrachtet
Die oberen Listenfelder zeigen die vorhandenen Einträge an. z.B.: Anlass = "Urlaub" -> Urlaub kommt nur in den Jahren 2018,2019,2020 vor -> das Jahr 2020 ausgewählt -> es gibt nur die Orte = Zempin, Zempin-Tutow,... -> Zempin-Totow
daraus folgt dann der Selectbefehl.

Ich bin hier ziemlich Neuling. Es gibt nur eine große Tabelle mit allen Werten aus der Windowspfadstruktur. Diese ist nicht normalisiert weil ich den Import über eine csv-Datei welche über einen DIR-Befehl erzeugt wurde mache. Ich weiss, dass ist nicht besonders gut. Mit fehlt aber die Kenntnis noch wie ich die Zeilen der csv-Datei auseinander nehmen kann.

Danke für deine Mühe.
Gruss Roland

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Listenfeld mit SQL Abfrage

Beitrag von RobertG » Mo 5. Apr 2021, 09:44

Du versuchst ja wirklich alles über Makros zu machen, was nur geht, oder?

Du hast den SQL-Befehl erstellt, der für das Formular gelten soll. Das Formular soll also nicht auf einer Abfrage basieren sondern auf einem SQL-Befehl:

Code: Alles auswählen

oDoc = thisComponent
oForm = oDoc.Drawpage.Forms.getByName("")
oForm.Command = "SELECT ...."
oForm.CommandType = com.sun.star.sdb.CommandType.COMMAND
oForm.reload()
Da muss natürlich jetzt das richtige Formular rein und als SQL-Befehl der Befehl, den Du da ermittelt hast.

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

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Listenfeld mit SQL Abfrage

Beitrag von chemnitzer » Mo 5. Apr 2021, 11:43

Hallo Robert
Danke für die Lösung. Ich hab das im Makro angepasst und es FUNKTIONIERT.
Einen schönen Ostermontag wünscht Dir
Roland

PS: Ich muss mir wohl Dein Handbuch über BASE mal "reinsaugen".

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 ❤️

Antworten