❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️

❤️ HELFEN SIE JETZT >> << HELFEN SIE JETZT ❤️

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


Datenbank für Genealogie

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
GenOtto
Beiträge: 4
Registriert: Sa 30. Aug 2025, 12:39

Datenbank für Genealogie

Beitrag von GenOtto » Di 23. Sep 2025, 23:58

Hallo,
LibreOffice verwende ich schon lange. Jetzt habe ich mal eine eigene Datenbank in Base erstellt (ohne Makros). Die Datenbank soll als Familienchronik für einen ganzen Ort bzw. für eine Pfarrei verwendet werden können. Mit dem Ergebnis bin ich zufrieden. Nur die Bedienbarkeit möchte ich noch verbessern. Hier ein Beispiel aus der Gesamtliste (Bericht), die mit einer Parameterabfrage versehen ist, sodass man einzelne Elternpaare auswählen kann:
Bericht_Bsp_005_061.JPG
Bericht_Bsp_005_061.JPG (46.26 KiB) 889 mal betrachtet
Gibt man keine Nr. ein, erhält man die Gesamtliste. Durch den Seitenumbruch werden im (Gesamt-)Bericht Familien manchmal auseinandergerissen. Wenn ich es richtig gelesen habe, kann man den Seitenumbruch nicht beeinflussen. Stimmt das?

Die Datengrundlage ist eine Abfrage, die chronologisch sortiert ist. Für dieselben Daten habe ich eine Abfrage, die nach dem Familiennamen sortiert ist. Meinem Bericht kann ich also auch die alphabetische Abfrage zugrundelegen, weil die Felder übereinstimmen. Ich möchte aber den Berichtsentwurf kopieren, sodass ich den beiden Abfragen jeweils einen eigenen Bericht zuweisen kann. Sonst müsste ich bei jedem Wechsel der Suche die Datengrundlage im Berichtsnavigator austauschen. Wie kann ich einen Berichtsentwurf kopieren?
Gruß und schon mal Danke!
GenOtto

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

Re: Datenbank für Genealogie

Beitrag von RobertG » Mi 24. Sep 2025, 17:48

Die Inhalte in eine Gruppe packen und den Dateil-Bereich nicht nutzen. Der kann nichts zusammenhalten.
Bei der "Sortierung und Gruppierung" dann für die Gruppe der Familie den Zusammenhalt der gesamten Gruppe definieren.
Die Sortierung wird übrigens nicht durch die Abfrage definiert sondern durch die Gruppierung.
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

GenOtto
Beiträge: 4
Registriert: Sa 30. Aug 2025, 12:39

Re: Datenbank für Genealogie

Beitrag von GenOtto » Do 25. Sep 2025, 22:46

Danke für die Tipps!
Die Sortierung des Berichts nach dem Familiennamen klappte direkt. Ich musste bei der Gruppierung nur den "Familiennamen" an die erste Position schieben.
Das Zusammenhalten einer Familie beim Seitenumbruch geht nur eingeschränkt. Werden alle Daten in eine Gruppe gepackt, erscheint im Bericht jeweils nur die erste Ehefrau und das erste Kind einer Familie. Ich brauche also 3 Gruppen: Familie/Vater, Mutter, Kinder. Es gibt damit nur noch zwei mögliche Trennungen innerhalb einer Familie. Immerhin sind die Kinder jetzt eine eigene Gruppe und werden beim Seitenumbruch zusammengehalten.

Dann habe ich noch eine weitere Frage. Für einen schnellen Überblick habe ich denselben Datenbestand summarisch zusammengefasst, mit GROUP BY-Klausel und COUNT-Anweisung:
Abfrage summarisch.JPG
Abfrage summarisch.JPG (28.5 KiB) 826 mal betrachtet
Hatte eine Familie nur ein Kind, ist das Geburtsjahr sowohl MIN("Jahr") als auch MAX("Jahr"). Es erscheint dann z.B. geboren "1658 - 1658" Wie bekomme ich es hin, dass in einem solchen Fall das Geburtsjahr nur einmal ausgegeben wird? Mit CASE WHEN ging es nicht wegen der Aggregatfunktion.

GenOtto
Beiträge: 4
Registriert: Sa 30. Aug 2025, 12:39

Re: Datenbank für Genealogie

Beitrag von GenOtto » Sa 18. Okt 2025, 21:50

Die doppelte Jahreszahl bei Eltern mit 1 Kind bekomme ich nur weg, wenn sich die MAX-Funktion (=jüngstes Kind) auf ein anderes Tabellenfeld bezieht als die MIN-Funktion (=erstes Kind).

Ich verwende also ein zusätzliches Feld "Jüngstes", in das ich bei Eltern mit 1 Kind eine 1 eingebe, und bei Eltern mit mehreren Kindern kommt nur beim Datensatz mit dem jüngsten Kind ein # in das neue Feld.

Mit dem SQL-Befehl UPDATE ändere ich danach die 1 in ein Leerzeichen, und # wird zu ' - '||"Taufe"."Jahr"||' ' geändert. Damit lässt sich MIN("Taufe"."Jahr")||MAX("Taufe"."Jüngstes") so verbinden, dass die doppelte Jahreszahl nicht mehr erscheint.
Abfrage_summarisch_neu.JPG
Abfrage_summarisch_neu.JPG (32.04 KiB) 384 mal betrachtet
Ohne dieses separate Feld und einen Eintrag je Familie wird es wohl nicht gehen.

GenOtto
Beiträge: 4
Registriert: Sa 30. Aug 2025, 12:39

Re: Datenbank für Genealogie

Beitrag von GenOtto » Do 23. Okt 2025, 21:57

Hallo zusammen,
Jetzt habe ich noch ein paar Fragen zu meinem Eingabeformular, das hauptsächlich aus 5 Tabellensteuerelementen besteht mit jeweils 5 Spalten. Also keine Unterformulare. Die erste Spalte ist stets die ID. Die Spalten „Vorname“ und „Nachname“ enthalten Pflichteingaben. Hier ein Ausschnitt mit „gridVater“ und „gridMutter“:
Formular_mit5Grids.JPG
Formular_mit5Grids.JPG (41.26 KiB) 57 mal betrachtet
Von einem Tabellensteuerelement ins nächste springe ich mit
„Strg“+TAB, „Pos1“, „nach rechts“
und bin dann in der Spalte „Vorname“.

Die vielen interessanten Beiträge hier im Forum haben mich motiviert, eine Automatisierung dieses Vorgangs zu versuchen, obwohl Makros für mich Neuland sind. Ich habe dazu die letzte Spalte von „gridVater“ ("Vater Anmerkungen") mit folgendem Makro „bei Fokusverlust“ versehen:

Code: Alles auswählen

SUB NachGridMutterSpringen
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM oGrid3 AS OBJECT
	DIM oControl AS OBJECT
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	oForm = oDrawpage.forms.getByName("MainForm")
	oGrid3 = oForm.getByName("gridMutter")
	oControl = oDoc.CurrentController.GetControl(oGrid3)
	oControl.SetFocus
	oControl.SetCurrentColumnPosition(1)	
END SUB
Das klappt auch – fast. Denn der Datensatzzeiger (Cursor) springt zunächst eine Zeile runter und speichert dabei den aktuellen Datensatz, bevor er in die aktuelle Zeile zurückspringt. Das führt wegen den noch ausstehenden Pflichteingaben zu einer Fehlermeldung.

Das Problem konnte ich umgehen, indem ich eine eigentlich unnötige 6. Spalte angefügt habe (Dateninhalt = „ID“, wie Spalte 1). Jetzt hängt das Makro an der vorletzten Spalte, wodurch der Cursor beim Runterspringen im gleichen Datensatz bleibt.

Ich stelle mir als Makro-Anfänger die Frage, ob es nicht möglich ist, den Zeiger aus der letzten Spalte springen zu lassen ohne einen Ausrutscher in die nächste Zeile.

Weil ich für dieses Weiterspringen mehrere gleichartige Makros benötige, verwende ich diese Kurzfassung:

Code: Alles auswählen

SUB NachGridMutterSpringen
	oGrid3 = thisComponent.Drawpage.forms.MainForm.gridMutter
	oControl = thisComponent.CurrentController.GetControl(oGrid3)
	oControl.SetFocus
	oControl.SetCurrentColumnPosition(1)	
END SUB
Gibt es eine Möglichkeit, für diese Sprünge ein gemeinsames Makro zu erstellen, dass also nicht „oGrid3“ usw. als Sprungziel angegeben wird, sondern allgemein „das nächste Tabellensteuerelement“?

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

Re: Datenbank für Genealogie

Beitrag von RobertG » Fr 24. Okt 2025, 17:43

Ich sehe das doch richtig, dass sich das Ganze innerhalb eines Formulars ohne Unterformulare abspielt, oder? Dann kannst Du natürlich nicht bei der Arbeit mit dem Tabulator an den Fokusverlust des letzten Feldes ein Makro packen, das zum nächsten Tabellensteuerelement hüpfen soll. Der Fokusverlust löst ja auf jeden Fall erst einmal den Sprung zum nächsten Datensatz aus. Ginge also am einfachsten wirklich darüber, eine leere Dummyspalte einzubauen.

Du kannst in dem Feld, von dem Aus Du das Makro auslöst, angeben, welches Tabellenkontrollfeld Du anspringen möchtest. Dafür sind die Zusatzinformationen da.

Dann beginnt Dein Code mit

Code: Alles auswählen

SUB NachGridSpringen(oEvent AS OBJECT)
stGrid = oEvent.Source.Model.Tag
oGrid = thisComponent.Drawpage.forms.MainForm.getByName(stGrid)
…
Also aus den Zusatzinformationen den Namen des Tabellenkontrollfeldes auslesen und dann dort hin springen.
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


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