ADO Datum ohne Zeitangabe

Ich arbeite in Delphi mit den ADO Komponenten und einer MS Access Datenbank. In einer Tabelle verwende ich den Access Datums-Typ und lese ihn aus. Wie kann ich ermitteln, ob neben dem Datum eine Zeit angegegen ist und wie kann ich den Zeit-Teil aus dem Datum entfernen?

Hintergrund: Access implemetiert einen Datumstyp, der Datum und Uhrzeit implementiert. Gibt man nur das Datum an, so steht in der Tabelle ausschließlich der Datumswert. Wie ermittle ich, ob eine Uhrzeit angegeben ist und wie entferne ich diese wieder?

Möglicherweise OT: kann ich Uhrzeiten direkt in der Tabelle verbieten?

Gruß Markus

Hallo Markus,

da noch niemand geantwortet hat, versuche ich es einmal.
Ich kenne mich mit ADO und ACCESS nicht aus, daher …

Ich arbeite in Delphi mit den ADO Komponenten und einer MS
Access Datenbank. In einer Tabelle verwende ich den Access
Datums-Typ und lese ihn aus. Wie kann ich ermitteln, ob neben
dem Datum eine Zeit angegegen ist und wie kann ich den
Zeit-Teil aus dem Datum entfernen?

Kannst Du nicht einfach den Eintrag auslesen und analysieren?
Werden die Einträge von Deiner Anwendung geschrieben?
Wenn ja, warum trägst Du nicht nur das Datum ein, wie Du es unten beschrieben hast, funktioniert das ja.

Hintergrund: Access implemetiert einen Datumstyp, der Datum
und Uhrzeit implementiert. Gibt man nur das Datum an, so steht
in der Tabelle ausschließlich der Datumswert.

Wie ermittle
ich, ob eine Uhrzeit angegeben ist und wie entferne ich diese
wieder?

Auslesen, analysieren, ggf. Uhrzeit entfernen und zurückschreiben?

Entschuldige bitte, wenn meine Antwort etwas naiv klingt, aber siehe oben…

Gruß
Manfred

da noch niemand geantwortet hat, versuche ich es einmal.
Ich kenne mich mit ADO und ACCESS nicht aus, daher …

Ich arbeite in Delphi mit den ADO Komponenten und einer MS
Access Datenbank. In einer Tabelle verwende ich den Access
Datums-Typ und lese ihn aus. Wie kann ich ermitteln, ob neben
dem Datum eine Zeit angegegen ist und wie kann ich den
Zeit-Teil aus dem Datum entfernen?

Kannst Du nicht einfach den Eintrag auslesen und analysieren?

Genau darauf zielte meine Frage doch ab: wie analysiere ich das Datum?

Werden die Einträge von Deiner Anwendung geschrieben?

Zum Teil, ein anderer Teil wird aber ausgewertet und kann potentiell natürlich auch in diesem Falschen Format vorliegen.

Wenn ja, warum trägst Du nicht nur das Datum ein, wie Du es
unten beschrieben hast, funktioniert das ja.

Ich habe lediglich beschrieben, daß dieser es Typ kann. Offen bleibt die Frage nach dem wie …

Hintergrund: Access implemetiert einen Datumstyp, der Datum
und Uhrzeit implementiert. Gibt man nur das Datum an, so steht
in der Tabelle ausschließlich der Datumswert.

[…]

Gruß Markus

Hallo Markus,

In einer Tabelle verwende ich den Access
Datums-Typ und lese ihn aus. Wie kann ich ermitteln, ob neben
dem Datum eine Zeit angegegen ist und wie kann ich den
Zeit-Teil aus dem Datum entfernen?

Kannst Du nicht einfach den Eintrag auslesen und analysieren?

Genau darauf zielte meine Frage doch ab: wie analysiere ich
das Datum?

Du liest das Datum aus, also hast Du es irgendwo, in einer Variablen oder in einem Textfeld. Ein Datum kann man formatieren, so dass die Uhrzeit eliminiert wird. Liegt das Datum als String vor, kann man diesen zum Datum umwandeln. Beispiele für das alles findest du in der Delphi Onlinehilfe.

Wie bereits geschrieben, ich kenne mich mit ADO und Access nicht aus.
Daher weiss ich auch nicht, wie das Datum erscheint.

Viele Grüße
Manfred.

Genau darauf zielte meine Frage doch ab: wie analysiere ich
das Datum?

Du liest das Datum aus, also hast Du es irgendwo, in einer
Variablen oder in einem Textfeld. Ein Datum kann man
formatieren, so dass die Uhrzeit eliminiert wird. Liegt das
Datum als String vor, kann man diesen zum Datum umwandeln.
Beispiele für das alles findest du in der Delphi Onlinehilfe.

Wie bereits geschrieben, ich kenne mich mit ADO und Access
nicht aus.
Daher weiss ich auch nicht, wie das Datum erscheint.

Danke für deine Hilfe, aber ich bin einfach nur auf der Suche nach der passenden API Funktion der Klasse TDateTime oder einer Hilfsfunktion.
Aktuell behelfe ich mir bereits mit Zeichenketten-Konvertierungen, in meinen Augen ist das aber nur ein grober Workarround.
Ich bevorzuge an dieser Stelle eine Standardfunktion.

Wenn ich einen Datums-Typ in einer DB habe, muß es doch eine Methode zum entsprechenden manipulieren das Datums geben, oder?

Gruß Markus

Ich arbeite in Delphi mit den ADO Komponenten und einer MS
Access Datenbank. In einer Tabelle verwende ich den Access
Datums-Typ und lese ihn aus. Wie kann ich ermitteln, ob neben
dem Datum eine Zeit angegegen ist und wie kann ich den
Zeit-Teil aus dem Datum entfernen?

OK Frage verstanden

Hintergrund: Access implemetiert einen Datumstyp, der Datum
und Uhrzeit implementiert. Gibt man nur das Datum an, so steht
in der Tabelle ausschließlich der Datumswert. Wie ermittle
ich, ob eine Uhrzeit angegeben ist und wie entferne ich diese
wieder?

Ich nehme einfach an, dass dir das ganze Ding als String übergeben wird. Den musst du, wie schonmal erwähnt, analysieren. Es gibt kein Universalrezept, den String zu anaylsieren. Aber es könnte zum Beispiel sein, dass das Datum IMMER im Format DD.MM.YYYY geschrieben ist, also 10 Zeichen lang ist. Und da kannste einfach die Länge (Funct. length)abfragen, wenn länger als 10 dann is wahrscheinlich Datum mit Zeit, sonst nur Datum. Und wenn das Format für Datum mit Zeit meinetwegen folgendermaßen aussieht: DD.MM.YYYY HH:MM:SS dann tuste den String einfach kürzen auf die ersten 10 Zeichen und die Zeitangabe fällt automatisch raus. Der Code für mein Beispiel sähe dann ungefähr so aus:

var Zeitangabe:String; {die aus access}
 Nur\_Datum: String;
begin
 if length(Zeitangabe)\>10 then
 begin
 Nur\_Datum:='';
 for i:=0 to 9 do
 begin
 Nur\_Datum:=Nur\_Datum+Zeitangabe[i]
 end;
 end else 
 begin
 if length(Zeitangabe)=10 then Nur\_Datum:=Zeitangabe else
 begin
 messagedlg('Fehler, Zeitangabe zu kurz!',mterror,[mbcancel],1);

 {Wenn das kommt, haben wir was falsch gemacht bei der Analyse!
 Beziehungsweise was nicht beachtet, da der String kürzer 
 als 10 ist}
 end;
 end;
end;

Möglicherweise OT: kann ich Uhrzeiten direkt in der Tabelle
verbieten?

Das weiß ich nicht, ich bin kein Access-Liebhaber

Gruß Markus

Also,

laut meiner erkennnis ist die Verwaltung von TDatetime Werten in Delphi und Access transparent. D.h. in Delphi werden Tdatetime werte intern wie Fießkomma Werte verwaltet. Der ganzzahlige Teil des Werte stellt die Tage ab dem 1.1.1900 dar, der Wert hinter dem Komma stellt die Uhrzeit dar. Ist der Wert nur ganzzahlig, so wird die Uhrzeit 00:00:00 dargestellt (Mitternacht).
Damit kann man jetzt auch wunderbar rechnen:

var value:TDateTime;
Begin
Value:=now; // setzt aktuelles datum und uhrzeit
Temp:=Trunc(Value); {:schneidet den Werrt hinter dem komma ab und setzt den Wert auf Mitternacht:}
Value:=Value+1; // Setzt den wert auf Morgen um Mitternacht;
value:=Value+(1/24); // Setzt den wert auf Morgen um 1:00:00 Uhr
End;

Willst Du in deiner Access datenbank nur Werte haben die keine Uhrzeit enthalten, so musst die vor dem schreiben in die datenbank mit Trunc() oder auch Int() zu ganzzahligen Werten machen.

So, hoffentlich war es das was Du wissen wolltest.

Viele Grüsse

Benedikt

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]