Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Now() spinnt sporadisch (https://www.delphipraxis.net/157606-now-spinnt-sporadisch.html)

OsCor 18. Jan 2011 09:14

Now() spinnt sporadisch
 
Hallo Foristen,

ich habe mir jetzt die früheren Threads zum Thema Now() durchgelesen, habe aber immer noch eine Frage (Win7, Delphi2007):
Für ein Programm, was meinen Kollegen erlaubt, Protokoll über bestimmte Vorgänge zu führen, benutze ich die Now-Funktion. Das heißt, jedesmal, wenn was in die entsprechende Datenbank eingetragen wird, soll Now() die aktuelle Zeit liefern - tut es aber nicht immer. Alle paar Tage taucht ein Zeitwert 30.12.99 00:00 auf, was in der nach Zeit sortierten Tabelle die neue Eintragung scheinbar verschwinden läßt.

Bevor ich jetzt einen Workaround schreibe, wollte ich vorsichtshalber nochmal fragen, ob jemand einen Hinweis hat, wie das zustande kommen könnte - und natürlich, ob man das umgehen kann.
Oswald

Sherlock 18. Jan 2011 09:21

AW: Now() spinnt sporadisch
 
Wichtige Frage zuerst: 1899 oder 1999?
Zweitwichtigste Frage: Welche DB?

Now tut bei mir in zahlreichen Applikationen, die teilweise 24/7 laufen klaglos seine Arbeit.
Ich vermute eher, daß was beim wegschreiben des Datums schief geht. Du kannst ja alternativ in eine Textdatei loggen, oder das Now der DB verwenden.

Sherlock

pmoegenb 18. Jan 2011 09:24

AW: Now() spinnt sporadisch
 
Entweder wird statt NOW() ein Nullwert übergeben, oder das Systemdatum des PC's zurückgesetzt.

guinnes 18. Jan 2011 09:27

AW: Now() spinnt sporadisch
 
Warum nimmst du nicht ein Timestamp-Feld in der Datenbank ?

OsCor 18. Jan 2011 09:52

AW: Now() spinnt sporadisch
 
Hallo Sherlock,

deine erste Frage hat mir zwei Sachen gezeigt:
- Du hast eine wichtige Frage gestellt,
- weil ich die Ausgabe in meinem DBGrid nicht mit der der MS-Access-DB verglichen habe.

In der Access-Tabelle wird der Zeitwert "00:00:00" angezeigt. Das heißt, dass die 99 im DBGrid für 1899 stehen müßte.

@pmoegenb
Ich verstehe nicht, wie der Nullwert zustande kommen kann. Unsere Rechner hängen auch alle an einem Zeitserver, müßten also immer die korrekte Systemzeit haben.

@guinnes
Was wäre mit einem Timestamp-Feld besser - abgesehen davon, dass Access so etwas nicht besitzt?

Oswald

DeddyH 18. Jan 2011 09:57

AW: Now() spinnt sporadisch
 
Wenn man per Trigger das Datum oder einen Timestamp einfügen/aktualisieren ließe, müsste man sich programmatisch nicht mehr darum kümmern. Außerdem wäre die Systemzeit der Clients dann wurscht, da ja die des Servers genommen wird. Für Access sehe ich hier allerdings schwarz, da das ja kein C/S-System ist.

guinnes 18. Jan 2011 10:07

AW: Now() spinnt sporadisch
 
Zitat:

Zitat von OsCor (Beitrag 1075443)
@guinnes
Was wäre mit einem Timestamp-Feld besser - abgesehen davon, dass Access so etwas nicht besitzt?

Das du Access benutzt, war mir nicht klar. Bei MySQL z.B. braucht man sich dabei um nichts zu kümmern, das Feld wird automatisch mit Datum/Uhrzeit des Servers gefüllt und auch bei Änderungen automatisch aktualisiert.

Zu deiner Ursprungsfrage : Ich benutze Delphi seit ca. 14 Jahren, sowas habe ich noch nie erlebt. Eventuell falsches Datum/Uhrzeitformat ?

Sherlock 18. Jan 2011 10:12

AW: Now() spinnt sporadisch
 
Ich bin mir jetzt noch sicherer, daß nicht Now das Problem ist, sondern die Stelle, die das Now in die DB schreibt, oder sogar die DB selber :(

Sherlock

OsCor 18. Jan 2011 10:17

AW: Now() spinnt sporadisch
 
Zitat:

Zitat von guinnes (Beitrag 1075448)
Zu deiner Ursprungsfrage : Ich benutze Delphi seit ca. 14 Jahren, sowas habe ich noch nie erlebt. Eventuell falsches Datum/Uhrzeitformat ?

Dein erster Satz gilt auch für mich :-)
Zum zweiten: Mich irritiert das sporadische Vorkommen. Selbst an dem Rechner, an dem der Fehler besonders häufig auftritt, sind die Einträge fast immer korrekt. Der Zeitwert wird so übertragen:
Delphi-Quellcode:
FieldByName('Datum').AsDateTime := Now();
Um abzuchecken, ob es an der DB liegen könnte, werde ich jetzt zunächst alle Eintragungen zusätzlich in einer Textdatei ablegen.

Oswald

Bernerbaer 18. Jan 2011 10:22

AW: Now() spinnt sporadisch
 
Zwar benutze ich Access seit Jahren nicht mehr, doch so weit ich mich erinnere unterstützt Access sehr wohl die Möglichkeit ein Feld automatisch mit der aktuellen Zeit anzulegen.
Wenn man als Standardwert für das betreffende Feld Now() oder Jetzt() definiert, wird automatisch der aktuelle Timestamp abgespeichert.

OsCor 18. Jan 2011 10:54

AW: Now() spinnt sporadisch
 
@Bernerbaer

:oops: Ist mir in der Hektik entgangen. Natürlich geht das. Baue es gleich mal testweise ein.

Danke.
Oswald

stahli 18. Jan 2011 11:50

AW: Now() spinnt sporadisch
 
Zitat:

Zitat von OsCor (Beitrag 1075452)
Der Zeitwert wird so übertragen:
Delphi-Quellcode:
FieldByName('Datum').AsDateTime := Now();

Wenn Du es anders nicht lösen kannst, würde ich einen Zwischenschritt über eine Variable gehen
Delphi-Quellcode:
DT := Now;
und vor einer Zuweisung DT prüfen. So könntest Du zumindest erfahren, ob das Problem vom Delphi kommt oder in der DB liegt.

Ich kann mich erinnern, dass wir schon einmal 2 Threads zu diesem Thema hatten. Da wurde u.A. die Vermutung geäußert, dass "Now" irgendwo als Variable definiert und gelegentlich überschrieben wurde (nicht also die Systemzeit verwendet wurde). Ob es eine endgültige Klärung gab, weiß ich aber nicht mehr.

OsCor 18. Jan 2011 13:25

AW: Now() spinnt sporadisch
 
Diese Threads habe ich vor meiner Frage durchgelesen. Meine Frage nach Now wurde darin nicht befriedigend beantwortet, die Probleme der Fadenautoren aber schon.
Wenn ich im Quelltext mit Strg + linke Maustaste auf Now klicke, komme ich immer auf den Quelltext von SysUtils.

Dein Vorschlag ist sicher eine gute Möglichkeit, vielleicht die einzig richtige. Im Moment habe ich in der DB an den geeigneten Stellen die Zeitangabe auf Standard = Jetzt() eingestellt.

Oswald

rollstuhlfahrer 18. Jan 2011 13:54

AW: Now() spinnt sporadisch
 
Zitat:

Zitat von OsCor (Beitrag 1075524)
Wenn ich im Quelltext mit Strg + linke Maustaste auf Now klicke, komme ich immer auf den Quelltext von SysUtils.

Das ist auch richtig so. Die Funktion Now() liegt nämlich da. Und was macht sie? - Sie frägt das System nach der aktuellen Uhrzeit und konvertiert das in das Delphi-eigene System.

Bernhard

OsCor 18. Jan 2011 14:39

AW: Now() spinnt sporadisch
 
Ähem :-) Das weiß ich. Aber in den beiden zuvor erwähnten Threads wurde darauf hingewiesen, dass man im äußersten Fall Now sogar mit SysUtils.Now() aufrufen solle, um nur ja sicher zu gehen, dass der richtige Ablauf gestartet wird.
Um nun zu verhindern, dass mich jemand auf diese vermeintliche Möglichkeit stößt, habe ich die inkriminierte Bemerkung gemacht.

Oswald


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.

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