Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema de leitura do Delphi SQL Date


Como regra geral, não trate os valores de TDateTime como strings, mas como datas e horas.

Não obtenha o valor de um campo Date/Time com o método AsString, use o método AsDateTime e atribua-o a uma variável TDateTime.

Se você quiser saber as partes da data, use as funções fornecidas para isso. Por exemplo, os disponíveis no DateUtils unidade. O SysUtils A unidade também contém algumas funções relacionadas a Data/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]);

O mesmo se aplica ao armazenamento de valores no banco de dados, em vez de usar um formato de data fixo, 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();

Ele funciona com todas as camadas de acesso ao banco de dados disponíveis que eu conheço.