Hallo Ulrich,
wie es der Zufall will, habe ich gerade dieses Thema durchprobiert, weil ich die Neufassung des Kapitels "Base" für das Handbuch "Erste Schritte mit LibreOffice" schreibe.
Ich kann dir zwei Wege beschreiben, der zweite ist noch ein bisschen bequemer als der erste, benötigt aber ein kleines Makro. Es wird sicher noch weitere ähnliche Varianten für die Lösung geben.
Ich gehe in meinerBeschreibung erst einmal davon aus, dass du schon in etwa weißt, wie das mit den Formularen funktioniert, und auch grundsätzlich ein Makro anlegen könntest (den Code liefere ich unten). Ich kümmere mich auch überhaupt nicht um die optische Gestaltung. Wenn meine Beschreibung für deine derzeitigen Kenntnisse zu knapp ist, melde dich nochmal.
Der Tabellenentwurf ist erst mal in Ordnung, minimal, aber genau das, was man braucht.
Für das Formular würde ich die Zuordnung zu den Gruppen für eine Person anzeigen, das ist das natürlichere Vorgehen, unter anderem auch, weil es weniger Grupen als Personen gibt; ich glaube aus deiner Beschreibung herauszulesen, dass du das auch so auffasst. Ein zweites Formular (oder ein Bericht) könnte ja dann die Gruppen mit den Ihnen zugeordneten Personen zeigen.
Das ganze Formular(-dokument, leider ist der Sprachgebrauch doppeldeutig, denn ein Formulardokument enthält Formulare!) kann man nicht mit dem Assistenten erzeugen, weil der eine hierarchische Anordnung vorsieht und auch nur zwei Formulare kann. Erzeuge also mit dem Assistenten (oder wenn du willst, in der Entwurfsansicht) ein Formular - ich vergebe jetzt Namen, damit klare Bezeichner da sind - "fPersonen" für die Tab. Personen und eine Unterformular "fZugeh" für die Zugehörigkeiten, das mit fPersonen über Personen.id = Zugehörigkeiten.prsId verknüpft ist; die Verknüpfung muss sein, auch wenn die DB die Verknüpfung schon kennt, es könnte ja mehrere Relationen geben, du kannst aus den vorhandenen Relationen beim Assistenten auswählen. Für beide Formulare willst du offensichtlich eine tabellarische Darstellung, was ich genauso machen würde, also wähle beim Assistenten bzw. im Entwurf jeweils das Tabellen-Steuerelement.
Wenn du dann - beim Assistenten - in der Anzeigesicht des Formulardokuments gelandet bist, schließe sie und rufe es zum Bearbeiten auf.
Für das dritte Formular "fGruppe" rufe zunächst den Formular-Navigator auf, markiere das oberste Element "Formulare" und rufe im Kontextmenü Neu -> Formular auf (das neue Formular ist ja nicht fPersonen untergeordnet, deshalb ist das der richtige Platz). Das neue Formular heißt jetzt wohl - wir sind noch im Navigator - "Formular"; benenne es in fGruppe um. Füge jetzt über die Symbolleiste Formular-Steuerelemente und die Auswahl des Symbols Weitere Steuerelemente ein Tabellen-Kontrollfeld ein, das hängt unter fGruppe, weil das noch vom Erzeugen markiert ist. Das musst du dann über Kontext -> Eigenschaften -> Daten der DB-Tabelle zuordnen. Dann musst du zumindest das Feld für bez hinzufügen, die id nur dann, wenn du sie sehen willst.
In der Tabelle der Zugehörigkeiten in fZugeh (nicht in der DB) änderst du über Kontext -> Ersetzen durch -> Listenfeld das Feld für grpId in ein Listenfeld. Dem gibst du dann über Kontext -> Eigenschaften -> Daten den Listeninhalt mit, der aus den zwei Spalten id und bez der DB-Tabelle Gruppen besteht, entweder über das SQL SELECT id, bez FROM Gruppen [ORDER BY ...] oder über eine entsprechende View der DB oder eine Abfrage , die du in Base erzeugt hast. Ändere auch ggf. in den EIgenschaften -> Allgemein, dass die Liste aufklappbar ist, und die Anzahl der gezeigten Zeilen. Das hat den Zweck, dass du in der Formular-Tabelle der Zugehörigkeiten die Gruppe nach ihrer Bezeichnung auswählen kannst.
Das geht gut, wenn die Gruppe schon existiert hat, als das Formular-Dokument aufgerufen wurde. Nun kannst du aber neue Gruppen über fGruppe anlegen. Die werden zunächst nicht in der Auswahlliste angezeigt. Hier gibt es nun - zumindest - zwei Wege.
1) Markiere im Navigator fPersonen - oder "Formulare", das läuft auf das Gleich hinaus - und füge dann eine Schaltfläche ein, der du als Aktion "Formular aktualisieren" zuweist. Die musst du drücken, nachdem du in der Tabelle der Gruppen eine oder mehrere Sätze hinzugefügt hast, egal ob über die Formular-Tabelle oder direkt in der DB; den neuen Stand kriegt ansonsten das Formular nur mit, wenn es nach der Änderung geladen wird. Danach kanst du auch die neuen Gruppen in der Auswahlliste auswählen.
2) Etwas bequemer geht es mit einem Makro, das die in der Formular-Tabelle ausgewählte Gruppe in die Tabelle der Zugehörigkeiten überträgt. Das ist bei schon vorhandenen Gruppen im Aufwand vergleichbar mit der Auswahl aus der Auswahlliste, aber bei neuen Gruppen direkter.
Dazu brauchst du auch eine Schaltfläche, die aber als Aktion "Keine" hat. Im Reiter "Ereignisse" weist du dem Ereignis "Aktion ausführen" oder - wenn dein DB-System aufgrund deiner Festlegungen eventuell ein Veto gegen den Insert in Gruppen einlegen kann, besser in "Aktion bestätigen", was erst nach dem eventuellen Veto aufgerufen wird - das folgende Makro zu. Die Formularnamen habe ich einfach im Text geändert, möglicherweise habe ich dadurch einen Fehler erzeugt, aber das Ausgangsmakro funktioniert.
Sub neu
forms = ThisComponent.Drawpage.Forms
fGruppe = forms.getByName("fGruppe")
if fGruppe.isNew then
fGruppe.insertRow
end if
grpId = fGruppe.Columns.getByName("id").string
fZugeh = forms.fGruppe getByName("fPersonen").getByName("fZugeh")
fZugeh.moveToInsertRow
fZugeh.Columns.getByName("grpId").updateString(grpId)
fZugeh.insertRow
fZugeh.getByName("Name des Tabellen-Kontrollelements für Zugehörigkeit").getByName("Name der Spalte für grpId").refresh
End Sub
Das Makro speichert zunächst eine eventuell neu angelegte Zeile in der Tabelle Gruppen, dann holt es sich die dann vergebene Id (ich gehe davon aus, dass du die Ids automatisch vergibst), hangelt sich zu dem Formular für die Zugehörigkeiten durch, legt eine neue Zeile an, trägt da die grpId ein (die persId wird automatisch vorgeschlagen wegen der Hierarchie zur Person), speichert die Zeile und aktualisiert den Inhalt der Auswahlliste.
Zu den Buttons, die du am Ende erwähnst: das Formular-Dokument hat eine Navigationsleiste, die auch ein Speichern-Symbol enthält. Außerdem wird auch gespeichert, wenn man durch Pfeil-auf oder -ab oder Klicken woanders hin die Zeile verlässt (und bei der Gruppe durch das Makro). Extra Schaltflächen sind also Luxus, aber vielleicht hilfreich. Lege Sie im zugehörigen Formular an und gib ihnen die Aktion "Datensatz speichern".
Gruß
Gerhard