![]() |
Datenbank: SQL Server • Version: 2005 • Zugriff über: ADO
MSSQL/T-SQL: Wie "timestamp" speichern?
Hallo zusammen,
ich stehe gerade ein bisschen auf dem Schlauch und wundere mich, dass ich trotz Google noch nichts hilfreiches hierzu finden konnte, denn ich kann mir nicht vorstellen, dass das Problem sonst noch niemand hatte. Hmpf. :gruebel: Kurz: Hat jemand eine Idee, wie ich den etwas eigenwilligen ![]() Ich möchte bzw. muss halt alle 10 Minuten eine Tabelle abfragen und schauen, ob sich irgendwas geändert hat. Die Tabelle verfügt auch über eine Timestamp-Spalte, die ja vom Server automatisch aktualisiert wird. Alles super also - wenn ich dieses blöde Dingen irgendwie vernünftig abfragen und bei meiner nächsten Abfrage auch wieder sauber übergeben könnte. Hat jemand eine hilfreiche Idee? Besten Dank Bommel PS: Um ein Missverständnis zu vermeiden - dass ich den aktuellen Timestamp mit "SELECT @@DBTS" bekomme, weiß ich - aber wohin mit dem Ergebnis dieser Abfrage? |
Re: MSSQL/T-SQL: Wie "timestamp" speichern?
Die timestamp-Felder kannst du als (Ansi-)String auslesen:
Delphi-Quellcode:
Der String hat eine Länge von 8 Zeichen.
var
ts_wert : AnsiString; begin ts_wert := dataset.FieldByName('timestamp_feld').AsString; Wenn du den String anzeigen möchtest musst du ihn in Hex-Zeichen umwandeln. Um zu prüfen, ob sich der timestamp geändert hat kannst du direkt einen Stringvergleich vornehmen:
Delphi-Quellcode:
var
ts_akt : AnsiString; begin ts_ := dataset.FieldByName('timestamp_feld').AsString; if ts_akt <> ts_gemerkt then ... // Datensatz verändert |
Re: MSSQL/T-SQL: Wie "timestamp" speichern?
Schau dir mal die Unit SqlTimSt an.
Dann kannst du auch so etwas machen...
Delphi-Quellcode:
var
ts_wert : TSQLTimeStamp; begin ts_wert := dataset.FieldByName('timestamp_feld').AsSQLTimeStamp; |
Re: MSSQL/T-SQL: Wie "timestamp" speichern?
Danke für eure Antworten.
TSQLTimeStamp hatte ich beim Wühlen auch schon gefunden, es aber wieder verworfen. TSQLTimeStamp bildet ja einen echten Datum/Zeit-Stempel ab, während Microsoft ja für den "timestamp" des SQL-Servers ausdrücklich darauf hinweist, dass dieser mit einem Datum und einer Uhrzeit nichts zu tun hat. Ich habe es gerade dennoch mal kurz getestet, aber wie erwartet lieferte mir
Delphi-Quellcode:
...die Fehlermeldung, dass der Wert nicht in einen SQLTimeStamp umgewandelt werden könne.
[...]
currQuery.SQL.Add('SELECT @@DBTS'); currQuery.Open; lastTimestamp:=currQuery.Fields[0].AsSQLTimeStamp; Ich werde es wohl so oder so ähnlich machen, wie shmia vorgeschlagen hat. Oder alternativ auch so:
Delphi-Quellcode:
Ist ja letztlich das gleiche... :) Mal schauen, was mir am Ende besser gefällt. Vor allem möchte ich ja am Ende ein neue Abfrage starten, die in etwa so aussieht:
var lastTimestamp: TBytes;
[...] begin [...} currQuery.SQL.Add('SELECT @@DBTS'); currQuery.Open; lastTimestamp:=currQuery.Fields[0].AsBytes; [...] end;
Delphi-Quellcode:
Wobei es halt noch die Herausforderung ist, dieses "+lastTimestamp" in etwas umzuwandeln, womit dann auch der SQL Server glücklich wird.
currQuery.SQL.Add('SELECT * FROM Tabelle WHERE timestamp>'+lastTimestamp);
Bis denn Bommel |
Re: MSSQL/T-SQL: Wie "timestamp" speichern?
Du kannst den Timestamp ganz einfach in einen bigint umcasten oder umgekehrt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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