🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
TIMESTAMP und foreign-keys im Formular
TIMESTAMP und foreign-keys im Formular
Ich habe ein TIMESTAMP Feld in meiner Tabelle.
Im Formular (per Assistent und auch manuell) verhält es sich aber nicht wie eins.
Ich muss das Datum manuell in Zahlen und sogar die trennenden Punkte selbst in das Feld schreiben.
Es gibt keine Kalender-Control mit dem ich das Datum per Maus-Klick auswählen könnte.
Es wird kein Datumsformat vor-eingeblendet.
Und es scheint auch nicht möglich zu sein per default das aktuelle Datum eintragen zu lassen.
Mache ich was falsch, oder geht das alles tatsächlich nicht?
Ähnliches Problem ist mit foreign-keys.
Bsp: Hund (das Formular) hat einen Besitzer (foreign-key "besitzer_oid"). Die Besitzer-OID möchte ich natürlich nicht von Hand eingeben, sondern im Formular die verfügbaren Besitzer (nicht mit oid!) auswählbar angezeigt bekommen.
Im Formular (per Assistent und auch manuell) verhält es sich aber nicht wie eins.
Ich muss das Datum manuell in Zahlen und sogar die trennenden Punkte selbst in das Feld schreiben.
Es gibt keine Kalender-Control mit dem ich das Datum per Maus-Klick auswählen könnte.
Es wird kein Datumsformat vor-eingeblendet.
Und es scheint auch nicht möglich zu sein per default das aktuelle Datum eintragen zu lassen.
Mache ich was falsch, oder geht das alles tatsächlich nicht?
Ähnliches Problem ist mit foreign-keys.
Bsp: Hund (das Formular) hat einen Besitzer (foreign-key "besitzer_oid"). Die Besitzer-OID möchte ich natürlich nicht von Hand eingeben, sondern im Formular die verfügbaren Besitzer (nicht mit oid!) auswählbar angezeigt bekommen.
-
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Re: TIMESTAMP und foreign-keys im Formular
Hallo MoonKid,
kuckst du hier:
http://www.libreoffice-forum.de/viewtop ... 10&t=13274
Das Problem hatte ich auch, du mußt der Tabelle diese Funktion durch Ausführen der SQL-Anweisung sozusagen von Hand beibringen, dann kann sie es in Zukunft.
Ich glaube, TIMESTAMP ist nur ein Anzeigeformat.
Dein Formular wird ein Unterformular mit einem Listenfeld zur Auswahl des Besitzers brauchen, das eine Abfrage enthält. So trivial die Funktion auch ist, wenn sie mal läuft, das Einrichten ist für Anfänger - gewöhnungsbedürftig.
Gruß
Freischreiber
kuckst du hier:
http://www.libreoffice-forum.de/viewtop ... 10&t=13274
Das Problem hatte ich auch, du mußt der Tabelle diese Funktion durch Ausführen der SQL-Anweisung sozusagen von Hand beibringen, dann kann sie es in Zukunft.
Ich glaube, TIMESTAMP ist nur ein Anzeigeformat.
Dein Formular wird ein Unterformular mit einem Listenfeld zur Auswahl des Besitzers brauchen, das eine Abfrage enthält. So trivial die Funktion auch ist, wenn sie mal läuft, das Einrichten ist für Anfänger - gewöhnungsbedürftig.

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
Re: TIMESTAMP und foreign-keys im Formular
Hallo Moonkid,
der Assistent erstellt für ein Timestamp-Feld erst einmal ein Datumsfeld sowie ein Zeitfeld. Dabei werden nur die Grundgerüste erstellt. Machst Du aus dem Datumsfeld ein aufklappbares Feld, so kannst Du auch die entsprechende Datumsauswahl nutzen. Gleiches gilt für das manuelle Erstellen einer solchen Feldkombination.
Ich nutze hingegen das formatierbare Feld, um den gesamten Timestamp da rein zu packen - ein Feld für einen Wert. Wenn ich darin nur die Abspeicherzeit brauche, dann lasse ich den Eintrag leer und stelle die zugrundeliegende Tabelle entsprechend ein (per SQL-Default). Für spätere Aktualisierungen nutze ich dann ein Makro.
Schau Dir einfach einmal die Beispieldatenbanken zu LO 4.4 an (Link unten in der Fußzeile). Da sind gleich zwei Beispiele mit Timestamps drin - incl ausführlicher Beschreibung.
Gruß
Robert
der Assistent erstellt für ein Timestamp-Feld erst einmal ein Datumsfeld sowie ein Zeitfeld. Dabei werden nur die Grundgerüste erstellt. Machst Du aus dem Datumsfeld ein aufklappbares Feld, so kannst Du auch die entsprechende Datumsauswahl nutzen. Gleiches gilt für das manuelle Erstellen einer solchen Feldkombination.
Ich nutze hingegen das formatierbare Feld, um den gesamten Timestamp da rein zu packen - ein Feld für einen Wert. Wenn ich darin nur die Abspeicherzeit brauche, dann lasse ich den Eintrag leer und stelle die zugrundeliegende Tabelle entsprechend ein (per SQL-Default). Für spätere Aktualisierungen nutze ich dann ein Makro.
Schau Dir einfach einmal die Beispieldatenbanken zu LO 4.4 an (Link unten in der Fußzeile). Da sind gleich zwei Beispiele mit Timestamps drin - incl ausführlicher Beschreibung.
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: TIMESTAMP und foreign-keys im Formular
Code: Alles auswählen
ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
Nach meinem Verständnis hat das Statement auch nix mit Daten zu tun. Es soll die Eigenschaft eines Feldes verändern - also dessen default-Wert festlegen. Das soll für alle in Zukunft angelegten Zeilen gültig sein. Aktuell ist die Tabelle natürlich leer.
Wahrscheinlich versteh ich am Konzept was falsch?
In deiner Fußzeile seh ich nur die Base-Doku. Darin sind zwei odb-Files. Keine der dortigen Tabellen hat ein TIMESTAMP-Feld.RobertG hat geschrieben:Schau Dir einfach einmal die Beispieldatenbanken zu LO 4.4 an (Link unten in der Fußzeile). Da sind gleich zwei Beispiele mit Timestamps drin
Re: TIMESTAMP und foreign-keys im Formular
Bin nur ein "Anfänger" im Bezug zur LO-Gui. Datenbank-Entwicklung (insbesondere OODBs) an sich ist mir nicht fremd. Hab nur grad keine Lust, wegen der Mini-Aufgabe mit Code anzufangen. Klicki-Bunti-LO muss da auch mal genügen. Wie du hier siehst. Soll für "B" ein Formular erzeugt werden, bei dem alle verfügbaren "A"-Zeilen (Feld: aaa) mit dargestellt (DropDown) werden sollen.Freischreiber hat geschrieben:Dein Formular wird ein Unterformular mit einem Listenfeld zur Auswahl des Besitzers brauchen, das eine Abfrage enthält. So trivial die Funktion auch ist, wenn sie mal läuft, das Einrichten ist für Anfänger - gewöhnungsbedürftig.![]()
Klicke ich im Wizard auf "Weiter" ist die Möglichkeit "Unterformular basiert auf bestehender Beziehung" aber disabled. LO sieht die Beziehung scheinbar nicht.
Erstelle ich ein Formular für A, ist dort eine Beziehung mit B zu sehen. Das macht in meiner Logik aber keinen Sinn. Ich möchte A im Formular von B auswählen können.
Re: TIMESTAMP und foreign-keys im Formular
In deinem Formular-Feld taucht also beim Anlegen eines neuen Datensatzes sofort das aktuelle Datum in dem Feld auf? Habe ich das richtig verstanden?RobertG hat geschrieben:Ich nutze hingegen das formatierbare Feld, um den gesamten Timestamp da rein zu packen - ein Feld für einen Wert. Wenn ich darin nur die Abspeicherzeit brauche, dann lasse ich den Eintrag leer und stelle die zugrundeliegende Tabelle entsprechend ein (per SQL-Default). Für spätere Aktualisierungen nutze ich dann ein Makro.
Re: TIMESTAMP und foreign-keys im Formular
Hallo MoonKid,
schau einfach einmal wirklich unter dem zweiten Link nach:
http://robert.familiegrosskopf.de/lo_hb_dev/
Da liegt eine Datenbank "Beispiel_Default_Datum_Zeit.odb" und die Beschreibung "Base_Beispiele_V44.pdf". Die zweite Datenbank zur Zeitmessung liegt den Beispieldatenbanken zur Version LO 4.3 bei.
Das kann nicht funktionieren. Ich nehme doch an, dass es sich bei "time" um ein Zeitstempelfeld handelt, also Datum und Zeit.
Eingegeben unter Extras → SQL erzeugt einen Zeitstempel, wenn Daten neu abgespeichert werden und das Zeitstempelfeld leer ist.
Wenn Du einen Zeitstempel bereits vorher sehen willst, dann musst Du das per Makro lösen. Aber denke daran, dass dann nicht die Zeit gespeichert wird, mit der der Datensatz tatsächlich in die Datenbank rutscht.
Das Tagesdatum lässt sich auch über eine Konstruktion mit Hauptformular-Unterformular einstellen. Nur siehst Du dann im Unterformular immer nur die Datensätze zum aktuellen Datum. Bei einer Eingabe über den Tageswechsel hinaus erscheint dann gegebenenfalls auch einmal das Datum des Vortages.
Robert
schau einfach einmal wirklich unter dem zweiten Link nach:
http://robert.familiegrosskopf.de/lo_hb_dev/
Da liegt eine Datenbank "Beispiel_Default_Datum_Zeit.odb" und die Beschreibung "Base_Beispiele_V44.pdf". Die zweite Datenbank zur Zeitmessung liegt den Beispieldatenbanken zur Version LO 4.3 bei.
Code: Alles auswählen
ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
Code: Alles auswählen
ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT NOW;
Wenn Du einen Zeitstempel bereits vorher sehen willst, dann musst Du das per Makro lösen. Aber denke daran, dass dann nicht die Zeit gespeichert wird, mit der der Datensatz tatsächlich in die Datenbank rutscht.
Das Tagesdatum lässt sich auch über eine Konstruktion mit Hauptformular-Unterformular einstellen. Nur siehst Du dann im Unterformular immer nur die Datensätze zum aktuellen Datum. Bei einer Eingabe über den Tageswechsel hinaus erscheint dann gegebenenfalls auch einmal das Datum des Vortages.
GrußZu Formular - Unterformular
Die Konstruktion geht nur sinnvoll, wenn da eine Beziehung 1:n besteht. Du wählst im Hauptformular einen Datensatz aus und bekommst im Unterformular die dazu passenden Datensätze angezeigt.
n:1-Beziehungen werden über Listenfelder gelöst. Dann benötigst Du nur ein Formular, in dem aber die Felder für den Fremdschlüssel existieren. Die Felder für den Fremdschlüssel wandelst Du um in Listenfelder. Listenfelder entnehmen über eine Abfrage den anzuzeigenden Text aus der jeweils anderen Tabelle und speichern aber den Fremdschlüsselwert dazu in der Tabelle des Formulars ab.
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: TIMESTAMP und foreign-keys im Formular
Ah verstehe. Hab den Datentyp des Feldes auf DATE geändert.RobertG hat geschrieben:Das kann nicht funktionieren. Ich nehme doch an, dass es sich bei "time" um ein Zeitstempelfeld handelt, also Datum und Zeit.Code: Alles auswählen
ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
Eingegeben unter Extras → SQL erzeugt einen Zeitstempel, wenn Daten neu abgespeichert werden und das Zeitstempelfeld leer ist.Code: Alles auswählen
ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT NOW;
Und es gibt wohl (mind.) zwei SQL-prompts/shells. Sehr logisch sinnvoll...

Du meinst, das Makro bedient nur das Formular und hat keine Wirkung auf die dahinterliegende Tabellenzeile?RobertG hat geschrieben:Wenn Du einen Zeitstempel bereits vorher sehen willst, dann musst Du das per Makro lösen. Aber denke daran, dass dann nicht die Zeit gespeichert wird, mit der der Datensatz tatsächlich in die Datenbank rutscht.
Bin nicht sicher, ob ich dir hier folgen kann. Evtl. denke ich auch zu objektorientiert?RobertG hat geschrieben:Unterformular
Mal ein "realeres" Beispiel: Jedes "Tier" gehört einer "Rasse" an. "Tier" hat also eine zu-1-Beziehung zur "Rasse".
Die "Rasse" hat im engeren Sinne gar keine Beziehung. Die "Rasse" interessiert nicht, wieviele "Tier"e sie hat. Das ist in dem Anwendungsfall nicht notwendig.
Worauf wolltest du jetzt hinaus?
Ich soll eine dritte "Rasse_Tier"-Tabelle machen? Das wäre schlechte Datenmodelierung und würde vielfältige Fehlermöglichkeiten (ein Tier mit mehreren Rassen) ermöglichen und entsprechende Plausi-Checks erforderlich machen. Wahrscheinlich habe ich dich aber nur falsch verstanden?
Desweiteren bietet meine "Lösung" auch keine sinnvollen Möglichkeiten im Formular-Wizard.
Vermutlich habe ich hier ein Paradigma-Problem?

Re: TIMESTAMP und foreign-keys im Formular
Dein PDF formuliert interessanter Weise den Begriff "besondere Problemstellung". Für mich ist das nicht "besonders", sondern ein erwartbares Normalverhalten einer Datenbankoberfläche wie LO. Nur leider ist es nicht implementiert und muss hinten rum nachgebaut werden.RobertG hat geschrieben:Da liegt eine Datenbank "Beispiel_Default_Datum_Zeit.odb" und die Beschreibung "Base_Beispiele_V44.pdf".
Hab mir "Defaultdatum_Makro_Standarddatum" und die Makros angeschaut. Funktioniert. Aber ich verstehe nicht warum. Wo in der GUI legst du fest, dass das betreffende Makro auch ausgeführt wird. In den Eigenschaften des Feldes im Formular konnte ich dazu nix finden.
Nebenbei: So eine Klicki-Bunti-GUI nutze ich eigentlich, um genau sowas nicht machen zu müssen. Werd mich wohl anderweitig umschauen, oder doch wieder selbst was schreiben.
Re: TIMESTAMP und foreign-keys im Formular
Hallo MonnKid,
Wenn Du mit Formular - Unterformular arbeiten würdest, dann wäre der Anfang bei der "Rasse" gesetzt. "Rasse" wäre dann Hauptformular.
Die Rasse interessiert aber sehr wohl, welches Tier ihr zugeordnet ist.
Wenn Du da noch eine dritte Tabelle zwischen baust, dann heißt das ja, dass Du einem Tier auch mehrere Rassen zurodnen kannst. Das wäre eine n:m-Beziehung.
Wenn Du bestimmte Erwartungen an die GUI, die auf verschiedene Datenbanken zugreifen soll, dann musst Du diese Erwartungen am besten rechtzeitig klären und Dich dann sachkundig machen, ob die GUI das auch bietet.
Nein, Base bietet nicht die vorherige Anzeige des aktuellen Datums im Datumsfeld an. Das ist eine besondere Problemstallung, genau das zu erreichen. Und es geht entweder über eine Abfrage-Formularkonstruktion oder über Makros. Bei den Makros müsste in der Beschreibung ("Praktische Beispiele ...") auch stehen, woran sie gebunden sind. Meist ist das beim Button oder, sofern es direkt bei Öffnen des Formulars ausgeführt wird, eben in den Eigenschaften des Formulars zu suchen.
Gruß
Robert
Wo hast Du die zweite SQL-Shell innerhalb von Base?MoonKid hat geschrieben: Und es gibt wohl (mind.) zwei SQL-prompts/shells. Sehr logisch sinnvoll...
Bei dem Beispiel ist es so, wie von mir ohne Hauptformular/Unterformular geschildert. Die "Rasse" gehört in ein Listenfeld, "Tier" ist Bestandteil des Formulars.MoonKid hat geschrieben: Jedes "Tier" gehört einer "Rasse" an. "Tier" hat also eine zu-1-Beziehung zur "Rasse".
Die "Rasse" hat im engeren Sinne gar keine Beziehung. Die "Rasse" interessiert nicht, wieviele "Tier"e sie hat. Das ist in dem Anwendungsfall nicht notwendig.
Wenn Du mit Formular - Unterformular arbeiten würdest, dann wäre der Anfang bei der "Rasse" gesetzt. "Rasse" wäre dann Hauptformular.
Die Rasse interessiert aber sehr wohl, welches Tier ihr zugeordnet ist.
Wenn Du da noch eine dritte Tabelle zwischen baust, dann heißt das ja, dass Du einem Tier auch mehrere Rassen zurodnen kannst. Das wäre eine n:m-Beziehung.
Wenn Du bestimmte Erwartungen an die GUI, die auf verschiedene Datenbanken zugreifen soll, dann musst Du diese Erwartungen am besten rechtzeitig klären und Dich dann sachkundig machen, ob die GUI das auch bietet.
Nein, Base bietet nicht die vorherige Anzeige des aktuellen Datums im Datumsfeld an. Das ist eine besondere Problemstallung, genau das zu erreichen. Und es geht entweder über eine Abfrage-Formularkonstruktion oder über Makros. Bei den Makros müsste in der Beschreibung ("Praktische Beispiele ...") auch stehen, woran sie gebunden sind. Meist ist das beim Button oder, sofern es direkt bei Öffnen des Formulars ausgeführt wird, eben in den Eigenschaften des Formulars zu suchen.
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.