Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error al buscar fechas TDateTimePicker a Mysql (https://www.clubdelphi.com/foros/showthread.php?t=92989)

andres_89 10-04-2018 21:44:35

Error al buscar fechas TDateTimePicker a Mysql
 
Estimados amigos,

Tengo un problemita con la lectura de fechas en C++ con Mysql utilizando TDateTimePicker y ADOQuery.

Cuando envio el siguiente código con formato "2018/01/01" me funciona bien pero cuando lo envío en el formato "01/01/2018" (el que usaré), mysql no lo lee y no arroja nada, ejemplo:

Código funcional:
Código:

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT cbx_participacion_datos.fecha_ci");
ADOQuery1->SQL->Add("FROM cbx_participacion_datos");
ADOQuery1->SQL->Add("WHERE (cbx_participacion_datos.fecha_ci = :PVALUE1)");
ADOQuery1->Parameters->ParamByName("PVALUE1")->Value = Date.DateString(); // :PVALUE1 = "2018/01/01"
ADOQuery1->Open();
ADOQuery1->First();

Pero cuando lo envío en el formato latino "01/01/2018", no lo lee, a pesar que cuando lo registre con este formato "01/01/2018", se registro normal.

Código que no lee Mysql:
Código:

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT cbx_participacion_datos.fecha_ci");
ADOQuery1->SQL->Add("FROM cbx_participacion_datos");
ADOQuery1->SQL->Add("WHERE (cbx_participacion_datos.fecha_ci = :PVALUE1)");
ADOQuery1->Parameters->ParamByName("PVALUE1")->Value = Date.DateString(); // :PVALUE1 = "01/01/2018"
ADOQuery1->Open();
ADOQuery1->First();

Espero me puedan guiar que estoy haciendo mal, ya que la final requiero buscar registros con formato "01/01/2018" desde un TDateTimaPicker.

Saludos.

ecfisa 10-04-2018 22:44:08

Hola.

No uso MySQL pero por lo que pude leer, aparentemente almacena las fechas con el formato YYYY/MM/DD. Entonces pienso que tal vez la función DATE_FORMAT() te pueda ayudar.

Por lo que indica el enlace pienso que habría que hacer algo similar a esto:
Código:

  ...
  ADOQuery1->SQL->Add("WHERE (DATE_FORMAT(FECHA_CI,"%d/%m/%Y") = :PVALUE1)");
  ADOQuery1->SQL->Parameters->ParamByName("PVALUE1")->Value = "01/01/2018"; //(*)

(*) o una variable de tipo texto que almacene la fecha.


Saludos :)

TOPX 10-04-2018 22:46:27

Estimado,

Si el campo fecha_ci es de tipo DATE, DATETIME ó TIMESTAMP, puede hacer:
Código PHP:

ADOQuery1->Parameters->ParamByName("PVALUE1")->AsDateTime Date(); 

Y de la misma manera:
Código PHP:

ADOQuery1->Parameters->ParamByName("PVALUE1")->AsDateTime DateTimePicker1->Date

Pero, si no es así, se le recomienda que lo cambie a uno de esos tipos de dato.
-

andres_89 11-04-2018 03:58:29

Cita:

Empezado por TOPX (Mensaje 525600)
Estimado,

Si el campo fecha_ci es de tipo DATE, DATETIME ó TIMESTAMP, puede hacer:
Código PHP:

ADOQuery1->Parameters->ParamByName("PVALUE1")->AsDateTime Date(); 

Y de la misma manera:
Código PHP:

ADOQuery1->Parameters->ParamByName("PVALUE1")->AsDateTime DateTimePicker1->Date

Pero, si no es así, se le recomienda que lo cambie a uno de esos tipos de dato.
-

Probe tu código TOPX, pero me mando un error:
Código:

[bcc32 Error] Formulario_Principal.cpp(728): E2316 'AsDateTime' is not a member of 'TParameter'
Estoy utilizando Embarcadero c++ Builder 10.2.2, quizas sea la versión que no lo reconoce.

Probe el código de ecfisa, no me dio errores pero no me reconocio las fechas, pero buscando por google el DATE_FORMAT() que menciono ecfisa, encontre otra función parecida "FormatDateTime()" y me funciono perfectamente, dejo el código:

Código:

ADOQuery1->SQL->Add("WHERE (cbx_participacion_datos.fecha_ci) >= :PVALUE1");
ADOQuery1->Parameters->ParamByName("PVALUE1")->Value = FormatDateTime("yyyy/mm/dd",TDateTimePicker->Date.DateString());

Y para mostrarlo con el tiempo:
Código:

ADOQuery1->SQL->Add("WHERE (cbx_participacion_datos.fecha_ci) >= :PVALUE1");
ADOQuery1->Parameters->ParamByName("PVALUE1")->Value  = FormatDateTime("yyyy/mm/dd hh:mm:ss",TDateTimePicker->Datetime);

Gracias por las respuestas, me iluminaron en la búsqueda.


La franja horaria es GMT +2. Ahora son las 13:17:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi