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. 🤗
[gelöst] Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
-
- Beiträge: 51
- Registriert: Di 16. Okt 2018, 12:48
[gelöst] Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo,
ich suche eine Möglichkeit, möglichst ohne Makro, in einem Formular den angezeigten Inhalt eines Listenfeldes "Teilnehmer" in Abhängigkeit eines vorher auszuwählenden Listeneintrags des Feldes "Berater" zur Auswahl einzuschränken und das, ohne das Formular nach der Auswahl des Beraters zwischen zu speichern. Das Listenfeld "Teilnehmer" greift auf die Tabelle "Teilnehmer" zu, in der auch die ID der Berater bei jedem Teilnehmer-DS gespeichert ist. Das alles funktioniert soweit ganz gut, aber da zum Zeitpunkt der Dateneingabe in das Formular der Wert der Berater-ID noch nicht gespeichert/hinterlegt ist, steht die Selektion im Feld "Teilnehmer" über die vorher ausgewählte Berater-ID nicht zur Verfügung. Man muss also derzeit, nach Auswahl des Beraters das Formular speichern und dann kann man auch einen der Teilnehmer des Beraters auswählen.
Ich weiß, dass dieses Problem in der Vergangenheit schon mehrfach genannt/beschrieben/gelöst wurde, aber ich finde weder die Stelle im Handbuch, noch helfen mir diverse Suchmaschinenergebnisse hier weiter. Wer also weiß, wo die Lösung steht, den bitte ich um einen Link, ansonsten auch gern noch mal ausführlich hier.
Wenn es ohne Makro nicht geht, dann bitte keine Lösung, in der der angefangene Datensatz nach der Eingabe des ersten Listenfeldes "Berater" zwischengespeichert wird. Es muss die Option offen bleiben, den angefangenen Datensatz auch wieder zu verwerfen. Es müsste also ein "Speicher-Update" erfolgen, ohne auf den Datenträger zu schreiben.
Vielen Dank.
Peter
ich suche eine Möglichkeit, möglichst ohne Makro, in einem Formular den angezeigten Inhalt eines Listenfeldes "Teilnehmer" in Abhängigkeit eines vorher auszuwählenden Listeneintrags des Feldes "Berater" zur Auswahl einzuschränken und das, ohne das Formular nach der Auswahl des Beraters zwischen zu speichern. Das Listenfeld "Teilnehmer" greift auf die Tabelle "Teilnehmer" zu, in der auch die ID der Berater bei jedem Teilnehmer-DS gespeichert ist. Das alles funktioniert soweit ganz gut, aber da zum Zeitpunkt der Dateneingabe in das Formular der Wert der Berater-ID noch nicht gespeichert/hinterlegt ist, steht die Selektion im Feld "Teilnehmer" über die vorher ausgewählte Berater-ID nicht zur Verfügung. Man muss also derzeit, nach Auswahl des Beraters das Formular speichern und dann kann man auch einen der Teilnehmer des Beraters auswählen.
Ich weiß, dass dieses Problem in der Vergangenheit schon mehrfach genannt/beschrieben/gelöst wurde, aber ich finde weder die Stelle im Handbuch, noch helfen mir diverse Suchmaschinenergebnisse hier weiter. Wer also weiß, wo die Lösung steht, den bitte ich um einen Link, ansonsten auch gern noch mal ausführlich hier.
Wenn es ohne Makro nicht geht, dann bitte keine Lösung, in der der angefangene Datensatz nach der Eingabe des ersten Listenfeldes "Berater" zwischengespeichert wird. Es muss die Option offen bleiben, den angefangenen Datensatz auch wieder zu verwerfen. Es müsste also ein "Speicher-Update" erfolgen, ohne auf den Datenträger zu schreiben.
Vielen Dank.
Peter
Zuletzt geändert von pschulze59 am Fr 23. Nov 2018, 22:22, insgesamt 1-mal geändert.
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Peter,
wo soll ein Listenfeld ohne Zwischenspeicherung und ohne Makro die Information her bekommen, dass sich ein Wert an anderer Stelle geändert hat? Geht nicht ohne Makro.
Ein entsprechendes Makro dazu gibt es im Handbuch. Vermutlich suchst Du so etwas wie hierarchische Listenfelder. Das Makro im Handbuch ist darauf ausgelegt, dass gleich mehrere Listenfelder in einer Hierarchie zusammenstehen. So etwas kann natürlich auf lediglich eine Stufe heruntergesetzt und entsprechend kürzer gestaltet werden.
Gruß
Robert
wo soll ein Listenfeld ohne Zwischenspeicherung und ohne Makro die Information her bekommen, dass sich ein Wert an anderer Stelle geändert hat? Geht nicht ohne Makro.
Ein entsprechendes Makro dazu gibt es im Handbuch. Vermutlich suchst Du so etwas wie hierarchische Listenfelder. Das Makro im Handbuch ist darauf ausgelegt, dass gleich mehrere Listenfelder in einer Hierarchie zusammenstehen. So etwas kann natürlich auf lediglich eine Stufe heruntergesetzt und entsprechend kürzer gestaltet werden.
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: 51
- Registriert: Di 16. Okt 2018, 12:48
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Danke,
ich lese heute Abend noch mal im Handbuch nach - gestern hab ich da nichts gefunden. Aber mir war in Erinnerung, dass es da was gab.
Wie auch immer - ich werd's mal mit 'nem Makro probieren.
ich lese heute Abend noch mal im Handbuch nach - gestern hab ich da nichts gefunden. Aber mir war in Erinnerung, dass es da was gab.
Ja das ist ein Problem, was mal die Entwickler angehen könnten. Da der ausgewählte Listen-Wert nur im Speicher und noch nicht in der eigentlichen Tabelle steht, müsste eine Variable im Speicher an das nächste Listenfeld zur Auswertung übergeben werden. Es müsste also eine Eigenschaft eines Listenfeldes geben "Weitergabe an Feld ..."wo soll ein Listenfeld ohne Zwischenspeicherung und ohne Makro die Information her bekommen, dass sich ein Wert an anderer Stelle geändert hat? Geht nicht ohne Makro.
Wie auch immer - ich werd's mal mit 'nem Makro probieren.
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Peter,
dass da "Entwickler" etwas "angehen" halte ich für einen Traum. Ich wäre froh, wenn wenigstens die Bugs mal langsam wieder abnehmen ...
Falls das mit dem doch recht umfangreichen Makro so nicht klappt, dann kann ich noch einmal nach einer einfachen Version schauen.
Gruß
Robert
dass da "Entwickler" etwas "angehen" halte ich für einen Traum. Ich wäre froh, wenn wenigstens die Bugs mal langsam wieder abnehmen ...
Falls das mit dem doch recht umfangreichen Makro so nicht klappt, dann kann ich noch einmal nach einer einfachen Version schauen.
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: 51
- Registriert: Di 16. Okt 2018, 12:48
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Robert,
ich habe die Beschreibung im Handbuch gefunden. Auf den Seiten 481 bis 484 beschreibst Du einen entsprechenden Fall und erläuterst step by step das Makro. Die Methode finde ich gut.
Um es vorweg zu nehmen: Noch läuft es bei mir nicht!
Ich habe das Makro umgesetzt und beim Durchsehen und Testen mehrere Fehler bemerkt bzw. angezeigt bekommen.
1.
Du schreibst das in das erste der hierarchischen Listenfelder Zusatzinformationen zu speichern sind:
Allerdings wird er erste Parameter "MainForm" in Deinem Makro nirgends ausgewertet. Vielmehr beinhaltet Dein Makro Kommentarzeilen, die (ausgehend vom Parameter 0) nur die darauffolgenden Parameter beinhalten:
2. Der Makrointerpreter meckert immer folgende Zeilen an
Das Array wird aber gebildet und daher funktioniert und
Weiter bin ich noch nicht. 2. Hemmt mich derzeit, weiter zu machen. Hast Du eine Idee?
Peter
ich habe die Beschreibung im Handbuch gefunden. Auf den Seiten 481 bis 484 beschreibst Du einen entsprechenden Fall und erläuterst step by step das Makro. Die Methode finde ich gut.
Um es vorweg zu nehmen: Noch läuft es bei mir nicht!
Ich habe das Makro umgesetzt und beim Durchsehen und Testen mehrere Fehler bemerkt bzw. angezeigt bekommen.
1.
Du schreibst das in das erste der hierarchischen Listenfelder Zusatzinformationen zu speichern sind:
Hier der beispielhafte Inhalt der Zusatzinformationen:
MainForm,Jahrgang,verstecktes Kontrollfeld,Listenfeld 2
Allerdings wird er erste Parameter "MainForm" in Deinem Makro nirgends ausgewertet. Vielmehr beinhaltet Dein Makro Kommentarzeilen, die (ausgehend vom Parameter 0) nur die darauffolgenden Parameter beinhalten:
Ich habe daraufhin "MainForm" als Parameter aus den Zusatzinfos entfernt.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. Die Variable wird an die
Prozedur weitergegeben, die gegebenenfalls alle weiteren Listenfelder
einstellt.
2. Der Makrointerpreter meckert immer folgende Zeilen an
Code: Alles auswählen
IF oFeldHidden.HiddenValue <> "" AND InStr(oFeldHidden.HiddenValue, """"+Trim(aFilter(0))+"""='") = 0 THEN
Die Ursache scheint zu sein, dass oForm nicht gebildet wird und das erfolgt an der Stelle etwas weiter obenBASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: HiddenValue.
Code: Alles auswählen
oForm = oFeld.Parent
Code: Alles auswählen
oFeld = oEvent.Source.Model
Code: Alles auswählen
stTag = oFeld.Tag
Peter
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Peter,
gut, dass Du Dir das anschaust. "MainForm" gehört in die Version des Makros nicht mehr rein. Das muss ich sofort entfernen. Schließlich wird das Formular direkt über das Ereignis bestimmt. Dann kommt das Makro auch zum Zuge mit dem versteckten Kontrollfeld.
Wenn "HiddenValue" nicht bekannt ist: Hast Du wirklich das versteckte Steuerelement eingefügt?
Gruß
Robert
gut, dass Du Dir das anschaust. "MainForm" gehört in die Version des Makros nicht mehr rein. Das muss ich sofort entfernen. Schließlich wird das Formular direkt über das Ereignis bestimmt. Dann kommt das Makro auch zum Zuge mit dem versteckten Kontrollfeld.
Wenn "HiddenValue" nicht bekannt ist: Hast Du wirklich das versteckte Steuerelement eingefügt?
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: 51
- Registriert: Di 16. Okt 2018, 12:48
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Ja habe ich, aber muss es einem bestimmten Datentyp entsprechen?
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Peter,
wieso soll ein verstecktes Steuerelement einem Datentyp entsprechen? Die Fehlermeldung, die Du bekommst, bezieht sich doch darauf, dass die Eigenschaft HiddenValue gar nicht vorhanden ist. Die gibt es eben nur beim versteckten Steuerelement. Die Werte, die letztlich da gespeichert werden, sind egal.
Mach einmal einen Screenshot von Deinem geöffneten Formularnavigator.
Gruß
Robert
wieso soll ein verstecktes Steuerelement einem Datentyp entsprechen? Die Fehlermeldung, die Du bekommst, bezieht sich doch darauf, dass die Eigenschaft HiddenValue gar nicht vorhanden ist. Die gibt es eben nur beim versteckten Steuerelement. Die Werte, die letztlich da gespeichert werden, sind egal.
Mach einmal einen Screenshot von Deinem geöffneten Formularnavigator.
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: 51
- Registriert: Di 16. Okt 2018, 12:48
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo Robert,
das Stichwort "Navigator" öffnete mir die Augen - es war kein Verstecktes Kontrollfeld - Sorry für die Irritation. Ich habe es jetzt als ein solches auch wirklich drin und nun kommt der Fehler nicht mehr.
Das Makro hängt jetzt zwar an einer nächsten Stelle, aber da muss ich erst mal mich wieder eindenken und weitere Anpassungen an mein Formular machen.
Wenn ich nicht mehr weiter komme, melde ich mich. Du merkst schon, dass mir so einige Grundlagen fehlen, aber mich hat der Ehrgeiz gepackt.
Danke!
Peter
das Stichwort "Navigator" öffnete mir die Augen - es war kein Verstecktes Kontrollfeld - Sorry für die Irritation. Ich habe es jetzt als ein solches auch wirklich drin und nun kommt der Fehler nicht mehr.
Das Makro hängt jetzt zwar an einer nächsten Stelle, aber da muss ich erst mal mich wieder eindenken und weitere Anpassungen an mein Formular machen.
Wenn ich nicht mehr weiter komme, melde ich mich. Du merkst schon, dass mir so einige Grundlagen fehlen, aber mich hat der Ehrgeiz gepackt.
Danke!
Peter
-
- Beiträge: 51
- Registriert: Di 16. Okt 2018, 12:48
Re: Formular: Werte eines Listenfeldes abhängig von anderer Listenfeld-Auswahl einschränken?
Hallo,
ich wollte diesen thread abschließen.
Also Roberts Makro aus dem Handbuch habe ich nicht zum Laufen gebracht. Es hing an verschiedenen Stellen und es erschien mir ohnehin zu aufwändig, weil ich doch nur ein einziges abhängiges Listenfeld benötigte.
Daher griff ich die Idee von R. (von F3K Total) auf, die er mir mit der, von ihm eigens für mich erstellten, Beispieldatenbank de facto mitlieferte.
In jedem Fall braucht man ja irgendwie eine Zwischenspeicherung des Wertes aus dem ausgewählten Listenfeld1, um damit eine Einschränkung in Listenfeld2 zu machen.
Robert geht den Weg des SQL-Statements, welches er für das Listenfeld2 generiert und dort einsetzt. Und R. (von F3K Total) zeigte mir ein Lösung, ohne SQL-Statement in eine Behelfstabelle per verstecktem SubForm und Filter per GUI-Form-Befehle auch in die Hilfstabelle schreiben zu können.
Auch wenn ich anfangs diesen Weg nicht gehen wollte, weil Hilfstabelle und so, hab ich ihn nun doch eingeschlagen. Und ich muss sagen - es funktioniert gut.
Die Hilfstabelle "idueb" nimmt im Feld "uebid" den Übergabewert in dem einzigen Datensatz auf. Im Form "Kont" (um das hier geht) wird ein Subform "F_idueb" angelegt, welches mit der Hilfstabelle verbunden ist. Felder von der Hilfstabelle werden nicht dargestellt - wir brauchen das Form lediglich als Container für das subform und die damit verbundene Connection zur Hilfstabelle. Das Makro ermittelt die Übergabewert und schreibt in in das SubForm und so also in die damit verbundene Hilfstabelle. Von dort ist der Wert per Felddefinition für das Listenfeld2 (dessen angezeigten Werte darüber ja eingeschränkt werden sollen) wieder verwertbar. Ein refresh aktualisiert die angezeigten Listeneinträge. Das Makro habe ich an das Mouse-Over-Event gebunden, wenn die Maus über das Listenfeld1 fährt. Somit wird es auch ausgeführt, wenn man mit der Maus über einen vorhandenen Eintrag in Listenfeld1 fährt, um die Auswahl in Listenfeld2 zu aktualisieren, ohne das Listenfeld1 explizit anklicken zu müssen.
Hier das Listing:
Vielen Dank an Alle!
Peter
ich wollte diesen thread abschließen.
Also Roberts Makro aus dem Handbuch habe ich nicht zum Laufen gebracht. Es hing an verschiedenen Stellen und es erschien mir ohnehin zu aufwändig, weil ich doch nur ein einziges abhängiges Listenfeld benötigte.
Daher griff ich die Idee von R. (von F3K Total) auf, die er mir mit der, von ihm eigens für mich erstellten, Beispieldatenbank de facto mitlieferte.
In jedem Fall braucht man ja irgendwie eine Zwischenspeicherung des Wertes aus dem ausgewählten Listenfeld1, um damit eine Einschränkung in Listenfeld2 zu machen.
Robert geht den Weg des SQL-Statements, welches er für das Listenfeld2 generiert und dort einsetzt. Und R. (von F3K Total) zeigte mir ein Lösung, ohne SQL-Statement in eine Behelfstabelle per verstecktem SubForm und Filter per GUI-Form-Befehle auch in die Hilfstabelle schreiben zu können.
Auch wenn ich anfangs diesen Weg nicht gehen wollte, weil Hilfstabelle und so, hab ich ihn nun doch eingeschlagen. Und ich muss sagen - es funktioniert gut.
Die Hilfstabelle "idueb" nimmt im Feld "uebid" den Übergabewert in dem einzigen Datensatz auf. Im Form "Kont" (um das hier geht) wird ein Subform "F_idueb" angelegt, welches mit der Hilfstabelle verbunden ist. Felder von der Hilfstabelle werden nicht dargestellt - wir brauchen das Form lediglich als Container für das subform und die damit verbundene Connection zur Hilfstabelle. Das Makro ermittelt die Übergabewert und schreibt in in das SubForm und so also in die damit verbundene Hilfstabelle. Von dort ist der Wert per Felddefinition für das Listenfeld2 (dessen angezeigten Werte darüber ja eingeschränkt werden sollen) wieder verwertbar. Ein refresh aktualisiert die angezeigten Listeneinträge. Das Makro habe ich an das Mouse-Over-Event gebunden, wenn die Maus über das Listenfeld1 fährt. Somit wird es auch ausgeführt, wenn man mit der Maus über einen vorhandenen Eintrag in Listenfeld1 fährt, um die Auswahl in Listenfeld2 zu aktualisieren, ohne das Listenfeld1 explizit anklicken zu müssen.
Hier das Listing:
Code: Alles auswählen
Sub uebid
DIM oDoc, oDrawpage, oForm, oForms, oFeld as Object
DIM iuid as integer
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForms = ThisComponent.drawpage.forms
oForm = oDrawpage.forms.getByName("MainForm")
oFeld = oForm.getbyname("fmtTN")
iuid = oForm.getint(10)
'msgbox(iuid)
oForm_idueb = oForms.F_idueb
oForm_idueb.Columns.uebid.updateint(iuid)
oForm_idueb.updateRow
oForm_idueb.reload()
oFeld.refresh()
end sub
Peter
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 ❤️