Sebagai aturan umum, jangan perlakukan nilai TDateTime sebagai string, tetapi sebagai tanggal dan waktu.
Jangan mendapatkan nilai bidang Tanggal/Waktu dengan metode AsString, gunakan metode AsDateTime dan tetapkan ke variabel TDateTime.
Jika Anda ingin mengetahui bagian tanggal, gunakan fungsi yang disediakan untuk melakukannya. Misalnya yang tersedia di DateUtils satuan. SysUtils unit juga berisi beberapa fungsi terkait Tanggal/Waktu.
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]);
Hal yang sama berlaku untuk menyimpan nilai ke database, daripada menggunakan format tanggal tetap, gunakan parameter, seperti ini:
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();
Ia bekerja dengan semua lapisan akses basis data yang tersedia yang saya ketahui.