Beschouw TDateTime-waarden als algemene regel niet als tekenreeksen, maar als datums en tijden.
Krijg niet de waarde van een Date/Time-veld met de AsString-methode, gebruik de AsDateTime-methode en wijs deze toe aan een TDateTime-variabele.
Als je de datumdelen wilt weten, gebruik dan de voorziene functies om dit te doen. Bijvoorbeeld degene die beschikbaar zijn in de DateUtils eenheid. De SysUtils apparaat bevat ook enkele aan datum/tijd gerelateerde functies.
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]);
Hetzelfde geldt voor het opslaan van waarden in de database, in plaats van een vast datumformaat te gebruiken, gebruik parameters, zoals deze:
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();
Het werkt met alle beschikbare databasetoegangslagen die ik ken.