Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi datum/zeit automatisch in tabelle ? (https://www.delphipraxis.net/13134-datum-zeit-automatisch-tabelle.html)

macht 11. Dez 2003 15:08


datum/zeit automatisch in tabelle ?
 
Ist es möglich mySQL so zu konfigurieren, das bei jedem Eintrag in eine Tabelle automatisch Zeit und Datum des Eintrags mitgespeichert werden ?
Und falls ja, wie ?
Vielen Dank im Voraus

eddy 11. Dez 2003 21:07

Re: datum/zeit automatisch in tabelle ?
 
Hallo macht,

also immer beim Speichern eines Datensatzes oder von Änderungen darin so in der Art:
Code:
Tab.FieldByName('Geaendert').AsDateTime := now;
oder wie meinst Du das?

mfg
eddy

Leuselator 12. Dez 2003 01:39

Re: datum/zeit automatisch in tabelle ?
 
Diese Seite solltest Du Dir vielleicht in die Favoriten legen: Info's zu DatumsTypen - Guckst Du bei "Timestamp"

macht 12. Dez 2003 13:47

Re: datum/zeit automatisch in tabelle ?
 
Ja das habe ich auch schon gelesen,hilft mir aber leider nicht weiter.
Das Datum soll automatisch in die Tabelle mit eingetragen werden, und nicht vom (Delphi-)Programm stammen, da mehrer User mit evlt unterschiedlichen Zeiten darauf zugreifen und auch evtl andere Software zum eintragen benutzen.

Also am besten sowas wie auto_increment nur eben als auto_date oder so

Leuselator 12. Dez 2003 14:23

Re: datum/zeit automatisch in tabelle ?
 
Also für die Zukunft empfehle ich ernsthaftes Doku-Studium bevor man sich an ein Forum um Hilfe wendet! für diesmal hier auszug von 5 Sekunden Clicken auf der oben von mir verlinkten Seite:

Zitat:

CURDATE()
CURRENT_DATE
Gibt das Datum von heute im 'YYYY-MM-DD'- oder YYYYMMDD-format zurück, abhängig davon, ob die Funktion in einem Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
Gibt die aktuelle Zeit als einen Wert im 'HH:MM:SS'- oder HHMMSS-format zurück, abhängig davon, ob die Funktion in einem Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
Gibt das aktuelle Datum und die aktuelle Zeit als einen Wert im 'YYYY-MM-DD HH:MM:SS'- oder YYYYMMDDHHMMSS-Format zurück, abhängig davon, ob die Funktion in einem Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(datum)
Ohne Argument aufgerufen gibt die Funktion einen Unix-Zeitstempel zurück (Sekunden seit '1970-01-01 00:00:00' GMT). Wenn UNIX_TIMESTAMP() mit einem datum-Argument aufgerufen wird, gibt sie den Wert des Arguments als Sekunden seit '1970-01-01 00:00:00' GMT zurück. datum kann eine DATE-Zeichenkette, eine DATETIME-Zeichenkette, ein TIMESTAMP oder eine Zahl im Format YYMMDD oder YYYYMMDD in lokaler Zeit sein:
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
Wenn UNIX_TIMESTAMP auf einer TIMESTAMP-Spalte benutzt wird, erhält die Funktion den Wert direkt, ohne implizite ``zeichenkette-zu-unix-zeitstempel''-Umwandlung. Wenn Sie UNIX_TIMESTAMP() einen falschen Wert oder einen Wert ausserhalb des Wertebereichs angeben, gibt sie 0 zurück.
FROM_UNIXTIME(unix_zeitstempel)
Gibt das unix_timestamp-Argument als Wert im 'YYYY-MM-DD HH:MM:SS'- oder YYYYMMDDHHMMSS-Format zurück, abhängig davon, ob die Funktion in einem Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300

macht 12. Dez 2003 14:45

Re: datum/zeit automatisch in tabelle ?
 
Hm ja, das habe ich schon gelesen, aber das löst mein Problem nicht, oder ich vestehe es nicht.
Ist es denn nicht so das diese Befehle es alle erfordern das sie als "query" dem sql-server mitgeteilt werden ?
Es soll ja vollständig automatisch geschehen.

Ich bitte es zu entschuldigen wenn ich hier die wertvolle Zeit von alteingesessenen Foren-Usern verschwende.

r_kerber 12. Dez 2003 14:51

Re: datum/zeit automatisch in tabelle ?
 
Kennt MySQL Trigger? Wenn ja, dann müßtest Du einen BeforeInsert-Trigger erstellen.

macht 12. Dez 2003 14:58

Re: datum/zeit automatisch in tabelle ?
 
nein kenne / kannte ich nich, ich gucks mir mal eben an

Habs nu gesehn, ist aber irgendwie erst ab mysql v5.0 verfügbar oder ?

Leuselator 12. Dez 2003 17:35

Re: datum/zeit automatisch in tabelle ?
 
O.k. O.k. Gelesen, aber nich verstanden is ja was ganz anderes :-)
Also:

Du legst Dir in der betreffenden Tabelle ein Feld vom Typ Timestamp an. Ausserdem solltest Du unbedingt ein IdFeld vom Typ auto_increment in der Tabelle haben (für später merken).
Immer, wenn Du nun einen Datensatz in diese Tabelle Neu einfügst und dabei keinen Wert für die Timestamp-Spalte angibst, setzt der MySQL-Server automatisch einen Wert in diese Spalte. So weit so schön.
Nun kommt es darauf an, was Du möchtest. Reicht Dir das Wissen um die letzte Bearbeitung, oder möchtest Du darüber hinaus auch noch wissen, wann der Datensatz erzeugt wurde?
Im ersten Fall würdest Du nun immer, wenn der Datensatz geändert wird, in das Timestamp-Feld die aktuelle Zeit einfügen.
Ich hör Dich schon schreien: "Was, wenn die Änderung im DB-Grid erfolgt?" Nun. Das DB-Grid ändert nur Feldwerte. Den eigentlichen Datensatz ändert das Dataset (TQuery oder TAdoQuery), an welches Du das Grid über eine TDataSource gekoppelt hast. Und Genau dort, am DataSet, ´kannst Du ansetzen: leg Dir eine 2. Query an. Verpass ihr folgenden SQL-Text:
SQL-Code:
  Update TabellenName
     set TimeStampFeldName = CURRENT_TIMESTAMP()
   where IdFeldName = :UnserIdParameter
im Ereignis "AfterPost" des DataSets mochst Du dann folgendes:
Delphi-Quellcode:
procedure TForm1.Query1AfterPost(DataSet: TDataSet);
begin
  Query2.ParamByName('UnserIdParameter').AsInteger := Query1.FieldByName('IdFeldName').AsString;
  Query2.ExecSQL;
end;
Gruß

macht 15. Dez 2003 14:43

Re: datum/zeit automatisch in tabelle ?
 
Leuselator,
vielen Dank für deine Hilfe ! Mit der Erklärung hats zum Teil geklappt, nur ist das noch nicht so die optimale Lösung. Gespeichert werden soll nur das Datum und die Zeit des ersten Eintragens, nichts anderes. Wäre ja auch mit deiner Lösung nicht das Problem.

Und dieses soll nach die des Servers sein auf der die Datenbank liegt, und nicht die des Users. Aber das sollte doch auch mit dem Query klappen oder ?

Der Hund liegt an der Stelle begraben, das nicht alle User die auf die Datenbank zugreifen einen Delphi-Client nutzen, geschweigeden das gleiche Betriebssystem.
Es handelt sich um eine fertiges System, das größtenteils nicht mehr veränderbar ist. Daher müsste der SQL-Server das alleine übernehmen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz