AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL/Systemzeit per Stored Procedure auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL/Systemzeit per Stored Procedure auslesen

Ein Thema von robroy85 · begonnen am 19. Okt 2005 · letzter Beitrag vom 20. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#1

SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 13:12
Datenbank: MS SQL • Version: 7.0 • Zugriff über: Stored Procedures
Hallo Community!

Ich möchte gerne über einen T-SQL Befehl die System- bzw. SQL-Zeit als Timestamp auslesen! und zwar wenigstens sekundengenau.

In diesem DP-post hatte ich von meiner Warenwirtschaft geschrieben, die Timestamps als Primarykeys benutzt, allerdings werden diese von der Warenwirtschaft erstellt und nicht vom SQLServer und auch als varchar gespeichertund sind demzufolge keine "echten" timestamps.

Nun muss ich aus einer stored procedure heraus selber eine solche ID erstellen, um einen INSERT-Befehl auszuführen


Schönen Gruß Robert
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 13:41
Hi,

ich verstehe zwar nur Bahnhof, aber es gibt NOW und CURRENT_TIMESTAMP. Das kann man verwenden.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 13:42
select getdate() sollte das sein, was Du suchst.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 13:50
Ich würde die Funktion GetUTCDate() verwenden...

Grüße vom marabu
  Mit Zitat antworten Zitat
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#5

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 14:49
Danke erstmal für die raschen Antworten, wobei ich mit NOW und GetUTCDate() nichts anfangen konnte da sie in meinem Query Analyser Fehler verursachten.

Um GetDate für mein Beispiel zu benutzen:
SQL-Code:
select getdate()

ERGEBNIS:

                            
---------------------------
2005-10-19 14:33:56.297

(1 row(s) affected)
Das ist schon das Ergebnis, was ich an sich haben möchte, doch kann ich so damit nichts anfangen.

Das Datetime-Format soll Sekundengenau in einen UNIX-Timestamp umgewandelt werden, der dann in eine Hexadezimalzhal umrechnet wird.

Als Delphi-Anweisung sieht das so aus:
Delphi-Quellcode:
 
edit1.Text := IntToHex(DateTimeToUnix(Now),8);
schönen gruß, robert
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 14:57
Na dann bist du ja fast am Ziel... Nimm ne TQuery mit meinem SQL Statement:
select getdate() as ServerZeit Und überweise deinem QT das DBFeld:
edit1.Text := IntToHex(DateTimeToUnix(query1.fieldbyname('ServerZeit').AsDateTime),8);
  Mit Zitat antworten Zitat
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#7

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 15:33
nope.. wie mans macht isses verkehrt

der delphi-quelltext sollte als Beispiel dienen ( wie ich es in delphi machen würde )

Ich muss aber den hex-Wert innerhalb einer Stored Procedure (sp) erhalten, da er dort dann direkt als Primary Key eines Datensatzes eingefügt wird (über INSERT).

Leider kann ich den HEX-wert auch nicht aus delphi heraus an die sp übergeben, auch wenn ich diese von dort auffrufe, da ich nicht weiß wieviele Primary-Keys gebraucht werden (Schleifenfunktion)

nochmals schönen gruß
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 16:24
Wieso nutzt du auf einem MSSQL Server einen Unix Timestamp als Primary Key Das geht mir nicht in den Kopf.

Dann musst du Dir halt ne Funktion in MSSQL basteln die dir einen datetime Typ in einen Unixtimestamp umwandelt. Meines Wissens bietet der MSSQL von Haus keine solche Funktion. Wenn Du mir also den Algorithmus sagen kannst, wie so eine Unix Timestampt aufgebaut ist, kann ich Dir vielleicht helfen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 17:05
Hallo Robert,

Zitat von robroy85:
wobei ich mit NOW und GetUTCDate() nichts anfangen konnte da sie in meinem Query Analyser Fehler verursachten.
tut mir leid, aber ich hatte übersehen, dass du MSSQL 7 verwendest. Da hilft dir vielleicht das hier:

SQL-Code:
CREATE PROCEDURE GetUTCDate AS
BEGIN
  DECLARE @BiasInMinutes INT
  EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
    'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
    'ActiveTimeBias',
    @BiasInMinutes OUTPUT
  SELECT DATEADD(MINUTE, @BiasInMinutes, GetDate())
END
Vom Ergebnis musst du dann den gebrochenen Anteil nehmen, mit der Zahl der Sekunden im Tag (86.400) multiplizieren und dieses Ergebnis dann in eine INTEGER konvertieren. Jetzt brauchst du nur noch eine SP mit der Funktionalität von IntToHex(int, places) und dann hast du es geschafft.

Grüße vom marabu
  Mit Zitat antworten Zitat
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#10

Re: SQL/Systemzeit per Stored Procedure auslesen

  Alt 19. Okt 2005, 17:27
Leider muss ich mich an die Vorgaben halten, die mir die installierte Warenwirtschaft vorsetzt. Und diese nutzt leider keinen "echten" Timestamp sondern eine 10stellige varchar als Primary Key.
Die 10 Stellen bestehen aus 2 aneinandergesetzten Gruppen . Die erste Gruppe ist eine 8-stellige HEX-Zahl. Der Rest ist eine 2-stellige HEX-Zahl.
Die ersten 8 Ziffern sind eine Hexzahl die, umgewandelt in Integer, die Anzahl der Sekunden seit dem 01.01.1970 00:00:00 GMT ergeben. Also der klassische UNIX-Timestamp. Die letzten 2 Ziffern sind Indikatoren für die tausendsel Sekunden. Dass heißt nach meine Vermutungen, dass die letzten 2 Zeichen, konvertiert zu Integer, mit knapp 4 multipliziert die tausendsel ergeben.
Ich versuche mal dieses Verworrene an einem Beispiel zu erläutern:

In der Warenwirtschaft wird eine Rechnung geschrieben und abgespeichert. Der neue Eintrag in der Rechnungstabelle bekommt dann als Primary Key den Wert '4354a0520f'

$4354a052 ergibt als Integerzahl 1129619538. Es sind also 1129619538 Sekunden seit dem 01.01.1970 00:00:00 GMT vergangen. Das passt, ich habs schon bei Beispielen nachgerechnet.

$0f ergibt 15 in der ascii-tabelle 15. 15 * 1000/256 = 58.59...=> 0.059

Also wurde die Rechnung 1129619538,059 Sekunden nach 01.01.1970 00:00:00 GMT geschrieben.

Hilft das Euch vielleicht weiter?
Die logik des ganzen habe ich mittlerweile soweit durchschaut, jedoch fehlt mir "noch" das Basiswissen an Befehlen. Ich bin immer fleißig in der MSDN Library am lesen

MfG robert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:07 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