PDA

Ver la Versión Completa : Problema con el formato de fechas utilizando una query.


cesar_gta86
29-07-2008, 19:26:21
Hola que tal amigos, de nuevo aquí solicitando su ayuda, miren lo que pasa es que tengo una query, y al momento en que se ejecuta el código sql, truena el sistema y me manda un mensaje de error que dice:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)Type mismatch in expression


que significa desigualdad del tipo en la expresión.

Ya estuve investigando aquí en el foro de Mysql, y a alguien le pasó el mismo problema y ya lo solucionó, lo que pasa es que el problema se encuentra en el formato de las fechas, pero en realidad no le entiendo. Ya que él utilizaba un procedure con paso de parámetros.

Les explico lo que estoy haciendo: quiero imprimir reportes de una fecha determinada o de un periodo de tiempo, pero para eso utilizo la query, para seleccionar los registros que se encuentren dentro de una fecha determinada.


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
Form36.query1.close;
Form36.query1.sql.clear;
Form36.query1.sql.text:='select * from inconsistencias where Fecha_fueron_dev=20080723'; //también voy a utilizar la función between para imprimir reportes que se encuentren dentro de un periodo de tiempo.
Form36.query1.execsql; //aquí manda el mensaje de error
Form36.query1.active:=true;





Pero al momento en que se ejecuta el código sql es cuando viene el error, la fecha la tomo de un datetimepicker, y la paso a cadena para asignarla a la query, por supuesto que el campo Fecha_fueron_dev es tipo date de la tabla de inconsistencias; como pueden ver cambié el orden de la fecha del datetimepicker que es (dia/mes/año) al formato de sql (año/mes/dia), pero sigue el problema.

Contraveneno solucionó este problema utilizando parámetros, de una propiedad de la query que se llama parambyname() pero yo no sé cómo aplicarlo en mi caso.

Espero y me puedan echar la mano, les doy las grácias desde ya.

coso
29-07-2008, 19:53:46
le estas pasando un entero y espera un datetime...
prueba de hacer



q.sql.text := 'select * from tabla where data =' + FormatDateTime('yyyy/mm/dd',data);



o bien usar los parametros, tal como indicabas


q.sql.text := 'select * from tabla where data = :fecha';
q.parambyname(':fecha').Asdatetime := datetimepicker1.Date;



PD: el formato usado varia segun que servidor SQL uses : Access, #mm/dd/aaaa#, sql server #dd/mm/aaaa#, etc...

egostar
29-07-2008, 19:56:33
Solo una fe de erratas

Esto
q.parambyname(':fecha').Asdatetime := datetimepicker1.Date;
Debe ser
q.parambyname('fecha').Asdatetime := datetimepicker1.Date;

Salud OS

cesar_gta86
03-08-2008, 19:51:49
Muchas grácias amigos, ya logré solucionar el problema.

Utilicé parámetros con la query.


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
query1.sql.text:='select * from inconsistencias where Fecha_fueron_dev between :f_ini and :f_fin';
query1.parambyname('f_ini').asdate:=datetimepicker1.date;
query1.parambyname('f_fin').asdate:=datetimepicker2.date;
query1.execsql;
query1.active:=true;





Grácias por sus respuestas.