Behandeln Sie TDateTime-Werte grundsätzlich nicht als Strings, sondern als Datum und Uhrzeit.
Rufen Sie den Wert eines Datums-/Zeitfelds nicht mit der AsString-Methode ab, verwenden Sie die AsDateTime-Methode und weisen Sie ihn einer TDateTime-Variablen zu.
Wenn Sie die Datumsteile wissen möchten, verwenden Sie dazu die bereitgestellten Funktionen. Zum Beispiel diejenigen, die in DateUtils verfügbar sind Einheit. Die SysUtils Das Gerät enthält auch einige datums-/zeitbezogene Funktionen.
uses
DateUtils, SysUtils;
var
MyDate: TDateTime;
MyDay, MyMonth, MyYear: Word;
begin
MyDate := MyQuery.Fields[3].AsDateTime; //not AsString
MyDay := DayOf(MyDate);
MyMonth := MonthOf(MyDate);
MyYear := YearOf(MyDate);
ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);
//or also
MyDate := EndOfTheMonth(MyDate);
DecodeDate(MyDate, MyYear, MyMonth, MyDay);
ShowMessage(Format('Day: %d, Month: %d, Year: %d', [MyDay, MyMonth, MyYear]);
Dasselbe gilt für das Speichern von Werten in der Datenbank, anstatt ein festes Datumsformat zu verwenden, verwenden Sie Parameter wie diese:
uses
DateUtils, SysUtils;
var
MyDate: TDateTime;
MyDay, MyMonth, MyYear: Word;
begin
MyDate := EncodeDate(2013, 2, 17);
MyQuery.SQL.Text := 'insert into myTable (MyDate) values (:MyDate)';
MyQuery.Params.ParamByName('MyDate').AsDateTime := MyDate;
MyQuery.ExecSQL();
Es funktioniert mit allen verfügbaren Datenbankzugriffsschichten, die ich kenne.