Mysql
 sql >> Database >  >> RDS >> Mysql

Problema di lettura della data SQL di Delphi

Come regola generale, non trattare i valori di TDateTime come stringhe, ma come date e ore.

Non ottenere il valore di un campo Date/Time con il metodo AsString, utilizzare il metodo AsDateTime e assegnarlo a una variabile TDateTime.

Se vuoi conoscere le parti della data, usa le funzioni fornite per farlo. Ad esempio quelli disponibili in DateUtils unità. Il SysUtils l'unità contiene anche alcune funzioni relative a Data/Ora.

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 stesso vale per la memorizzazione di valori nel database, invece di utilizzare un formato di data fisso, utilizzare parametri, come questo:

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

Funziona con tutti i livelli di accesso al database disponibili che conosco.