sql >> Base de Datos >  >> RDS >> Mysql

Problema de lectura de fecha SQL de Delphi

Como regla general, no trate los valores de TDateTime como cadenas, sino como fechas y horas.

No obtenga el valor de un campo Fecha/Hora con el método AsString, use el método AsDateTime y asígnelo a una variable TDateTime.

Si desea conocer las partes de la fecha, utilice las funciones proporcionadas para hacerlo. Por ejemplo los disponibles en el DateUtils unidad. El SysUtils la unidad también contiene algunas funciones relacionadas con la fecha y la hora.

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]);

Lo mismo se aplica al almacenamiento de valores en la base de datos, en lugar de usar un formato de fecha fijo, use parámetros como este:

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();

Funciona con todas las capas de acceso a bases de datos disponibles que conozco.