Delphi SQL Fecha de lectura de la date

Actualmente estoy creando una aplicación Delphi con conexiones SQL integradas.
SQL almacena sus valores de date en el formatting YYYY-MM-DD; sin embargo, cuando leo estos valores en mi aplicación Delphi, se leen en el formatting MM-DD-YYYY.

Actualmente escribí el código para leer los valores de las dates de mi database, sin embargo, tengo problemas para procesar los valores que no tienen numbers integers de 2 meses o integers de 2 días. Por ejemplo, la date del 17 de febrero de 2013 se leería como '2/17/2013'

Mi código actual separa la date en día, mes y año. Funciona bien para las dates completas (MM / DD / YYYY) ya que lee los valores correspondientes dentro del text usando el command 'Copiar' dentro de Delphi. Cuando lee una date que está en el formatting M / D / YYYY, no copy los valores correctos de la cadena.

¿Hay alguna manera de editar la cadena antes de ejecutar mi código de separación, por lo que obliga a la cadena en el formatting de MM / DD / YYYY. Mi idea es escribir código para verificar el formatting de la cadena y luego agregar los ceros que falten: es decir, cambiar el 17/02/2013 al 17/02/2013

Sé que probablemente estoy haciendo algo para hacer las cosas más difíciles para mí, pero este es mi código en este momento, por lo que cualquier ayuda para solucionar mi problema agregando mi código actual sería muy apreciado.

Gracias.

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

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

Si desea conocer las partes de la date, use las funciones provistas para hacerlo. Por ejemplo, los disponibles en la unidad DateUtils . La unidad SysUtils también contiene algunas funciones relacionadas con Fecha / 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 database, en lugar de usar un formatting de date fijo, usar parameters, 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 yo sepa.

No estoy familiarizado con Delphi, pero si es algo como .net, ColdFusion, php o cualquier otra tecnología de aplicaciones, los principios son los mismos.

Primero, dado que tiene un tipo de datos de date y hora en su database, el único formatting de date es cuando lo visualiza. Las dates son numbers, no cadenas.

A continuación, los parameters de consulta son su amigo por una variedad de razones. Si puede crear una variable de date y hora en Delphi y enviarla a MySql como parámetro, la vida será muy buena.