❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Listenfeld mit Parameter-Abfrage befüllen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
OfficeUser
Beiträge: 12
Registriert: Sa 28. Nov 2015, 06:29

[Gelöst] Listenfeld mit Parameter-Abfrage befüllen

Beitrag von OfficeUser » Sa 28. Nov 2015, 07:35

Hallo Zusammen

ich habe mich hier neu angemeldet, weil weder das Handbuch noch die Internetsuche zu erfolgreichen Ergebnissen geführt haben und ich hoffe hier hilfreiche Antworten zu erhalten.

Mein erstes Problem ist wie oben beschrieben, das befüllen eines Listenfeldes mit einer Parameter-Abfrage. Dabei habe ich mich genau an das Handbuch gehalten, trotzdem produziert der Formularaufruf nur Fehlermeldungen.

So sieht die Abfrage derzeit aus:

Code: Alles auswählen

SELECT "Geraete"."Modell" || ', ' || "Geraete"."Serien-Nr", "Geraete"."Person-ID", "Geraete"."ID" FROM "Geraete" WHERE "Gerate"."Person-ID" LIKE '%' || :qPersID || '%' ORDER BY "Geraete"."Modell"
Die Abfrage wird in einem Unterformular ausgeführt, in welchem sich das Listenfeld befindet. In einem ersten Formular wurde die Person gewählt und in einer Tabelle "Filter" dessen ID gespeichert. Danach wird über ein Button das neue Formular aufgerufen, in welchem das Gerät über das Listenfeld gewählt werden soll.

Rufe ich die Abfrage direkt über Abfragen auf und gebe eine gültige "qPersID" an, wird eine korrekte Tabelle ausgegeben. Rufe ich hingegen das Formular mit dem Listenfeld auf erscheint der Fehler:

Code: Alles auswählen

SQL-Status: S1000
Fehler-Code: -38

Assert failed: S0000 Direct execute with param count > 0java.lang.Exception
	at org.hsqldb.Trace.getStackTrace(Unknown Source)
	at org.hsqldb.Trace.doAssert(Unknown Source)
	at org.hsqldb.DatabaseCommandInterpreter.executePart(Unknown Source)
	at org.hsqldb.DatabaseCommandInterpreter.execute(Unknown Source)
	at org.hsqldb.Session.sqlExecuteDirectNoPreChecks(Unknown Source)
	at org.hsqldb.Session.execute(Unknown Source)
	at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
	at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
Falls ich meine Frage unzureichend geschildert habe bitte ich um Verzeihung, ich bin nicht nur hier neu, sondern beschäftige mich auch erst 1 Woche mit BASE. ;)

Lieben Gruß
Klaus
Zuletzt geändert von OfficeUser am So 29. Nov 2015, 08:47, insgesamt 1-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von RobertG » Sa 28. Nov 2015, 09:10

Hallo Klaus,

das Befüllen eines Listenfeldes mit Paramater-Abfragen geht nicht. Siehe Handbuch "Verwendung von Parametern in Abfragen", letzter Absatz:
Manchmal wäre es wünschenswert, Listenfelder in Abhängigkeit von Einstellungen des Hauptformulars zu ändern. So könnte beispielsweise ausgeschlossen werden, dass in einer Bibliothek Medien an Personen entliehen werden, die zur Zeit keine Medien ausleihen dürfen. Leider ist aber
eine derartige Listenfelderstellung in Abhängigkeit von der Person über Parameter nicht möglich.
Deine Abfrage stellt aber auch keine Listenfeldabfrage dar. Eine Listenfeldabfrage benötigt höchstens 2 Felder - eins, das im Formular angezeigt wird, ein anderes, das in der zugrundeliegenden Datenquelle abgespeichert wird. In sofern tappe ich da etwas im Dunkeln.

Wenn Du bereits eine Filtertabelle hast, so kannst Du das Listenfeld auf die Filtereingabe beziehen. Aber auch dann musst Du das Listenfeld nach der Abspeicherung des Filterwertes erst einmal aktualisieren. So ein Listenfeld wird direkt beim Öffnen des Formulars erstellt, nicht beim Wechsel vom Hauptformular zum Unterformular.

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von F3K Total » Sa 28. Nov 2015, 09:39

Moin,
ich empfehle dir deine .odb Datei, wenn nötig verfremdet, als .zip gepackt weil dieses Forum .odb nicht zuläßt, hier hochzuladen.
Siehe beim Editieren eines Threads unten, Reiter Dateianhänge.
Dann kann dir bestimmt geholfen werden.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

OfficeUser
Beiträge: 12
Registriert: Sa 28. Nov 2015, 06:29

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von OfficeUser » Sa 28. Nov 2015, 09:50

Hallo Robert

erstmal danke für deine Antwort, auch wenn ich diese nicht wirklich nachvollziehen kann.

1. Das Listenfeld soll nur 1x befüllt werden beim Aufruf des Formulars.

2. Die Werte stammen alle samt aus einer Tabelle (Geräte) und nur der Suchwert (Parameter) sollte aus der zweiten Tabelle (Filter) genommen werden.

3. Steht im Handbuch (S. 255) auch unter "Verwenden von Parametern in Abfragen" folgendes Beispiel:
SELECT
"Ausleihe"."ID",
"Leser"."Nachname"||', '||"Leser"."Vorname",
"Ausleihe"."MedienID",
"Ausleihe"."Ausleihdatum"
FROM "Ausleihe", "Leser"
WHERE "Ausleihe"."Rückgabedatum" IS NULL
AND "Leser"."ID" = "Ausleihe"."LeserID"
AND "Leser"."Nachname" LIKE '%' || :Lesername || '%'
ORDER BY "Leser"."Nachname"||', '||"Leser"."Vorname" ASC;
Diese Abfrage ist noch deutlich komfortabler als die vorhergehende. Jetzt muss nicht eine Nummer des Lesers bekannt sein. Es reicht die Eingabe eines Teils des Nachnamen des Lesers und alle Medien von Lesern, auf die diese Beschreibung zutrifft, werden angezeigt.

Jetzt stellt sich mir die Frage ob bzw. wie ich das Problem lösen kann. Muss ich eine temporäre Tabelle erstellen vor Aufruf des Formulars welche schon alle Geräte einer Person erhält?

Für weiter Vorschläge wäre ich sehr dankbar.


Lieben Gruß
Klaus

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von RobertG » Sa 28. Nov 2015, 11:13

Hallo Klaus,
OfficeUser hat geschrieben: Die Werte stammen alle samt aus einer Tabelle (Geräte) und nur der Suchwert (Parameter) sollte aus der zweiten Tabelle (Filter) genommen werden.
Dann beziehe doch den Wert aus der Tabelle "Filter" und nicht über einen Parameter:

Code: Alles auswählen

SELECT "Geraete"."Modell" || ', ' || "Geraete"."Serien-Nr", "Geraete"."Person-ID", "Geraete"."ID" FROM "Geraete" WHERE "Gerate"."Person-ID" = (SELECT "Person-ID" FROM "Filter") ORDER BY "Geraete"."Modell"
Ich weiß jetzt natürlich nicht, wie die Tabelle "Filter" bei Dir aufgebaut ist. Gegebenenfalls musst Du die Unterabfrage auf einen einzelnen Datensatz eingrenzen (SELECT "Person-ID" FROM "Filter" WHERE "ID" = 1).

Mach' doch einfach das, was F3K Total geschrieben hat: Lade die Datei als *.zip-Datei hier hoch - müsste lediglich ein paar Beispieldaten enthalten.

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

OfficeUser
Beiträge: 12
Registriert: Sa 28. Nov 2015, 06:29

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von OfficeUser » Sa 28. Nov 2015, 14:54

Hallo Robert

deine Lösung klappt hervorragend. :D

Sorry, für das späte Feedback, jedoch war ich noch damit beschäftigt eine Muster-Datenbank zu erstellen, weil das Entfremden der aktuellen Datenbank noch aufwendiger gewesen wäre. ;)


Bitte denkt beim Download daran, die Datenbank ist noch nicht fertig. Außerdem enthält sie Makros!
Muster.odb.zip
(20.03 KiB) 180-mal heruntergeladen

Danke an alle Helfer und Grüße an alle anderen.
Klaus

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von F3K Total » Sa 28. Nov 2015, 16:08

Hi,
ich habe dir mal alles in ein Formulardokument gepackt. Strukturell ist ein Unterformular hinzugekommen, schau es dir mit dem Formularnavigator an.
Gruß R
Dateianhänge
Muster_F3K.zip
(14.59 KiB) 205-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

OfficeUser
Beiträge: 12
Registriert: Sa 28. Nov 2015, 06:29

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von OfficeUser » Sa 28. Nov 2015, 16:51

Hallo R

danke für den Lösungsansatz, jedoch bleibe ich bei dem weiteren Formular. Denn sowohl aus dem ersten, als auch aus dem zweiten Formular gibt es weitere Verzweigungen, welche auf die Filtertabelle zurückgreifen.

Mal sehen, wenn ich es schaffe und weitere Fragen anstehen baue ich die Muster-Datenbank parallel mit auf. ;)


Lieben Gruß
Klaus

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von F3K Total » So 29. Nov 2015, 06:52

Moin Klaus,
wenn du bei deiner Version bleiben möchtest, hier noch ein Tipp zum Öffnen/Schließen Makro, momentan nutzt du es nicht so wie gedacht.
Wenn du im Formular-Entwurfsmodus auf die Eigenschaften der Schaltfläche -> Reiter Allgemein wechselst, findest du weiter unten den Eintrag Zusatzinformation. Genau diese wird mit der Code Zeile

Code: Alles auswählen

stTag = oEvent.Source.Model.Tag
ausgelesen.
D.h. wenn du in die Zusatzinformation GeraetAuswahl,PersonAuswahl einträgst, nimmt sich das Makro die Namen der betroffenen Formulare aus der Schaltfläche.
So kannst Du mit einem einzigen Makro hundert verschiedene Formulare mit unterschiedlichen Schaltflächen Öffnen/Schließen

Code: Alles auswählen

Sub Wechsel_von_Person_zu_Geraet (oEvent AS OBJECT)
	DIM stTag AS String
	DIM aForm()
	stTag = oEvent.Source.Model.Tag
	aForm() = Split(stTag, ",")
	ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(0)) ).open
	ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(1)) ).close
End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

OfficeUser
Beiträge: 12
Registriert: Sa 28. Nov 2015, 06:29

Re: Listenfeld mit Parameter-Abfrage befüllen

Beitrag von OfficeUser » So 29. Nov 2015, 07:42

Hallo R

vielen Danke für diesen Tipp, welcher wirklich eine Erleichterung darstellt. :D


Lieben Gruß
Klaus


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten