Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeit abfragen (https://www.delphipraxis.net/149752-zeit-abfragen.html)

BillyBoy 29. Mär 2010 13:12

Datenbank: MS SQL • Version: 2008 • Zugriff über: ADOConnection

Zeit abfragen
 
MS SQL 2008, Delphi 2009

Hallo,
ich habe in der Datenbank ein Feld als time(7) deklariert, möchte es mit einer Abfrage auslesen und den Wert in eine lokale Variable bringen.

var Zeit1 : TTime;

Zeit1 :=ADOQueryKopf.FieldByName('Beginn').AsTime;

.AsTime gibt es leider nicht, .AsDateTime bringt verständlicherweise einen Fehler.

Wie kann ich den Wert korrekt auslesen ?

tia
Billy

Jens Hartmann 29. Mär 2010 13:48

Re: Zeit abfragen
 
Hallo BillyBoy,

Du musst das Datum formatieren.

Delphi-Quellcode:
Zeit := FormatDateTime('hh:nn:ss', ADOQueryKopf.FieldByName('Beginn').AsDateTime)

Gruß Jens

BillyBoy 29. Mär 2010 15:14

Re: Zeit abfragen
 
Hallo Jens,

so geht es leider nicht: FormatDateTime erzeugt einen String, Zeit ist aber vom Typ TTime.

und FieldByName('Beginn').AsDateTime geht auch nicht, weil Beginn vom Typ time(7) ist und nicht DateTime!

Quelle-Feld und Ziel-Variable sind vom Typ Time, sollten also ohne Konvertierung zugewiesen werden können.

gruss
Billy

Klaus01 29. Mär 2010 15:23

Re: Zeit abfragen
 
Hallo,

vielleicht geht es ja so:

Delphi-Quellcode:
Zeit1 :=frac(ADOQueryKopf.FieldByName('Beginn').AsDateTime);
Grüße
Klaus

Luckie 29. Mär 2010 15:24

Re: Zeit abfragen
 
Zitat:

Zitat von BillyBoy
Quelle-Feld und Ziel-Variable sind vom Typ Time, sollten also ohne Konvertierung zugewiesen werden können.

Nur weil beide Datentypen Time heißen, bedeutet das noch nicht, dass sie auch Zuweisungskompatibel sind.

Wie steht die zeit denn in der Datenbank? Als Zeichenkette oder irgendwie anders? Ich könnte mir nämlich vorstellen, dass sie als Zeichenkette in der Datenbank steht.

p80286 29. Mär 2010 15:27

Re: Zeit abfragen
 
Wo ist das Problem?

Delphi-Quellcode:
var Zeit1 : TDateTime;

Zeit1 :=ADOQueryKopf.FieldByName('Beginn').AsDateTime;

label1.Caption:='Datum: '+datetostr(zeit1)+ ' UhrZeit: '+timetostr(Zeit1);
dann schleppst Du eben das Datum zusätzlich mit Dir herum.
Speicher wird nicht mehr verbraucht.

Gruß
K-H

Edith:
Zitat:

Zitat von Luckie
Wie steht die zeit denn in der Datenbank? Als Zeichenkette oder irgendwie anders? Ich könnte mir nämlich vorstellen, dass sie als Zeichenkette in der Datenbank steht.

Das wiederum glaube ich nicht (time(7) scheint doch kein Char-Format zu sein.

Sherlock 29. Mär 2010 15:33

Re: Zeit abfragen
 
Und ins blaue hinein geraten sollte auch folgendes gehen:

Delphi-Quellcode:
var Zeit1 : TTime;

Zeit1 :=trunc(ADOQueryKopf.FieldByName('Beginn').AsDateTime);
Sherloc

Luckie 29. Mär 2010 15:47

Re: Zeit abfragen
 
Zitat:

Zitat von p80286
Edith:
Zitat:

Zitat von Luckie
Wie steht die zeit denn in der Datenbank? Als Zeichenkette oder irgendwie anders? Ich könnte mir nämlich vorstellen, dass sie als Zeichenkette in der Datenbank steht.

Das wiederum glaube ich nicht (time(7) scheint doch kein Char-Format zu sein.

also wir haben hier eine MySQL Datenbank mit DATETIME Feldern und wenn ich mir die Daten angucke steht da: "2010-02-17 11:12:11".

Sherlock 29. Mär 2010 15:56

Re: Zeit abfragen
 
[quote="Luckie"]
Zitat:

Zitat von p80286
also wir haben hier eine MySQL Datenbank mit DATETIME Feldern und wenn ich mir die Daten angucke steht da: "2010-02-17 11:12:11".

Es geht doch um einen MS-SQL Server 2008.

Das ist bestimmt anders als bei MySQL implementiert.

Sherlock

BillyBoy 29. Mär 2010 15:59

Re: Zeit abfragen
 
Es wäre schön, wenn ihr euch mal die Ausgangsfrage ansehen könntet!

Das Feld Beginn ist definiert als time(7).
Das ist kein Character-Zeug, sondern ein reines SQL-Zeitfeld.
Und weil es ein reines Zeitfeld ist, führt auch FieldByName('Beginn').AsDateTime zu einem Fehler !

Dass ich das Ganze als String auslesen kann und anschließend zur Anzeige wieder in ein Zeitformat umwandeln kann ist schon klar, das war nicht die Frage.

gruss
Billy

P.S.: FieldByName('Beginn').AsFloat tut's auch nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz