Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem beim Lesen des Delphi-SQL-Datums

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.