Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Pasar parámetro que sea una cadena de números (https://www.clubdelphi.com/foros/showthread.php?t=88521)

pape19 16-06-2015 21:04:50

Pasar parámetro que sea una cadena de números
 
Buenas tardes, me encuentro con el siguiente problema.

Tengo una tabla en una base de datos firebird en la cual guardo diferentes querys(una por registro). Al necesitar una...creo un objeto IBQuery por código, y le asigno el código de la query de un registro de esa tabla.

En este caso tengo la siguiente consulta.

Código SQL [-]
SELECT  CTR_LOG_PEDIDOS_DET.RZ_CLIENTE,
            SUM (CTR_LOG_PEDIDOS_DET.CANT_BULTOS)
FROM CTR_LOG_PEDIDOS_DET
WHERE   CAST(CTR_LOG_PEDIDOS_DET.RETIRO_TRANSP AS DATE) >= :FECINI
AND       CAST(CTR_LOG_PEDIDOS_DET.RETIRO_TRANSP AS DATE) <= :FECFIN
AND       CTR_LOG_PEDIDOS_DET.TRANSP_ID IN ( :qCadena )
GROUP BY CTR_LOG_PEDIDOS_DET.RZ_CLIENTE

En el código, en delphi, tengo lo siguiente.

Código Delphi [-]
IBQuery1.ParamByName('Qcadena').Text := cadenaTransportes;

cadenaTransportes es un string que equivale a '11, 20, 31, 4'.

Al abrir la query obtengo la excepción:
"conversion error from string "11, 20, 31, 4"

Como puedo solucionar esto??

Muchas gracias!

Casimiro Notevi 16-06-2015 21:11:53

Puede ser:
Código Delphi [-]
IBQuery1.ParamByName('Qcadena').Text := #39+cadenaTransportes+#39;
o también
Código Delphi [-]
IBQuery1.ParamByName('Qcadena').Text := QuotedStr(cadenaTransportes);

pape19 16-06-2015 21:33:04

Casimiro, gracias por la pronta respuesta.

En esos casos me da el mismo error, con comillas simples, de la siguiente forma.

conversion error from string "'11, 20, 31, 4'"

Un dato aparte y que puede servir...es que si en lugar de tomar el valor almacenado de la tabla; escribo el SQL en delphi, funciona bien.

Código Delphi [-]
IBQuery.SQL.Text := 'SELECT  CTR_LOG_PEDIDOS_DET.RZ_CLIENTE, ' +
                                          'SUM (CTR_LOG_PEDIDOS_DET.CANT_BULTOS) ' +
                                          'FROM CTR_LOG_PEDIDOS_DET ' +
                                          'WHERE   CAST(CTR_LOG_PEDIDOS_DET.RETIRO_TRANSP AS DATE) >= :FECINI ' +
                                          'AND       CAST(CTR_LOG_PEDIDOS_DET.RETIRO_TRANSP AS DATE) <= :FECFIN ' +
                                          'AND       CTR_LOG_PEDIDOS_DET.TRANSP_ID IN ( :qCadena ) ' +
                                          'GROUP BY CTR_LOG_PEDIDOS_DET.RZ_CLIENTE ';

ecfisa 16-06-2015 21:49:49

Hola pape19.

Mirando ahora con mas detalle, veo que RZ_CLIENTE es el identificador de la tabla, seguramente de tipo INTEGER. Y es que de el modo que lo estás haciendo, Firebird jamás sabra que lo que intentas pasar como parámetro es una lista de enteros separados por comas...

Lo que precisas hacer es algo así: How to input an array parameter of values to Firebird Stored Procedure? ( mensaje 2)

Saludos :)

pape19 16-06-2015 22:56:12

Muchisimas gracias Ecfisa! Excelente solución!


La franja horaria es GMT +2. Ahora son las 07:09:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi