Seite 1 von 2

Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 17:05
von Nordlicht00
Hallo,

Ich habe in meiner Test-DB ein Hauptformular in Formularansicht und ein Unterformular in Tabellen-Ansicht erstellt. Wie bekomme ich nun das Unterformular in das Hauptformular rein? Für 1:n und n:m-Beziehungen ist das ja essentiell.
Auch der Weg, im Hauptformular mit dem Formular-Navigator ein neues Unterformular zu erstellen funktioniert nicht. Im Navigator wird mir in der Liste zwar das Unterformular angezeigt und ich kann die Schlüsselfelder beider Formulare in den Einstellungen verknüpfen, aber ich sehe auf dem Hauptformular nix. Da erscheint kein Unterformular-Steuerelement und ich kann auch die Ansicht (Tabellen-Ansicht, da 1:n-Beziehung) nicht einstellen. Wo ist denn das Unterformular-Steuerelement und wie kann ich in diesem Unterformular nun die Felder der zugrunde liegenden Tabelle auswählen und in der Tabellensnsicht anzeigen? Das Handbuch hilft da leider auch nicht weiter. Ich hänge nach Seite 208 fest (als Verknüpfen geht noch, aber es werden mir keine Felder zur Auswahl angezeigt, so daß ich da nicht weiter komme).

Re: Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 18:10
von RobertG
Hallo Nordlicht,

so, wie Du das Formular in der Beispieldatenbank angelegt hast, benötigst Du gar kein Unterformular. Die zweite Tabelle zeigst Du doch über das Listenfeld an.

Das Hauptformular bei einer entsprechenden Beziehung ist immer das, das den Primärschlüssel als Fremdschlüssel an das Unterformular weitergibt. Deine "Untertabelle" wäre also die Tabelle, die die Datengrundlage für das Hauptformular ist. Die "Haupttabelle" liegt im Unterformular. Die verbindenden Felder sind die, die auch in den Beziehungen als verbindende Felder definiert werden. Schließlich kann die "Haupttabelle" keine Wert für den Fremdschlüssel enthalten, der in der "Untertabelle" noch nicht existiert. Umgekehrt ist das aber möglich.

Ich würde Dir raten, mit so etwas wie dem Testbeispiel aus dem Einführungskapitel des Handbuches anzufangen. Das ist zwar in der momentanen Form, sofern Du Dir nicht die aktuelle von meiner Website holst, noch nicht mit Anmerkungen zu Firebird versehen, zeigt aber, wozu solche Verknüpfungen und Strukturen da sind und wie das dann in Formularen und Berichten aussieht.

Außerdem habe ich ein kleines Beispiel für eine amerikanische Linuxzeitschrift verfasst. Ich hänge einmal die *.pdf-Datei zu der Beschreibung an. Da ist explizit die aktuelle interne Firebird-Datenbank der Bezug.

Gruß

Robert

Re: Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 19:15
von Nordlicht00
Hallo Robert,
so, wie Du das Formular in der Beispieldatenbank angelegt hast, benötigst Du gar kein Unterformular.
Ich bin inzwischen doch schon weiter. ;)
Ich will mit der Test-DB ja die grundlegenden Funktionen ausprobieren, damit ich zu meiner bestehenden Datenbank auf meinem NAS ein Frontend mit LibreOffice Base erstellen kann. Die Verknüpfung zu der Datenbank habe ich schon geschafft (ist eine MariaDB, funktionierte aber mit dem MySQL-Connector). Aber das Üben der Formularerstellung will ich natürlich nicht mit der bestehenden DB machen (will ja die Daten nicht verhunzen bei meinen Fehlversuchen), sondern mache das an dieser kleinen Test-DB.
Die zweite Tabelle zeigst Du doch über das Listenfeld an.
Das ist doch nur zum Eintragen des Fremdschlüsselwertes. War auch seltsam. Habe im Nachbarthread gelesen, daß man sowas in LibroOffice nicht so macht wie in Access (also mit Kombinationsfeldern, habe da auch erst verzweifelt herumprobiert und vergeblich nach Angabe der gebundenen Spalte und anzuzeigenden Spalte gesucht), sondern mit Listenfeldern (die scheinen in LibreOffice eine Kombination von Kombinationsfeldern und Listenfeldern in einem zu sein). Wozu man dann allerdings die Kombinationsfelder noch braucht wenn die nicht in der Lage sind den Fremdschlüsselwert einzutragen, ist mir schleierhaft.
Das Hauptformular bei einer entsprechenden Beziehung ist immer das, das den Primärschlüssel als Fremdschlüssel an das Unterformular weitergibt.
Ja, die Strukturen relationaler Datenbanken und die Normalisierungsregeln sind mir bekannt.. Habe schon auch recht komplexe Datenbanken mit Access als Frontend erstellt. Mein Problem ist die Bedienung von LibreOffice Base.

Für eine 1:n-Beziehung und eine n:m-Beziehung wird ja eine Hauptformular/Unterformular-Konstruktion benötigt. In Access ist das einfach. Hauptformular (Tabelle der 1-Seite) erstellen, Unterformular (Tabelle der n-Seite) erstellen, Unterformular ins Unterformular-Steuerelement laden, Verknüpfung der Schlüssel erstellen, fertig. Die Fremdschlüsselwerte werden dann bei Eintrag neuer Datensätze automatisch eingetragen (so soll es ja auch sein).
In LibreOffice habe ich es bis jetzt trotz Handbuch noch nicht einmal geschafft, ein Unterformular-Steuerelement zu erstellen und auch ein schon erstelltes Formular als Unterformular in ein Hauptformular zu laden. Im Formular-Navigator wird mir beim Kontextmenü "Neu --> Formular" zwar ein Untrformular angezeigt und dort kann ich auch die Schlüsselfelder verknüpfen, aber auf der Hauptformularfläche ist nichts zu sehen. Auch habe ich nichts gefunden, wo ich die im Unterformular anzuzeigenden Felder auswählen kann. Dieses Tabellen-Kontrollfeld ist mir noch ein Rätsel. Es erzeugt ja nur einen leeren Rahmen und in den Eigenschaften lassen sich weder die Datenquelle (Tabelle oder Abfrage) noch anzuzeigende Felder auswählen.

Was ich auch noch nicht gefunden habe, ist wie ich die Formularansicht auswählen bzw. ändern kann (Formularansicht, Endlosformularansicht). Das habe ich bisher nur mit dem Formular-Erstellungs-Assistenten geschafft, aber da sich ein Formular erst im Laufe der Zeit entwickelt, ist das nicht Sinn der Sache, d.h. ich muß lernen, das ohne Formularassistent zu erstellen (außerdem hat man ja meistens mehr als ein Unterformular).

Re: Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 20:11
von RobertG
Hallo Nordlicht,

genau wegen dieser Probleme würde ich zuerst eins der Beispiele nachbauen und mich dann an etwas neues wagen.

Formulare und Unterformulare:
Das Problem ist, dass sowohl die eingebaute Datei als auch die darin befindlichen Elemente "Formular" genannt werden. Ein Formulardokument kann mehrere Formulare enthalten. Die Formulare können nebeneinander liegen oder auch in der Form Formular - Unterformular. Jedes dieser Formulare hat eine eigene Datenbasis. Ein Unterformular musst Du mit einem Hauptformular verbinden. Das ist wie die Verbindung von zwei Tabellen in einer Abfrage.

Das Formulardokument zeigt nicht an, welches Element zu welchem dieser Formulare gehört. Die Elemente liegen alle auf der gleichen Oberfläche. Wenn Du zu einem bestimmten Formular z.B. eine Textbox hinzufügen willst, dann wählst Du im Navigator das Formular aus, wählst danach die Textbox und ziehst sie auf der Oberfläche auf. Willst Du alle Felder eines Formulars direkt nebeneinander sehen, so kannst Du ein Tabellenkontrollfeld aufziehen. Nach dem Aufziehen wirst Du durch die Assistenten gefragt, welche Felder in dem Tabellenkontrollfeld erscheinen sollen. So ein Tabellenkontrollfeld hat außerdem den Vorteil, dass Du bereits eingegebene Werte immer noch im Blick hast.

Listbox - Combobox:
Bei der Listbox werden Inhalte aus der Tabelle dargestellt und der Fremdschlüssel dazu abgespeichert. Mit geschickter Abfareg kannst Du natürlich auch die Inhalte mehrerer Tabellenfelder zusammengefasst anzeigen und nur den Schlüsselwert abspeichern. Listboxen sind nicht beschreibbar.
Comboboxen dienen dazu, eine Vorschlagsliste für Einträge in ein Feld aufzuführen, aber auch die Möglichkeit zu haben, eigenen Inhalt einzubauen. Ich nutze so etwas z.B. bei Tabellen wo einzelne Begriffe vielleicht öfter vorkommen, aber nicht in separate Tabellen ausgelagert sind. Ich mache eine Combobox, die die Werte aus der Datenquelle für dieses Feld anzeigt (DISTINCT, also keine Doppler) und kann so auswählen oder eben einen neuen Wert hinzufügen, der bei der Combobox nach Aktualisierung der Box auch erscheint.

Gruß

Robert

Re: Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 22:01
von Nordlicht00
Hallo Robert,
genau wegen dieser Probleme würde ich zuerst eins der Beispiele nachbauen
Aber auch dabei muß ich ja erstmal wissen, wie ich dahin komme, also die Bedienung lernen. Und genau daran hapert es bei mir noch. Das Nachbauen bringt also nix. Da finde ich es einfacher, eine einfache Test-DB mit wenigen Elementen dafür zu nehmen.
Das Problem ist, dass sowohl die eingebaute Datei als auch die darin befindlichen Elemente "Formular" genannt werden.
Was ist mit "eingebaute Datei" gemeint?
Die Formulare können nebeneinander liegen
Wie ist das gemeint? Jedes Formular hat doch sein eigenes Fenster. Jedenfalls öffnet sich beim Öffnen von zwei Formularen jedes in einem eigenen Formularfenster, genauso wie bei Access. Wenn ich zwei gleichwertige Formulare in einem Formularfenster haben möchte, dann müßte ich doch erst ein leeres Hauptformular (ohne Datenquelle) erstellen und darin dann zwei weitere Unterformulare, die aber nicht mit dem Hauptformular verknüpft sind. Oder geht das in LibreOffice anders als in Access? Die Grundlagen müßten doch eigentlich gleich sein?
Ein Unterformular musst Du mit einem Hauptformular verbinden.
Logisch. Das ist ja auch der Sinn von Unterformularen bei der Darstellung von 1:n- bzw. n:m-Beziehungen. Aber wie verbinde ich ein bereits separat erstelltes Formular als Unterformular zu einem Hauptformular? Bei komplexeren Datenbanken verwendet man ja einige Unterformulare mehrmals und man will diese ja nicht jedesmal neu erstellen.
Das Formulardokument zeigt nicht an, welches Element zu welchem dieser Formulare gehört. Die Elemente liegen alle auf der gleichen Oberfläche.
Ih, das ist ja übel. :o Wie behält man denn da die Übersicht? Man muß doch schließlich erkennen können. welches Element zu welchem Formular (Haupt bzw. eines der Unterformulare) gehört. Normalerwiese enthält ein Hauptformular ja mehrere Unterformulare.
Nach dem Aufziehen wirst Du durch die Assistenten gefragt, welche Felder in dem Tabellenkontrollfeld erscheinen sollen.
Ne, eben nicht. Jedenfalls habe ich sowas nicht gesehen. Genau an der Stelle hänge ich ja fest. Dieses Tabellenkontrollfeld ist doch das, was erscheint, wenn man links auf "Weitere Steuerelemente" und dann auf "Tabellen-Steuerelement" klickt? Weder erscheint da ein Assistent noch kann ich Felder zuweisen. Ich kann lediglich das Tabellen-Steuerelement aufziehen. Es enthält dann ein leeres Tabellen-Element ohne Felder und mit ausgegrauten Datensatznavigator-Pfeilen. Im Kontextmenü "Eigenschaften" gibt es keine Möglichkeit, die anzuzeigenden Felder auszuwählen.
Siehe Screenshot: Der dunkelgraue Hintergrund soll mir anzeigen, daß es auf dem Unterformular ist (Rechteck aufgezogen). Roter Kreis um das verwendete Steuerelement
So ein Tabellenkontrollfeld hat außerdem den Vorteil, dass Du bereits eingegebene Werte immer noch im Blick hast.
Solche Funktionalität ist doch der eigentliche Sinn eines Unterformulares, nämlich daß alle zu dem im Hauptformular angezeigten Datensatz gehörenden Datensätze der n-Seite der Tabellenbeziehung angezeigt werden, man diese editieren, löschen und neue Datensätze hinzufügen kann, wobei die nicht angezeigten Schlüsselfelder automatisch gefüllt werden.
Bei der Listbox werden Inhalte aus der Tabelle dargestellt und der Fremdschlüssel dazu abgespeichert.
Also genau das, was man von einer Kombobox erwarten würde (in Access wird sowas mit Kombinationsfeldern gemacht). Ich wäre ohne der Hinweise in dem Nachbarthread nie auf die Idee gekommen, daß man in LibreOffice ein Listenfeld als Kombinationsfeld darstellen kann (also einzeilig mit dem Pfeil zum Aufklappen).
Comboboxen dienen dazu, eine Vorschlagsliste für Einträge in ein Feld aufzuführen,
Dann hätte man aber ein falsches Datenmodell. ;) Wenn der gleiche Eintrag mehrmals in einem Tabellenfeld vorkommt, so ist dieses in eine extra Tabelle auszulagern und nur der Fremdschlüsselwert in der Haupttabelle zu speichern.

Re: Haupt- und Unterformular

Verfasst: Sa 26. Jan 2019, 22:31
von RobertG
Hallo Nordlicht,

lass uns doch einmal bei dem abgebildeten Formular bleiben: Welche Datenbasis hat denn Dein Unterformular? Die würde automatisch berücksichtigt, wenn Du nicht, wie ich auf dem Screenshot sehe, den Assistenten für die Steuerformulare ausgeschaltet hättest (Button mit Zauberstab unter dem mit "A" auf der linken Seite. Wenn Du ganz auf die Assistenten verzichtest, dann musst Du auf die Kopfleiste des Tabellenkontrollfeld klicken um Elemente hinzuzufügen.

Gruß

Robert

Re: Haupt- und Unterformular

Verfasst: So 27. Jan 2019, 00:23
von Nordlicht00
Hallo Robert,
Welche Datenbasis hat denn Dein Unterformular?
Ich habe eine neue Tabelle "NSeite2 mit den Feldern
NSeite_PK
Haupttabelle_FK
Feld1
Feld2
erstellt. Diese Tabelle ist die Datenquelle des Unterformulares.
wenn Du nicht, wie ich auf dem Screenshot sehe, den Assistenten für die Steuerformulare ausgeschaltet hättest (Button mit Zauberstab unter dem mit "A" auf der linken Seite.
Ach, das soll ein Zauberstab sein? Sieht für mich eher wie ein Magnet aus. :)
Nun, irgendwann war der auch mal aktiviert, aber da ich keine Auswirkung gesehen habe, hatte ich da wohl nochmal drauf geklickt.
dann musst Du auf die Kopfleiste des Tabellenkontrollfeld klicken um Elemente hinzuzufügen.
Ahhh! Das war der entscheidende Hinweis. :!: Auf die Kopfleiste hatte ich natürlich nicht gezielt, sondern es sowohl mit dem Kontextmenü "Einstellungen" im Formular-Navigator als auch im Kontextmenü des Tabellen-Steuerelementes (also irgendwo in der Mitte drauf geklickt) versucht. Bei beiden kam ich auf die gleiche Einstellungen-Seite und da war nix zu finden bzgl. Tabellenfeldern.

Jetzt muß ich das noch mit einer n:m-Beziehung versuchen.

Re: Haupt- und Unterformular

Verfasst: So 27. Jan 2019, 09:13
von RobertG
Hallo Nordlicht,

die Icons sind natürlich abhängig von der Einstellung, die Du für Dein LibreOffice gewählt hast. Bei mir erscheint da ein Stab mit vielen Sternchen und einem Zahnrad.

Außerdem gibt es da ja noch die Tip-Hilfe. "Steuerelemente-Assistent umschalten" erscheint, wenn ich mit der Maus über den Icon fahre.

Gruß

Robert

Re: Haupt- und Unterformular

Verfasst: So 27. Jan 2019, 15:42
von Nordlicht00
Hallo Robert,

In den LibreOffice-Einstellungen habe ich nichts verändert. Solange ich das Programm nicht kenne, lasse ich da lieber die Finger von. Sonst kann man es ganz schnell unbrauchbar verhunzen.

Der Tooltip erscheint auch bei mir, nur konnte ich bisher damit nichts anfangen, da beim Klick darauf nix passierte. Ich habe das jetzt nochmal probiert. Jetzt erscheint beim Anlegen einer Tabelle im Unterformular auch der Assistent. Die Felder im Tabellen-Steuerelement konnte ich nun anlegen.

Probiere gerade weiter mit Haupt- und Unterformularen. Das Navigieren ist unübersichtlich. Wenn ich mit dem Cursor im Unterformular bin und den Datensatz des Hauptformulares wechseln will (also unten auf den Datensatznavigator des Hauptformulares klicke), dann ändert sich nicht der Datensatz im Hauptformular, sondern im Unterformular. Aber dieses hat doch eine eigene Datensatznavigation. Ferner ist die Datensatznavigation unten im Hauptfenster kaum lesbar (hellgraue Pfeile auf hellgrauem Untergrund :!: ). Kann man die so umstellen, daß sie besser lesbar werden (z. B. als schwarze Pfeile auf dem hellen Untergrund)? Am besten wäre es, wenn man die Datensatz-Navigationspfeile in der Nähe der Felder des Hauptformulares plazieren könnte.

Diese Listenfeld-Kombis sind für mich auch etwas unlogisch (wenn man Access gewohnt ist). Einzig "SQL" bei "Art des Listeninhalts" scheint zu funktionieren, aber auch nur, wenn ich das anzuzeigende Tabellenfeld als erstes und danach das Primärschlüsselfeld in der Abfrage angebe. Und ich kann kein zweites anzuzeigendes Feld (nur in der aufgeklappten Liste, nicht im Feld selber) angeben. Sehr unschön. Warum kann man nicht einfach das anzuzeigende Feld angeben? Nehme ich ein zweites Textfeld mit in die Abfrage, setze es an die zweite Stelle der Abfrage und ändere die Gebundene Spalte auf "2" (da sie ja jetzt an dritter Position der Abfrage steht), wird trotzdem nur das erste Textfeld in der Liste angezeigt. Wie kann ich es ereichen, daß im aufgeklappten Teil des Listenfeldes mehr als eine Spalte als Tabelle angezeigt wird? Textverkettungen in einer Abfrage sind keine Lösung, da diese schlecht lesbar sind bei mehreren Feldern.

Re: Haupt- und Unterformular

Verfasst: So 27. Jan 2019, 19:42
von RobertG
Hallo Nordlicht,

Navigationsleiste: Die zeigt immer standardmäßig erst einmal das an, was sich in dem aktuellen (Unter-)Formular befindet. Stelle das Verhalten einfach um, so dass sie für das Hauptformular gültig bleibt: Formulareigenschaften > Daten > Navigationsleiste > Übergeordnetes Formular (oder so ähnlich ...).

Listenfelder: Die weitergegebenen Inhalte sind abhängig von dem Wert "Gebundenes Feld". Die Zählung beginnt bei '0'. Warum das manchmal so ist kann ich nicht sagen - wie bei Arrays in Makros - erster Wert Array(0). Der erste Wert wird immer angezeigt. Wählst Du das gebundene Feld genauso, so wird genau das abgespeichert, was angezeigt wird. Du kannst sogar mit -1 die Position des Eintrages abspeichern. Frag' mich nicht nach einem sinnvollen Beispiel hierfür, aber das ist extra in LO 4.1 mit eingebaut worden, weil jemand das brauchen konnte.

Wie willst Du zwei Felder nebeneinander anzeigen? Das Listenfeld hat doch, wie auch ein Textfeld, nur eine Möglichkeit der Anzeige. Hier eine Abfrage aus dem Handbuch, die den Inhalt mehrerer Felder zusammenfasst und auch im Abfrageeditor als ein Feld darstellt:

Code: Alles auswählen

SELECT
"Nachname"||', '||"Vorname"||' - ID:'||"ID",
"ID"
FROM "Tabelle1"
ORDER BY "Nachname"||', '||"Vorname"||"ID";
Gruß

Robert