🙏 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!🍀

❤️ DANKE >> << DANKE ❤️

>> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Di 9. Dez 2014, 23:41

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.

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von Freischreiber » Mi 10. Dez 2014, 08:57

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. :lol:

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

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

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von RobertG » Mi 10. Dez 2014, 10:35

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
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

MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Mi 10. Dez 2014, 12:09

Code: Alles auswählen

ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
"Dateninhalte konnten nicht geladen werden."

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?
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
In deiner Fußzeile seh ich nur die Base-Doku. Darin sind zwei odb-Files. Keine der dortigen Tabellen hat ein TIMESTAMP-Feld.

MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Mi 10. Dez 2014, 12:27

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. :lol:
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.
lo_rel.png
lo_rel.png (52.38 KiB) 4788 mal betrachtet
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.

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.

MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Mi 10. Dez 2014, 12:37

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.
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
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von RobertG » Mi 10. Dez 2014, 13:26

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.

Code: Alles auswählen

ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
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 NOW;
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.
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.
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

MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Mi 10. Dez 2014, 14:47

RobertG hat geschrieben:

Code: Alles auswählen

ALTER TABLE "TrainingUnit" ALTER COLUMN "time" SET DEFAULT CURRENT_DATE;
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 NOW;
Eingegeben unter Extras → SQL erzeugt einen Zeitstempel, wenn Daten neu abgespeichert werden und das Zeitstempelfeld leer ist.
Ah verstehe. Hab den Datentyp des Feldes auf DATE geändert.
Und es gibt wohl (mind.) zwei SQL-prompts/shells. Sehr logisch sinnvoll... ;)
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.
Du meinst, das Makro bedient nur das Formular und hat keine Wirkung auf die dahinterliegende Tabellenzeile?
RobertG hat geschrieben:Unterformular
Bin nicht sicher, ob ich dir hier folgen kann. Evtl. denke ich auch zu objektorientiert?
Mal ein "realeres" Beispiel:
tier.png
tier.png (5.44 KiB) 4783 mal betrachtet
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?
rasse_tier.png
rasse_tier.png (8.7 KiB) 4783 mal betrachtet
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? ;)

MoonKid
Beiträge: 172
Registriert: Fr 14. Okt 2011, 21:26

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von MoonKid » Mi 10. Dez 2014, 15:10

RobertG hat geschrieben:Da liegt eine Datenbank "Beispiel_Default_Datum_Zeit.odb" und die Beschreibung "Base_Beispiele_V44.pdf".
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.

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.

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

Re: TIMESTAMP und foreign-keys im Formular

Beitrag von RobertG » Mi 10. Dez 2014, 15:36

Hallo MonnKid,
MoonKid hat geschrieben: Und es gibt wohl (mind.) zwei SQL-prompts/shells. Sehr logisch sinnvoll... ;)
Wo hast Du die zweite SQL-Shell innerhalb von Base?
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.
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.
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


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