![]() |
sqlquery con parametros no me funciona
Este query
Da resultado 0 La misma sin parametros da resultado 1630. Utilizo DBExpress, BD es FireBird 2.5 entorno Delphi XE2. ¿porqué?.¿Alguien sabe que me falta, que estoy haciendo mal...? Gracias |
Hola
Los campos cliente y agente son numeros o letras? En el primero lo estas pasando como numeros i en el segundo como texto Prueba de esta manera:
|
los campos de la base de datos son numeros(integer), por tanto los parametros tienen que ser integer.
|
Cita:
|
Cita:
Si los campos son numericos, el parametro debe ser numérico (por eso parambyname().asInteger) y le asigno el valor que viene de un editText reconvertido a integer(strtoint(editText)). En el segundo caso, a un query.text le asigno los mismos valores de un editText sin entrecomillar(sin QuotedStr, que seria el caso de asignar un string ). Creo que es así como se hace, pero puedo estar equivocado. |
¿Seguro que son integer en la base de datos?
|
Cita:
y sigue saliendo 0 |
Proba poniendole literales directamente en los parametros. Para descartar problemas de conversion por configuracion regional por ejemplo
Obviamente con valores relevantes al dominio |
Hay una cosa que no entiendo.
si creas la consulta "al vuelo", porqué utilizas parámetros? Creala en tiempo de diseño y carga los parámetros en tiempo de ejecución. Creo que también puedes o debes hacer Query.Prepare para que los parámetros los tome correctamente. Creo que van por ahí los tiros, pero no puedo mirarlo ahora. Saludos |
Gracias a todos.
Ya está solucionado. Os explico: el campo AGENTE es un smallint. A los parámetros les cargo el valor que vienen de un TEDIT. El problema viene porque desde el TEDIT HASTAGEN venía un valor mayor que el máximo valor de un smallint(32767).El valor del TEDIT se asigna al parámetro correspondiente, el cual no da ningun tipo de error, pero no hace nada. Por eso salia 0. Controlando el máximo valor del tedit HASTAAGEN, problema solucionado. De nuevo gracias a todos. |
Entonces no podía funcionar ni con parámetros ni sin parámetros :confused:
|
Cita:
|
Cita:
al menos en MySQL, funciona bien aunque campo sea de un tipo entero pequeño, y es lógico que funcione pues no hay ninguna infracción al rango del campo. Habría que ver qué es lo que hace Delphi con el valor del parámetro cuando excede el rango. (Quizá lo ajusta a -1) LineComment Saludos |
Entonces ese era el problema con parámetros lo convertía en -1 y sin parámetros le asignaba correctamente el número mayor de 32000
|
Cuando un SmallInt excede del valor que puede almacenar, puede tener dos estados (Positivo o Nevativo)
SmallInt = Valor que se le pasa originalmente - (32767 * 2) - 2 eje: Resultado es: a = 36000, b = -29536 Resultado es: a = 86000, b = -20464 Un saludo. |
Perdón, esto de copiar y pegar, pasa lo que pasa.
Resultado es: a = 86000, b = 20464 Un saludo. |
La franja horaria es GMT +2. Ahora son las 06:26:10. |
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