![]() |
Datenbank: Access • Zugriff über: ADO
Zeit + Datenbank + grosses Durcheinander
'loha Folks,
in einer Access Datenbank ist die Zeit eines bestimmten Ereignisses abgespeichert. Ich möchte nun verhindern, dass das nächste Ereignis frühestens nach 15 Sekunden eingetragen werden kann (alle Ereignisse dazwischen werden verworfen). Nun schaffe ich es nicht zu überprüfen ob die 15 Sekunden bereits vorbei sind oder nicht. Den folgenden Code führe ich aus, sobald ich überprüfen möchte ob 15 Sekunden vergangen sind:
Delphi-Quellcode:
Mit der StrToDateTime Routine sollte es ja jetzt möglich sein, den String in ein Datum mit Zeit zu "convertieren" und mit Trunc sollte sich doch dann auch die Zeit extrahieren lassen, also etwas in dieser Art:
StringTime := FieldByName('Time').Value; // StringTime schaut dann so aus '10.02.2007 11:08:31' und ist auch wirklich ein String
Delphi-Quellcode:
EntryTime ist aber stets 0 und ich weiss nicht wie weiter. Hilfe?!?
EntryTime := Trunc(StrToDateTime(StringTime));
|
Re: Zeit + Datenbank + grosses Durcheinander
Sitze gerade im Internetcafe und habe somit kein Delphi zur Hand, aber versuch es mal mit:
var EntryTime:tdatetime; begin EntryTime:= FieldByName('Time').asdatetime; if EntryTime+((1/24/60/60)*15)>=now then begin //neuer Datensatz darf angelegt werden end; end; |
Re: Zeit + Datenbank + grosses Durcheinander
Hallo,
so müsste es gehen (ungetestet) if (now - FieldByName('Time').asdatetime) > (15/(60*60*24)) then 15 sekunden vorbei |
Re: Zeit + Datenbank + grosses Durcheinander
Irgendwie scheitert die Sache schon bei...
Delphi-Quellcode:
EntryTime ist immer 0. Aber wie gesagt...
EntryTime:= FieldByName('Time').AsDateTime
Delphi-Quellcode:
^^ das funktioniert dann aber wieder.
StringTime := FieldByName('Time').Value; // StringTime schaut dann so aus '10.02.2007 11:08:31' und ist auch wirklich ein String
|
Re: Zeit + Datenbank + grosses Durcheinander
Welchen Typ hat Time in der Datenbank?
|
Re: Zeit + Datenbank + grosses Durcheinander
Time ist in der Datenbank als Datum/Uhrzeit deklariert.
Format: Zeit, lang (00:00:00;0;_) Soll ich die Zeit als Text in der Datenbank abspeichern? |
Re: Zeit + Datenbank + grosses Durcheinander
Nein, es sieht aber aus, als sei es als Text gespeichert.
|
Re: Zeit + Datenbank + grosses Durcheinander
Also, weder in der Felddefinition (ADO) noch in der Access-Datenbank wird die Zeit als Text verwertet.
Datum/Uhrzeit <- etwas anderes gibt es in Access nicht ftDateTime <- ist die Definition des Feldes ADO-Seitig |
Re: Zeit + Datenbank + grosses Durcheinander
Dann versuch mal den Wert des Feldes direkt einer Time-Variablen zuzuweisen
|
Re: Zeit + Datenbank + grosses Durcheinander
Auch dann ist die "EntryTime" stets 0. Wahrscheinlich liegt es daran, dass ich irgendetwas übersehe. Werde einmal darüber schlafen und dann das Ganze nochmals versuchen.
Vielen Dank soweit! |
Re: Zeit + Datenbank + grosses Durcheinander
Du könntest den String auch manuell zerlegen und nur den Zeitwert betrachten.
|
Re: Zeit + Datenbank + grosses Durcheinander
Daran habe ich auch gedacht. Wobei es ja etwas unschön wäre, etwas bereits vorhandenes durch Gebastel zu immitieren. Aber wenn es sich, wenn ich das nächste mal daran arbeite, immer noch so (mir) unerklärlich verhalten sollte, werde ich dies natürlich in Betracht ziehen.
Dankeschön, es grüsset der hirnstroem |
Re: Zeit + Datenbank + grosses Durcheinander
So, jetzt reicht es. Selbst wenn ich einen String in eine Zeit umwandeln möchte geht dies nicht. StrToTime('12:00:00') z.B. liefert immer 0 als Ergebnis. Ich habe langsam sämtliche Varianten ausprobiert, immer 0, alles 0.
|
Re: Zeit + Datenbank + grosses Durcheinander
Guten Morgen,
StrToTime('12:00:00') liefert 0.5 - wenn du allerdings wie in deinem ersten Beitrag Trunc() darauf anwendest, dann erhältst du für jeden Zeitwert immer 0. Wenn du einen Zeitpunkt (Datum und Zeit) in deinem Datenbankfeld speicherst, sollte es so funktionieren:
Delphi-Quellcode:
Grüße vom marabu
with Table do
if DateUtils.SecondsBetween(FieldByName('Time').AsDateTime, Now) >= 15 then { do as you like }; |
Re: Zeit + Datenbank + grosses Durcheinander
Den habe ich auch bereits ausprobiert, will auch nicht funktionieren.
Ich schreibe jetzt einfach in die Datenbank rein, wieviele Sekunden seit dem Programmstart vergangen sind (Integer) und Rechne dann damit anstatt mit der Zeit.... Danke für eure Bemühungen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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