AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL/T-SQL: Wie "timestamp" speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL/T-SQL: Wie "timestamp" speichern?

Ein Thema von Bbommel · begonnen am 18. Jan 2010 · letzter Beitrag vom 21. Jan 2010
Antwort Antwort
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#1

MSSQL/T-SQL: Wie "timestamp" speichern?

  Alt 18. Jan 2010, 18:12
Datenbank: SQL Server • Version: 2005 • Zugriff über: ADO
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.

Kurz: Hat jemand eine Idee, wie ich den etwas eigenwilligen timestamp eines SQL-Servers sauber innerhalb von Delphi speichern kann, um ihn bei einer späteren Abfrage wieder mit angeben zu können?

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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: MSSQL/T-SQL: Wie "timestamp" speichern?

  Alt 18. Jan 2010, 18:35
Die timestamp-Felder kannst du als (Ansi-)String auslesen:
Delphi-Quellcode:
var
  ts_wert : AnsiString;
begin
  ts_wert := dataset.FieldByName('timestamp_feld').AsString;
Der String hat eine Länge von 8 Zeichen.
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
Andreas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: MSSQL/T-SQL: Wie "timestamp" speichern?

  Alt 18. Jan 2010, 23:36
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;
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#4

Re: MSSQL/T-SQL: Wie "timestamp" speichern?

  Alt 19. Jan 2010, 12:09
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:
[...]
    currQuery.SQL.Add('SELECT @@DBTS');
    currQuery.Open;
    lastTimestamp:=currQuery.Fields[0].AsSQLTimeStamp;
...die Fehlermeldung, dass der Wert nicht in einen SQLTimeStamp umgewandelt werden könne.

Ich werde es wohl so oder so ähnlich machen, wie shmia vorgeschlagen hat. Oder alternativ auch so:

Delphi-Quellcode:
var lastTimestamp: TBytes;
[...]
begin
[...}
    currQuery.SQL.Add('SELECT @@DBTS');
    currQuery.Open;
    lastTimestamp:=currQuery.Fields[0].AsBytes;
[...]
end;
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:

  currQuery.SQL.Add('SELECT * FROM Tabelle WHERE timestamp>'+lastTimestamp); Wobei es halt noch die Herausforderung ist, dieses "+lastTimestamp" in etwas umzuwandeln, womit dann auch der SQL Server glücklich wird.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: MSSQL/T-SQL: Wie "timestamp" speichern?

  Alt 21. Jan 2010, 12:00
Du kannst den Timestamp ganz einfach in einen bigint umcasten oder umgekehrt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 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