❤️ 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. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Formular: Bedingte Anzeige in einem Listenfeld
Formular: Bedingte Anzeige in einem Listenfeld
Hallo,
ich designe mir aktuelle eine größere DB. Ein Teil davon ist zur Erfassung von Adressen geplant. Dafür habe ich drei Tabellen eingerichtet:
1) publisher(...., stateid, countryid) (stateid in relation zu states.id, countryid in Relation zu countries.id)
2) countries (id, country)
3) states (id, state, countryid) (countryid in Relation zu countries.id)
In dem Formular zu Erfassung und Änderung der Adressen habe ich zwei Listenfelder: State und Country. Während es bei Country mit der Standardversion ohne Probleme klappt (wie eigentlich auch bei State), hätte ich bei State gern eine "bedingte Anzeige". Und zwar sollen dort nur Angaben aus states angezeigt werden, die zur countryid passen.
Country: SELECT "country", "id" FROM "countries"
State: SELECT distinct "state", "id" FROM "states" -> hier habe ich leider nicht den richtigen Einfall, um ein korrektes SQL für das Listenfeld zu bekommen. Letzte Version war "SELECT distinct "state", "id", "country" FROM "states", publisher where states.country = publisher.country", welche aber leider auch nicht as gewünschte Ergebnis bringt.
Hat hier vielleicht jemand eine Idee?
VG
MacLeod
ich designe mir aktuelle eine größere DB. Ein Teil davon ist zur Erfassung von Adressen geplant. Dafür habe ich drei Tabellen eingerichtet:
1) publisher(...., stateid, countryid) (stateid in relation zu states.id, countryid in Relation zu countries.id)
2) countries (id, country)
3) states (id, state, countryid) (countryid in Relation zu countries.id)
In dem Formular zu Erfassung und Änderung der Adressen habe ich zwei Listenfelder: State und Country. Während es bei Country mit der Standardversion ohne Probleme klappt (wie eigentlich auch bei State), hätte ich bei State gern eine "bedingte Anzeige". Und zwar sollen dort nur Angaben aus states angezeigt werden, die zur countryid passen.
Country: SELECT "country", "id" FROM "countries"
State: SELECT distinct "state", "id" FROM "states" -> hier habe ich leider nicht den richtigen Einfall, um ein korrektes SQL für das Listenfeld zu bekommen. Letzte Version war "SELECT distinct "state", "id", "country" FROM "states", publisher where states.country = publisher.country", welche aber leider auch nicht as gewünschte Ergebnis bringt.
Hat hier vielleicht jemand eine Idee?
VG
MacLeod
Re: Formular: Bedingte Anzeige in einem Listenfeld
Hallo MacLeod,
ich verstehe zwar die englische Wortwahl nicht (Unterschied "country", "state"), aber mit Deiner Tabellenkonstruktion sagst Du aus, dass es für einen "state" ein "country" gibt - also nie mehrere "countries" für ein "state". Folglich gehört in die Tabelle "publisher" nur "stateid", nicht aber "countryid", die ja aus "state" direkt geschlossen werden kann.
Bedingte Listenfelder gehen nur über Makros. Du musst schließlich die Inhalte der Felder danach einstellen, wie der Wert eines anderen Feldes aussieht. Und den Wert dieses Feldes kannst Du nur aus dem aktuellen Datensatz, der noch nicht in der Tabelle steht, ablesen. Wie so etwas geht steht in http://www.libreoffice-forum.de/viewtop ... =10#p36755. Da ist der Zugriff auf ein Listenfeld und den Inhalt des Feldes per Makro in einem Beispiel enthalten.
Gruß
Robert
ich verstehe zwar die englische Wortwahl nicht (Unterschied "country", "state"), aber mit Deiner Tabellenkonstruktion sagst Du aus, dass es für einen "state" ein "country" gibt - also nie mehrere "countries" für ein "state". Folglich gehört in die Tabelle "publisher" nur "stateid", nicht aber "countryid", die ja aus "state" direkt geschlossen werden kann.
Bedingte Listenfelder gehen nur über Makros. Du musst schließlich die Inhalte der Felder danach einstellen, wie der Wert eines anderen Feldes aussieht. Und den Wert dieses Feldes kannst Du nur aus dem aktuellen Datensatz, der noch nicht in der Tabelle steht, ablesen. Wie so etwas geht steht in http://www.libreoffice-forum.de/viewtop ... =10#p36755. Da ist der Zugriff auf ein Listenfeld und den Inhalt des Feldes per Makro in einem Beispiel 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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Formular: Bedingte Anzeige in einem Listenfeld
Die Wortwahl ist vielleicht ein wenig unglücklich ...
country soll das Land sein (Deutschland, USA, ....)
state sollen Bundesstaaten (USA) oder Bundesländer (Deutschland) sein, wobei in Deutschland die Bundsländer eher keine entsprechende Rolle wie in den USA spielen. Ich habe das in zwei Tabellen gepackt, da es auch sicher Länder in meiner DB geben wird, wo kein Bundesstaat erfasst wird.
Ob jetzt die blaue Relation sind macht, bin ich auch noch am Überlegen.
(Nicht verwirren lassen, in der Version habe ich die country/state-Felder noch nicht als IDs umbenannt (countryid/stateid) )
Zumindest habe ich das Feld in der Tabelle ergänzt, um eine Selektion zu ermöglichen (publisher.country = states.country) und somit nur die states zu bekommen, die zu dem entsprechenden country gehören.
Ich bin da gern für Anmerkungen offen. Ich kann ja nur etwas dazulernen
Danke für den Hinweis auf die Makros. Das werde ich mir anschauen.
VG
MacLeod
country soll das Land sein (Deutschland, USA, ....)
state sollen Bundesstaaten (USA) oder Bundesländer (Deutschland) sein, wobei in Deutschland die Bundsländer eher keine entsprechende Rolle wie in den USA spielen. Ich habe das in zwei Tabellen gepackt, da es auch sicher Länder in meiner DB geben wird, wo kein Bundesstaat erfasst wird.
Ob jetzt die blaue Relation sind macht, bin ich auch noch am Überlegen.

Zumindest habe ich das Feld in der Tabelle ergänzt, um eine Selektion zu ermöglichen (publisher.country = states.country) und somit nur die states zu bekommen, die zu dem entsprechenden country gehören.
Ich bin da gern für Anmerkungen offen. Ich kann ja nur etwas dazulernen

Danke für den Hinweis auf die Makros. Das werde ich mir anschauen.
VG
MacLeod
Re: Formular: Bedingte Anzeige in einem Listenfeld
Hallo MacLeod,
dann gehört auf jeden Fall "publisher"."country" nicht da rein. "country" wird aus "state" geschlossen. Du wählst also für die Tabelle "publisher" im Formular nur einen "state" aus und hast damit automatisch die Verbindung zu "country", was ja bereits mit "states" verknüpft ist.
Du kannst auch "states" und "countries" zusammen in einem Listenfeld darstellen, so dass Du auf jeden Fall beides im Formular direkt sichtbar wird:
Das wäre der Code für das Listenfeld, das "stateID" an die Tabelle "publisher" überträgt.
Gruß
Robert
dann gehört auf jeden Fall "publisher"."country" nicht da rein. "country" wird aus "state" geschlossen. Du wählst also für die Tabelle "publisher" im Formular nur einen "state" aus und hast damit automatisch die Verbindung zu "country", was ja bereits mit "states" verknüpft ist.
Du kannst auch "states" und "countries" zusammen in einem Listenfeld darstellen, so dass Du auf jeden Fall beides im Formular direkt sichtbar wird:
Code: Alles auswählen
SELECT "countries"."country"|| ' > ' ||"states"."state", "states"."ID" FROM "states", "countries" WHERE "countries"."ID" = "states"."countryID"
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
Re: Formular: Bedingte Anzeige in einem Listenfeld
Ich habe mir beide Versionen (das SQL und Makros) angeschaut. Funktioniert beides 
Wobei ich mir jetzt auch wieder Gedanken über das DB-Design gemacht habe. Wie "vereinzelt" ist es gut/richtig?
Grundsätzlich war mein Gedankengang dabei, wenn eine Information mehrfach verwendet wird, dann muss sie nicht jedesmal wiederholt werden, sondern es reicht eine ID als Bezug zur Information.
-> eine Adresse hat ein Land (Deutschland, USA, ...) - aber ein Land hat viele Adressen -> Länder in eine eigene Tabelle
-> durch US-Adressen kam der Bundesstaat hinzu - ein Bundesstaat hat in Land, aber ein Land mehrere Bundesstaaten, dazu eine Adresse hat einen Bundesstaat und ein Bundesstaat mehrere Adressen -> somit auch eine eigene Tabelle
Das ist meine Logik hinter meinem Design. Aber wie oben schon angesprochen, ist es wirklich notwendig, für Länder und Bundesstaaten jeweils eigene Tabellen zu haben?

Wobei ich mir jetzt auch wieder Gedanken über das DB-Design gemacht habe. Wie "vereinzelt" ist es gut/richtig?
Grundsätzlich war mein Gedankengang dabei, wenn eine Information mehrfach verwendet wird, dann muss sie nicht jedesmal wiederholt werden, sondern es reicht eine ID als Bezug zur Information.
-> eine Adresse hat ein Land (Deutschland, USA, ...) - aber ein Land hat viele Adressen -> Länder in eine eigene Tabelle
-> durch US-Adressen kam der Bundesstaat hinzu - ein Bundesstaat hat in Land, aber ein Land mehrere Bundesstaaten, dazu eine Adresse hat einen Bundesstaat und ein Bundesstaat mehrere Adressen -> somit auch eine eigene Tabelle
Das ist meine Logik hinter meinem Design. Aber wie oben schon angesprochen, ist es wirklich notwendig, für Länder und Bundesstaaten jeweils eigene Tabellen zu haben?
Re: Formular: Bedingte Anzeige in einem Listenfeld
Hallo MacLeod,
ich würde für Deine Anforderung das Listenfeld umschreiben und nichts mit Makros erstellen.
Grundsätzlich sollten häufige Wiederholungen in einer Tabelle vermieden werden. Angenommen Du würdest Städte bestimmten Bundesländern zuordnen. Wenn Du "Nordrhein-Westfalen" jedes Mal ausschreibst wirst Du Dich wundern wie viele unterschiedliche Schreibweisen nachher existieren. Filterst Du dann die Tabelle, indem Du z.B. auf so ein Feld gehst und den Autofilter betätigst, dann hast Du den Eindruck eben länsgt nicht alle Städte angezeigt zu bekommen - und gibst die Städte teilweise erneut ein.
Ich treibe so etwas bei Adressdatenbanken unter Umständen sogar so weit, dass ich die Straßen aus der Adresstabelle raus nehme. Macht Sinn, wenn es sich z.B. um Adressen in stark örtlich begrenzten Verein handelt und bestimmte Straßennamen eben immer wieder auftauchen.
Gruß
Robert
ich würde für Deine Anforderung das Listenfeld umschreiben und nichts mit Makros erstellen.
Grundsätzlich sollten häufige Wiederholungen in einer Tabelle vermieden werden. Angenommen Du würdest Städte bestimmten Bundesländern zuordnen. Wenn Du "Nordrhein-Westfalen" jedes Mal ausschreibst wirst Du Dich wundern wie viele unterschiedliche Schreibweisen nachher existieren. Filterst Du dann die Tabelle, indem Du z.B. auf so ein Feld gehst und den Autofilter betätigst, dann hast Du den Eindruck eben länsgt nicht alle Städte angezeigt zu bekommen - und gibst die Städte teilweise erneut ein.
Ich treibe so etwas bei Adressdatenbanken unter Umständen sogar so weit, dass ich die Straßen aus der Adresstabelle raus nehme. Macht Sinn, wenn es sich z.B. um Adressen in stark örtlich begrenzten Verein handelt und bestimmte Straßennamen eben immer wieder auftauchen.
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 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.