FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
Muchas gracias por tu respuesta. Por desgracia no he podido aplicarla porque nunca he trabajado con parámetros y he tenido problemas; de todas formas interpreto que en tu código hay que introducir el dia y el mes. Entonces, lo que podría hacer es introducir la fecha completa a buscar y solamente comparar por Igual, Mayor que o Menor que, ya que el Like y Containing no me funcionan.
Sin embargo, aunque no sepa aplicar tu código, la explicación dada en el primer párrafo la desconocía y me ha sido muy útil. Gracias de nuevo. |
#2
|
||||
|
||||
Parametrizar las consultas en importante, fundamental diría.
Copia el código que usas, los errores que salen y te ayudo. |
#3
|
||||
|
||||
Siguiendo con lo que dice kuan-yiu: Tu lógica interna DEBE usar tipos de datos correctos y MAS estrictos que tus entradas (que pueden venir como sea). Usa tipos fecha para fecha, floats para números imprecisos, decimal para monedas/números mas precisos, booleanos para si/no, etc. Y asegurate en mantener la disciplina a lo largo de toda la cadena del software (como es el esquema de datos). Eso no solo ahorra un MONTON de errores, también habilita optimizaciones desde el punto de vista del compilador y expande las capacidades de lo que haces.
Uno de los MAYORES errores al programar es ser perezoso con los tipos. Ademas, estas en delphi: Un lenguaje de tipos estáticos. Usalos.
__________________
El malabarista. |
#4
|
|||
|
|||
Hola de nuevo y gracias por el ofrecimiento.
El código que utilizo para filtrar la consulta es este:
El motivo de utilizar este sistema de búsqueda es mas visual que efectivo, lo sé. Cuando se va digitando en Edit6 cada carácter, llamo a una rutina (en el OnDrawColumCell) para que pinte de otro color en el DBGrid aquellas apariciones coincidentes con el valor de Edit6. En realidad no aparecen errores, lo que ocurre es que en los campos DATE o FLOAT, como son: IMPORTEENTREGA, IMPORTERECIBO, FECHAAPUNTE Y FECHAVENCIMIENTOCHEQUE no aparecen resultados al utilizar LIKE o CONTAINING cuando pulso "/" para las fechas o "." para los decimales de los numericos. Sin Embargo, cuando uso Igual, Menor, Mayor, Menor o Igual o Mayor o Igual SI obtiene registros cuando edit6 vale por ejempo "22/01/2020" o "31.60". En el Select del código, si dejo el UPPER del campo con el LIKE no da error pero los resultados de la consulta no son correctos, si quito el UPPER del campo, al comparar por IGUAL la fecha da el error "Overflow occurred during data type conversion. Conversion error from string 2". Espero haber sido claro en la explicación y gracias por tu tiempo. |
#5
|
|||
|
|||
Creo que los filtros están mal...
Que sentido tiene evaluar un campo fecha como mayusculas: upper(fechaEmision)? Que sentido tiene evaluar un campo float como mayusculas : Upper(ImporteRecibo)? Te sugiero que si estas filtrando por fecha utilices las siguientes estrategias, siendo f1 y f2 parámetros introducidos a la consulta: 1) FechaEmision = :f1 2) FechaEmision between :f1 and :f2 es equivalente a (FechaEmision>=:f1 and FechaEmision<= :f2) 3) FechaEmision <= :f1 4) FechaEmision >= :f1 En cuanto a filtro de valores numéricos (enteros, reales), sigue la misma sugerencia: 1) ImporteRecibo=:v1 2) ImporteRecibo between :v1 and :v2 es equivalente a (ImporteRecibo>=:v1 and ImporteRecibo<= :v2) 3) ImporteRecibo<=:v1 3) ImporteRecibo>=:v1 Dicho lo anterior, te propongo la siguiente modificación: Parámetros de la consulta: f1 y f2: Valores de fechas mínimo y máxima v1 y v2: Valores de importe mínimo y máximo
Saludos cordiales |
#6
|
|||
|
|||
Me demoré mucho en escribir y aparecieron 3 mensajes antes que el mío... |
#7
|
|||
|
|||
Gracias por tu respuesta. Perdona, pero me puedes decir dónde defino f1, f2, v1 y v2?, puede ser el edit que utilizo para introducir la fecha?. Lo siento pero nunca he trabajado con parámetros. Hay alguna forma de evitar los parámetros?.
Muchas gracias |
#8
|
|||
|
|||
Los parámetros los defines en el sql y deben ser antecedidos por dos puntos ":Variable", es mas pueden ser llamados igual que el nombre de campo que quieres filtrar.
Por ejemplo, si utilizas TpFIBDataset o TpFIBQuery Yo te recomiendo utilizar parámetros para aplicar filtros en las consultas, es mucho mas claro. Ademas cuando los parámetros son de tipo string, solo se encarga de asignar las comillas y ya no te preocupas de ese tema...
v/s
Espero haber aclarado en algo tus dudas... |
#9
|
||||
|
||||
No lo evites, al contrario, es lo mejor.
|
#10
|
||||
|
||||
¿ Por qué motivo harias eso ?
Como te indican, siempre que se pueda, es la mejor opción. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
|||
|
|||
Desde luego que siempre estáis ahi para ayudar. Muchas gracias por vuestras recomendaciones y consejos. Lo probará como decís y ya que no tiene demasiada complicación seguro que solucionaré el problema.
Gracias de nuevo. |
#12
|
||||
|
||||
Para que tengas claro la importancia de usar parametros:
https://es.wikipedia.org/wiki/Inyección_SQL
__________________
El malabarista. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda BD Access? Ayuda al modificar!! | DarkArias | Conexión con bases de datos | 4 | 24-08-2013 23:47:41 |
Instalar Ayuda (.HLP) en la Ayuda de Delphi? | MasterXP | Varios | 6 | 12-04-2006 06:57:49 |
Ayuda para crear ayuda... | Gabriel2 | Varios | 2 | 10-06-2005 00:15:18 |
ayuda con strtofloat, ayuda punto flotante | TURING | Varios | 5 | 30-04-2004 08:03:59 |
Ayuda Con Instalacion De Archivos De Ayuda | Legolas | Varios | 1 | 01-12-2003 14:48:03 |
|