Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème de lecture de la date Delphi SQL

En règle générale, ne traitez pas les valeurs TDateTime comme des chaînes, mais comme des dates et des heures.

N'obtenez pas la valeur d'un champ Date/Heure avec la méthode AsString, utilisez la méthode AsDateTime et affectez-la à une variable TDateTime.

Si vous souhaitez connaître les parties de la date, utilisez les fonctions fournies pour le faire. Par exemple ceux disponibles dans DateUtils unité. Le SysUtils l'unité contient également des fonctions liées à la date/heure.

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

Il en va de même pour le stockage des valeurs dans la base de données, plutôt que d'utiliser un format de date fixe, utilisez des paramètres, comme ceci :

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

Cela fonctionne avec toutes les couches d'accès à la base de données disponibles que je connais.