![]() |
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 |
Re: Zeit abfragen
Hallo BillyBoy,
Du musst das Datum formatieren.
Delphi-Quellcode:
Zeit := FormatDateTime('hh:nn:ss', ADOQueryKopf.FieldByName('Beginn').AsDateTime)
Gruß Jens |
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 |
Re: Zeit abfragen
Hallo,
vielleicht geht es ja so:
Delphi-Quellcode:
Grüße
Zeit1 :=frac(ADOQueryKopf.FieldByName('Beginn').AsDateTime);
Klaus |
Re: Zeit abfragen
Zitat:
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. |
Re: Zeit abfragen
Wo ist das Problem?
Delphi-Quellcode:
dann schleppst Du eben das Datum zusätzlich mit Dir herum.
var Zeit1 : TDateTime;
Zeit1 :=ADOQueryKopf.FieldByName('Beginn').AsDateTime; label1.Caption:='Datum: '+datetostr(zeit1)+ ' UhrZeit: '+timetostr(Zeit1); Speicher wird nicht mehr verbraucht. Gruß K-H Edith: Zitat:
|
Re: Zeit abfragen
Und ins blaue hinein geraten sollte auch folgendes gehen:
Delphi-Quellcode:
Sherloc
var Zeit1 : TTime;
Zeit1 :=trunc(ADOQueryKopf.FieldByName('Beginn').AsDateTime); |
Re: Zeit abfragen
Zitat:
|
Re: Zeit abfragen
[quote="Luckie"]
Zitat:
Das ist bestimmt anders als bei MySQL implementiert. Sherlock |
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 |
Re: Zeit abfragen
Trunc schneidet den Nachkommateil ab. :warn:
TTime und TDateTime haben den Zeitanteil im den Nachkommastellen. Da TTime ein Fließkommatyp ist, und asTime schon nicht funktioniert, dann kann Trunc nichts verbessern (nur verschlechtern, siehe erster Punkt) Ich denke auch mal, daß Time(7) ein inkompatibler Datentyp ist, welcher nicht über asTime auglelesen werden kann, denn extern sollte es keine Probleme geben, wonach nur noch ein internes Problem bestehen kann. Time(7) könnte sowas wie ein Unix-Timestamp (sekunden seit irgendwas) als String/Char mit maximal 7 Zeichen sein? :gruebel: |
Re: Zeit abfragen
Zitat:
Zitat:
Einen Fehler hättest Du auch bekommen weil Zeit1 TTime ist und (wenn es asDateTime gegeben hätte) TDateTime zurückgeliefert hätte. Grüße Klaus |
Re: Zeit abfragen
Zitat:
Delphi-Quellcode:
Und Du hast jetzt mehrere Male erwähnt das es Fehler gibt, aber es tunlichst vermieden zu erklären was für Fehler, welche Fehlermeldung usw.
case q.Fields[i].datatype of
ftUnknown : Ftyp:=' Unknown or undetermined'; ftString : ftyp:=' Character or string field'; ftSmallint : ftyp:=' 16-bit integer field '; ftInteger : ftyp:=' 32-bit integer field '; ftWord : ftyp:=' 16-bit unsigned integer field'; ftBoolean : ftyp:=' Boolean field '; ftFloat : ftyp:=' Floating-point numeric field'; ftCurrency : ftyp:=' Money field '; ftBCD : ftyp:=' Binary-Coded Decimal field'; ftDate : ftyp:=' Date field '; ftTime : ftyp:=' Time field '; ftDateTime : ftyp:=' lDate and time field '; ftBytes : ftyp:=' Fixed number of bytes (binary storage)'; ftVarBytes : ftyp:=' Variable number of bytes (binary storage)'; ftAutoInc : ftyp:=' Auto-incrementing 32-bit integer counter field'; ftBlob : ftyp:=' Binary Large OBject field'; ftMemo : ftyp:=' Text memo field '; ftGraphic : ftyp:=' Bitmap field '; ftFmtMemo : ftyp:=' Formatted text memo field'; ftParadoxOle: ftyp:=' Paradox OLE field'; ftDBaseOle : ftyp:=' dBASE OLE field '; ftTypedBinary:ftyp:=' Typed binary field'; ftCursor : ftyp:=' Output cursor from an Oracle stored procedure (TParam only)'; ftFixedChar : ftyp:=' Fixed character field '; ftWideString: ftyp:=' Wide string field '; ftLargeInt : ftyp:=' Large integer field '; ftADT : ftyp:=' Abstract Data Type field'; ftArray : ftyp:=' Array field '; ftReference : ftyp:=' REF field '; ftDataSet : ftyp:=' DataSet field '; ftOraBlob : ftyp:=' BLOB fields in Oracle 8 tables'; ftOraClob : ftyp:=' CLOB fields in Oracle 8 tables '; ftVariant : ftyp:=' Data of unknown or undetermined type'; ftInterface : ftyp:=' References to interfaces (IUnknown)'; ftIDispatch : ftyp:=' References to IDispatch interfaces '; ftGuid : ftyp:=' globally unique identifier (GUID) values '; else ftyp:='!not known!'; end;{case---------------------------------} Das würde bestimmt zur Aufklährung beitragen. Gruß K-H |
Re: Zeit abfragen
Zitat:
Zitat:
Wie heißt der denn nun genau? |
Re: Zeit abfragen
Ist jetzt wohl schon OT: Uuups: Natürlich schneidet trunc den Nachkommaanteil ab...hab nicht lang genug nachgedacht :oops:
Da aber das Format dieses ominösen Feldes offenbar nicht numerisch ist, nützt eine weitere Diskussion in dieser Richtung leider nichts... Zitat:
Im übrigen dürfte das hier wohl Licht ins Formatdunkel bringen: ![]() Sherlock |
Re: Zeit abfragen
Hallo,
das Format time(7) ist ein Zeitformat mit 7 Stellen hinter den Sekunden. Die 7 ist die Standardvorgabe des SQL Servers. Damit übergibt er die Zeit als 17:15:00.0000000, was von Delphi nicht ausgewertet werden kann (ok, als string schon) Ich habe das Feld als time(0) definiert. Nun bringt er wieder ein "ordentliches" Zeitformat 17:15:00. Dieses kann wieder mit .AsDateTime gelesen werden. Danke an alle Billy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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 by Thomas Breitkreuz