![]() |
Consulta con SQL por fecha
Buenas compañeros,
uso tablas paradox y deseo hacer una consulta con tquery sobre unas tablas. En la consulta quiero filtrar el resultado por una fecha que la quiero coger de un TDateTimePicker. ¿Cómo puedo hacerlo en tiempo de ejecución? puesto que no me deja coger directamente en la query el valor del DateTimePicker1.Date. yo pensaba hacerlo así Cita:
Muchas gracias P.D. Si alguien me puede decir que función tengo que usar en el Select para poder sacar de la fecha de nacimiento la edad, directamente, se lo agradecería :-) |
Buenas!
Lo que tienes que poner en la select es un parámetro: select * from table where fecha = :param y después en el código le pasas el parámetro antes de ejecutrar la select: (el ejemplo está preparado para componentes ADO) Query.parameters.paramByName('param').Value := DateTimePicker1.date; Query.open; Un saludo Edu |
¿pero el parámetro tengo que crearlo antes, da igual el nombre que ponga?
|
Ha salido la carita esa y puede que no se entienda bien, así que lo pongo de nuevo:
En un SQL se puede poner los dos puntos y despues cualquier nombre, esto se interpreta como un parámetro, y como bien dice epuigdef hay que pasarle el parámetro antes de abrir la consulta:
SALUDOS |
Cita:
¿tengo que añadirlo antes a algún sitio? por que esto otro:
lo pongo en el evento onchange del DateTimePicker1. Muchas gracias |
Hola
Yo tambien estoy empezando con esto de los parametros, me funciono bien hasta ahora. tal vez lo que te falte es ponerle tipos a tus parametros. Esto se lo coloca en la propiedad parameters, seleccionas el parametro que añadiste y en sus propiedades indicar lo siguiente: Datype->ftDate Value->Type->Date Supongo que el primero es el tipo de dato de tu base de datos, y el segundo el tipo del parametro que le pasaras. En resumen: 1. Colocas tu sentencia sql como te indicaron 2. Defines el tipo de tu parametro 3. llamas con parambyname como te indicaron Lo hice funcionar con BDE, ahora con ADO, me funciono perfectamente Que todos tengan un Buen Dia |
Cita:
Se añade el Sql, y despues si accedes a la propiedad query.Params, verás que estan creados ya (delphi se encarga de analizar el SQL y crear los parámetros. Yo en algunos casos ni siquiera le indico el Datatype ni VAlue --> Type, porque en ejecución uso: Por tanto, ya sabe de que tipo son los parámetros. Por cierto, deberás cerrar la consulta al cambiar el parámetro:
Un saludo |
No me da error al hacer lo que me habeis dicho, pero no me coge ningún registro de la tabla, cómo si no existieran... y en esa fecha hay datos
|
Pues parece que está intercambiando el mes por el dia en la fecha que le pasas.
La verdad, es muy raro, cuando se utiliza parámetros en SQL, delphi se encarga de resolver ese conflicto con el sistema gestor de Bases de datos, así que no deberías tener errores de ese tipo, a menos que hayas cambiado el formato de fechas en el control Datetimepicker. :confused: En cambio, cuando se usa (en tablas paradox): Aqui si hay problemas, ya que normalmente casará las fechas con el formato mm/dd/yyyy, y nos devuelve los registros con fecha 2 de Enero.
Un saludo |
a lo mejor el problema está en que en vez de poner
Cita:
Cita:
|
Abre la tabla con el Database Desktop, igual está guardando la hora y por eso no te lo pilla, el operador "igual" si debe funcionar.
Una alternativa que no me gusta, sería indicar: FechaIni le das la fecha que busca el usuario menos 1 dia FechaFin le das la fecha que busca el usuario más 1 dia. Un saludo |
Gracias amigo Lepe, por haberme hecho dar cuenta que no se necesita ponerle valores al Datype ni al Value, hoy hice la prueba en BDE y en ADO y me funciono todo correctamente.
Muchisimas Gracias |
lo gracioso, es que utilizo varias querys en el programa y todas ellas dependen de lo mismo de un datetimepicker, pero la única que funciona correctamente es una en la que en el SELECT pongo una serie de columnas al final pongo lo del
y funciona corerctamente, pero en el resto de querys no funciona. En todas ellas tengo alguna función en el select cómo avg o count y algunas las tengo con group by, en todas estas es donde me da el error. Espero que me podais ayudar, porque no tienen sentido que por la fecha me de error y si lo hago por cualquier otra exclusión (el where) como por el nombre o cualquier otra cosa me lo hace bien. |
realmente no es que me de error, es que me dice que no hay ninguna... pero miro la fecha en la misma tabla en todos los casos, así que si se lee bien en una de las querys ¿por qué no en el resto? Además en una de las querys, que tengo asignadas por el DataSource a un DBGrid, al activarlas con el where maldito :-) de la fecha se me queda petado el Delphi 5.
Ala que os doy la brasa... Muchas gracias |
Pon el SQL completo de una consulta que te error o que no salga lo esperado.
|
perdón por el retraso :-) ha sido el puente, pero el error sigue ahi
en este caso me da error y no me deja activarlo se peta todo y tengo que cerrar el delphi:
En este otro caso no me coge nada pero si no pongo en el where lo de la fecha va bien:
y el único caso en el que funciona bien es:
|
En la primera, tildes y la letra Ñ no lo veo yo muy claro, tendrías que renombrar los campos.
En el segundo intenta esto
Un saludo |
No me da 0 pero tampoco me da lo que es, además me coge de más.
|
Además si pongo
me dice que no es válido fecha, así que lo hice directamente con FECHA_ADMISION |
La franja horaria es GMT +2. Ahora son las 08:34:28. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi