PDA

Ver la Versión Completa : Ayuda con consulta de fechas


mosorio
02-08-2003, 01:31:29
Hola,
Tengo un inconveniente con una consulta que no se que sucede, he visto antes los otrs hilos y he hecho como dan las respuestas pero no obtengo el resultado y tengo un registro de pruebas, la sql es asi:


SELECT
M.IDMOVIMIENTO, M.VALORMOV, M.FECHAMTO, M.HORAMTO,
M.IDMOVIMIENTO, M.IDREGISTRO
FROM
MOVIMIENTOS M
WHERE
M.IDTIPOMOVIMIENTO = 5 AND
M.FECHAMTO = '01/08/03'


Y el resultado de esta consulta es 0, al igual lo he hecho con un CAST y es igual, el cast lo he efectuado asi: CAST(FECHAMTO AS DATE) = '01/08/2003', donde esta fecha es pasada como parametro.

Espero me den una pista.
Gracias de antemano.

__cadetill
02-08-2003, 01:40:20
como monstas el SQL (ua que dices que lo pasas por paramentro)? Haces un Query.ParamByName('Fecha').AsDatetime??

Danos algo mas de pistas :)

De toda manera, si no te pilla el registro, es porque el formato de fecha no es ese. Quizas mm/dd/aaaa??

mosorio
02-08-2003, 22:04:31
Hola,
HAgo lo siguiente. Primero que todo decir que trabajo con dbexpress, y lo que hago es asignar la sentencia al commandtext del sql, obvio que primero cierro el cds le asigno la sentencia y luego la abro, la sentencia la construyo mediante código, ya que la tengo en una función para que me retorne la cantidad de registros y la sentencia, para evitar rodeos es esta:

sSQLCaja = 'SELECT '+
' M.IDMOVIMIENTO, M.VALORMOV, M.FECHAMTO, M.HORAMTO, '+
' M.IDMOVIMIENTO, M.IDREGISTRO '+
' FROM '+
' MOVIMIENTOS M '+
' WHERE '+
' M.IDTIPOMOVIMIENTO = %d AND '+
' M.FECHAMTO = %s';


Estos son los parámetros que paso antes de ejecutar la qry, pero no me da resultado alguno, siempre me arroja 0 como resultado y com ya dije hay un registro. En el %d estaba como %s y da lo mismo.

No se si sigas sorprendido de como paso la sentencia antes de ejecutar la qry. Otra cosa NO ejecuto el sql.open, lo que hago es cds.open, ya que coom es dbexpress se debe trabajar con el cds.

Agradesco la ayuda de antemano.

__cadetill
02-08-2003, 23:16:55
no se si has probado a ejecutar la sentencia que creas desde un programa externo estilo al SQL Explorer. Si no lo has hecho, pruebalo y veras donde esta el error

Otra cosa, las fechas y los campos alfanumericos, normalmente, has de ir entre comillas. Para ello te aconsejo el uso de la funcion QuotedStr

A parte, mirate lo que te comentaba en el primer post, el formato de la fecha. Segun al SGDB que ataques sera uno u otro mm/dd/yyyy, dd/mm/yyyy,......

Espero que estas pistas te lleven a la solucion ;)

mosorio
04-08-2003, 11:12:42
Hola cadetil,
En efecto ya había ejecutado la sentencia en iboconsole y el resultado es el mismo, ademas la había ejecutado con un cast por si había problemas, estoy utilizando firebir, 1.5, creo no recuerdo exactamente ya que la he instalado hace tiempo, si no hago el cast me da error ya que el campo es de tipo date. Otra cosa que hago es utilizar el quotedstr cuando paso el parámetro para completar la sentencia, pero es igual.

Espero que con estas otras pistas me puedan dar una ayuda o si es algun fallo de la versión de firebird.

__cadetill
04-08-2003, 11:26:40
Bueno, en Firebird, almenos hasta la version 1.0.3 que la que yo utilizo, el formato de fecha es mm/dd/yyyy por loq ue si montas una sentencia estilo....


var
Fecha : TDate;
begin
Fecha := EncodeDate(2003, 8, 1);

sSQLCaja = 'SELECT '+
' M.IDMOVIMIENTO, M.VALORMOV, M.FECHAMTO, M.HORAMTO, '+
' M.IDMOVIMIENTO, M.IDREGISTRO '+
' FROM '+
' MOVIMIENTOS M '+
' WHERE '+
' M.IDTIPOMOVIMIENTO = %d AND '+
' M.FECHAMTO = ' +
QuotedStr(FormatDateTime('mm/dd/yyyy', Fecha));


Deveria devolverte el valor

Ahora bien, para asegurarte de que no es problema de la fecha, yo quitaria de la sentencia SQL el TipoMovimiento (no sea que el problema lo este dando éste)

A ver si logramos dar con el problema :)

mosorio
07-08-2003, 15:01:01
Hola cadetil!
Efectivamente, la respuesta que me das con respecto a las fechas, si son tomadas como mm/dd/aaaa, lo que he realizado es asignar al campo la fecha con FormatDateTime('dd/mm/yyyy', Fecha), y del mismo modo cuando se lee o pasa el parámetro para que no haya problemas con el valor y si llegado el caso cambio de motor de BD no surja el mismo problema.

por cierto, he intentado entrar en tu página porque he visto un mensaje con respecto a un preview pero no veno ningún menu u otra acción pra poder pasar a algún otro nivel.
Tengo SO Win2KSrv y IE60.

Gracias por la ayuda

__hector
07-08-2003, 16:09:20
Un comentario al margen:

Segun el standar SQL 92, el formato de la fecha debe ser yyyy/mm/dd. En teoria, si ponemos año/mes/dia en cualquier consulta, debe trabajar sin ningun problema en cualquier motor de bbdd.

__cadetill
07-08-2003, 19:30:22
Posteado originalmente por mosorio
por cierto, he intentado entrar en tu página porque he visto un mensaje con respecto a un preview pero no veno ningún menu u otra acción pra poder pasar a algún otro nivel.
Tengo SO Win2KSrv y IE60.


pues es extraño, trabajo con W2k Proff y IE6 y me funciona muy bien :(

Nada, tendre que mirar de cambiarlo de nuevo :mad:

Por cierto, que si lo quieres te lo envio por correo