FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Llamar a una función/procedimiento de BBDD desde Delphi
Buenas,
Al final me he decidido por este hilo, espero no haberme equivocado. - Oracle Database 11g Release 11.2.0.4.0 - 64bit Production - Delphi Versión 7 (Build 4.453) Tengo un paquete de base de datos donde he definido varias funciones, las funciones devuelven un tipo personalizado. Este tipo personalizado se encuentra en la sección de la especificación del paquete de Oracle.
Existe una función que devuelve un tipo TPermisos, debido al fracaso (que ahora comentaré), convertí esta función en un procedimiento donde uno de los parametros fuera de salida y del tipo TPermisos. Desde Delphi he intentado llamar a la función y al procedimiento, sin exito. He usado el componente TOraStoredProc (este es un ejemplo pero he hecho varias pruebas distintas):
¿Cual es el problema? En el primer parámetro de CreateParam se define el tipo del parámetro, y el tipo viene definido por TFieldType.
No consigo encontrar la forma de encontrar un tipo que se trague la estructura que he definido en la especificación del paquete de Oracle. "El error que da es que el número de argumentos o tipo es erroneo". El número de argumentos no es, hay dos parámetros, uno de entrada y otro de salida, el tipo del primero es ftInteger, y el tipo del segundo ... he probado con varios tipos y nada. No sé si se os ocurre como hacerlo o si lo hariais de otra manera. Espero haberme explicado, si no ha quedado claro preguntarme que intentaré ser más claro. Gracias de antemano. |
#2
|
|||
|
|||
Estimado jofemalo73: En primer lugar no soy experto en Oracle, pero a su comentario...
Cita:
En una primera revisión lo que se ocurre es que genere una consulta/vista/procesimiento almacenado, que le devuelva lo siguiente:
Suponiendo que existe un componente TOraSQL
Espero mi comentario le ayude, Saludos cordiales |
#3
|
|||
|
|||
Hola Cloayza,
muchas gracias por su rápida y trabajada respuesta. Le comento, llegué a una solución en la que no fui consciente de ella hasta que la probé. El procedimiento del que he hablado antes basicamente lo que hace es ejecutar una consultar y alimentar la estructura que luego paso por parámetro. Cambié el tipo del parámetro de salida (p_permiso), de tipo TPermisos por SYS_REFCURSOR, de manera que la función abría una consulta donde volcaba el contenido en dicho parámetro:
Desde Delphi al llamar al procedimiento con el componente TOraStoredProc funcionó sin problemas, hice una lectura de cada una de los registros y alimente una estructura Type Record en Delphi. Fue un momento agridulce porque me di cuenta de la tontería que estaba haciendo en ese momento. Me di cuenta que para eso, la consulta que ejecutaba en el procedimiento del paquete almacenado podía ejecutarla desde Delphi y alimentar la estructura Type Record definida en Delphi. Me parece más óptimo y más "limpio" llamar al procedimiento y que me devuelva lo que quiero, ya que no hay lógica de negocio, es obtener una foto de lo que hay en BBDD en un momento dado, y la idea es que a este paquete se acceda desde distintas aplicaciones, ya que van a limitar el acceso a los expedientes. La solución que me ofreces es correcta y la que me imagino que al final usaré. Crearé una Unit de Delphi con las funciones que he definido en el paquete, y con la estructura Type Record creada en la misma Unit, añadiré la directiva {$WEAKPACKAGEUNIT ON} para poderla usar en todas las aplicaciones. Investigaré un poco más a ver si consigo dar con otra solución. Si la encuentro la comentaré. Muchas gracias por su ayuda Cloayza. Saludos . |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Llamar función desde una DLL en Delphi | freynoso | Varios | 2 | 31-10-2017 15:59:09 |
Como llamar a una función de BD desde delphi | strelok | Conexión con bases de datos | 3 | 06-10-2017 12:46:51 |
Cómo llamar procedimiento almacenado desde delphi con Servidor DataSnap. | novato_erick | Conexión con bases de datos | 2 | 14-11-2012 19:29:48 |
Como mandar llamar un procedimiento almacenado desde delphi | richy08 | MS SQL Server | 1 | 03-02-2010 02:06:23 |
Ayuda, como llamar a un procedimiento desde otro procedimiento? | Ariatna | Varios | 1 | 01-02-2005 05:05:35 |
|