![]() |
Problema con un parámetro de salida en un Stored Procedure
Hola:
Estoy programando una aplicación utilizando Delphi 6 y DBExpress, accediendo con un servidor Firebird 1.5. El problema lo tengo con un procedimiento almacenado, que lo tengo montado de la manera siguiente: un componente de tipo TSQLStoredProcedure, conecto a este componente un TDataSetProvider, y por un ultimo hay un TClientDataSet accediendo al proveedor, es decir, que la ejecución del procedimiento se realiza a través del ClientDataSet. Pues bien el problema está en cuando el parámetro de salida del procedimiento es de tipo VARCHAR, en concreto está definido como VARCHAR(10) y en el componente de Delphi el parámetro es de tipo string. Al hacer el Execute del ClientDataSet obtengo una excepción que dice: Código:
Sin embargo si el parámetro es de tipo Integer y devuelvo el entero, el procedimiento no hay ningun problema, por lo que creo que el tema está en la definición de los parámetros. ¿Alguien puede echarme una mano? Gracias de antemano |
Hola taote!
¿Y por qué no pones el código del procedimiento y la definición de los parámetros? Así igual te podíamos ayudar...:) Un saludillo! ;) |
Hola:
Lo que queria decir es que con un codigo tan simple como
me falla el procedimiento al llamarlo desde Delphi. En Delphi está configurado tal y como se dice en el primer mensaje. Venga, gracias por las respuestas. |
¿ Porqué utilizas un DatasetProvider y un ClientDataset ?, hasta donse yo sé no puedes utilizar el ClientDataset así.
Simplemente ejecuta el Execute en el TSQLStoredProc. Saludos. |
Hola:
Claro que es posible. De esta manera mantengo aislado el programa de la capa de acceso a datos (donde tengo los componentes DBExpress), accediendo a través de la capa intermedia. Y puedo tratar las capas de manera independiente. Si se configura tal y como he puesto en el primer mensaje, puede hacerse, de una manera similar a
En este caso CodNuevo es el TClientDataSet, enlazado a un proveedor que a su vez está enlazado al componente de procedimiento almacenado, que tiene un parámetro de entrada Tipo, y uno de salida Codigo del tipo VARCHAR(10). Lo utilizo para obtener un nuevo código para la tabla. Si lo que devuelvo es un entero no hay problema, pero con el VARCHAR si falla. |
Hola.
¿ Estás seguro que el problema es el parámetro ?. Por el mensaje de error también pueden ser 2 cosas : a) Tienes una asignación en tu procedimiento, que intenta pasar una cadena dentro de una variable más corta (un varchar(12) a un varchar(10)). En lugar de truncar la cadena te salta esta excepción. b) Numeric overflow o arithmetic exception : Tienes alguna operación cuyo resultado falla (tipo división por 0), o no cabe en la variable destino (tipo asignar a un entero el resultado de una división, que puede ser un valor decimal). Asegúrate, ejecutando este procedimiento desde IBConsole, IBExpert, IBAccess, ... o similar. NOTA : Comprueba también que los parámetros, tanto en en el SQLStoredProc como en el ClientDataset sean varchar(10). PD : Piensa que el driver dbExpress de Borland es para Interbase. A medida que Firebird sigue su evolución te puedes encontrar con problemas de incompatibilidad de este tipo. En este caso, se soluciona instalando un driver dbExpress específico para Firebird, como por ejplo. : http://www.upscene.com/products/dbx/dbx_fb.htm Saludos. |
La franja horaria es GMT +2. Ahora son las 21:11:00. |
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