FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Enviar parametros desde Delphi a Storage Procedures en BD Firebird
Buen día.
DESCRIPCIÓN: Tengo una base de datos que contiene múltiples tablas, algunas de éstas a su vez tienen dependencia de otras. He creado varios procedimientos almacenados para ejecutar acciones desde ahi, como la inserción de la información a las tablas o el borrado de registros. Éstos procedimientos dependen de recibir ciertos valores para realizar las acciones según en base a ello. He podido ejecutar procedimientos desde Delphi que he creado para armar algunas consultas en base a varias tablas pero sin enviar parametros de por medio. Ahi es donde radica mi problema: PROBLEMA: Necesito ejecutar un procedimiento pero enviandole parametros de por medio. Alguien sabe como hacerlo. Quizas mi duda sea muy simple pero agradecería la ayuda. Gracias y espero su respuesta. Estoy utilizando los componentes: IBDatabase, IBDataset e IBTransaction para trabajar con la BD. |
#2
|
||||
|
||||
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Más detallado
Como lo habia comentado, ya he podido ejecutar procedimientos almacenados en la BD ytilizando precisamente el componente TIBStoredProc. pero el problema radica en que no conozco como escribir la sentencia que hará tal situación.
Por ejemplo: El procedimiento se llama InsertCliente(nomb, dir, tel, email) y para llamarlo solo lo selecciono en el componente TIBStoreProc y lo activo en tiempo de ejecución para que no marque problemas. Pero para enviarle los parametros es ¿igual que cuando asigno valores a variables en un SQL normal? como pro ejemplo:
Perdón por escribirlo asi pero esque no tengo el Delphi a la mano en este momento. Gracias de antemano. |
#4
|
||||
|
||||
Al soltar un TIBStoredProc en tu forma o módulo de datos, asocialo a una base de datos y una transacción, luego estableces su propiedad StoredProcName correctamente, y en la propiedad Params tenes los parámetros, tanto en tiempo de diseño como de ejecución.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
|||
|
|||
Duda sobre firebird embedded
No me afectaría el tener que desinstalar el firebird que ya tengo y tener que reinstalar el embedded a mi base de datos que estoy utilizando.
|
#6
|
||||
|
||||
Cita:
Para darte tranquilidad te se decir que firebird ofrece el mismo comportamiento en el servidor embebido que en el servidor normal, con la diferencia que el embebido (por obvias razones) no tiene soporte para múltiples usuarios. Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
|||
|
|||
Perdón....
Parece ser que coloque el mensaje en el hilo equivocado, lo que necesitaba saber sobre el envío de paramentros a un procedimiento almacenado de la siguiente forma:
La sintaxis que se coloca para enviar los parametros a un procedimiento almacenado es la misma que cuando se le envia información a variables en SQL con delphi: Ejemplo: mi tabla se llama clientes.bgd por dar un ejemplo y tiene los campos nombre, direccion, telefono, email. El código para hacer una consulta seria ango así:
con esto se asignarían valores a los parametros de una consulta a una tabla. Ahora, el procedimiento se llama consulta_cltes y los campos son nombre, direccion, telefono, email, los valores de entrada son NOMB y MAIL, igual que la consulta anterior. ¿como podría asignar los parametros deseados? Gracias de antemano y perdón por la metida de pata pero es que es parte de lo que estoy investigando y me cuatrapie |
#8
|
|||
|
|||
Hola cuburu
No te entendi muy bien. me confunde unas cositas como esto: Cita:
Si lo que quieres es enviar parametros al SP, debes utilizar el componente TIBStoredProc, En tiempo de ejecucion debes poner algo como esto:
con la primera sentencia le asignas un valor al parametro y con la segunda ejecutas el SP Si tienes algun parametro de salida, puedes visualizarlo con esto:
__________________
La amistad es la union de dos almas para formar una sola. |
#9
|
|||
|
|||
Gracias.
Para que entiendan, lo que deseo es enviar una consulta filtrada basada en el nombre y apellidos de una persona. el código del procedimiento almacenado es: Código:
CREATE PROCEDURE CONSPERSONAS ( NOMBREI VARCHAR (40) CHARACTER SET WIN1252, APELLIDOSI VARCHAR (40) CHARACTER SET WIN1252) RETURNS ( NOMBREO VARCHAR (40) CHARACTER SET WIN1252, APELLIDOSO VARCHAR (40) CHARACTER SET WIN1252, EMAILO VARCHAR (100) CHARACTER SET WIN1252) AS BEGIN /*NOMBRE Y APELLIDOS*/ if ( not (NOMBREI is null and APELLIDOSI is null) ) then begin select NOMBRE, APELLIDOS, EMAIL from personas where NOMBRE like '"%' || :NOMBREI || '%"' and APELLIDOS like '"%' || :APELLIDOSI || '%"' into :NOMBREO, :APELLIDOSO, :EMAILO; suspend; end else begin /*NOMBRE*/ if (not NOMBREI is null) then begin select NOMBRE, APELLIDOS, EMAIL from personas where NOMBRE like '"%' || :NOMBREI || '%"' into :NOMBREO, :APELLIDOSO, :EMAILO; suspend; end /*Fin NOMBRE*/ else begin /*APELLIDOS*/ if (not APELLIDOSI is null) then begin select NOMBRE, APELLIDOS, EMAIL from personas where APELLIDOS like '"%' || :APELLIDOSI || '%"' into :NOMBREO, :APELLIDOSO, :EMAILO; suspend; end /*Fin APELLIDOS*/ else exception SIN_DATOS; end end /*Fin NOMBRE Y APELLIDOS*/ END
Como apenas comienzo a codificar procedimientos quizas esté mal en la sintaxis o algo por el estilo. El error que me manda al abrir la conexión y ejecutar la consulta es este: Cita:
TABLA: Personas NOMBRE varchar(40) APELLIDOS varchar(40) TELEFONO varchar(20) EMAIL varchar(100) Desde ya les doy las gracias por anticipado. |
#10
|
|||
|
|||
Hola, soy yo de nuevo. He resuelto el problema, no como yo lo quisiera pero me ha funcionado hasta que encuentre una solución.
He utilizado un objeto IBQuery y realizado una consulta al procedimiento y listo. Digamos algo así:
Así es como lo he resuelto, pero me gustaría saber si alguien conoce otra forma utilizando el objeto IBStoreProc. Nos leeremos luego... |
#11
|
||||
|
||||
En realidad esta me parece la forma mas adecuada de usar los procedimientos que devuelven un cursor..
Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#12
|
|||
|
|||
Hola cuburu,
Copie tu codigo y lo ejecute con una base que tengo en mi PC. Aqui te mando el codigo de nuevo con unas modificaciones, lo que te paso aqui funciona a la perfeccion.
La unica diferencia es que saco los DataSets que tienes tu y bueno utilizo los MDO para conectarme. Veras que muestro un mensaje, eso es para ver si me entregaba el valor nada mas. En fin, espero que te sirva, no se cual puede ser tu error, pero el ejemplo que te envio funciona. Suerte. Saludos!!!
__________________
La amistad es la union de dos almas para formar una sola. |
#13
|
|||
|
|||
Gracias Ricardojosep, Hare la prueba el fin de semana, debido a que me encuentro trabajando fuera y solo tengo chance de hacerlo en esos días.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Delphi no toma los Registros Modificados de Firebird | Ricardojosep | Firebird e Interbase | 2 | 12-01-2006 15:05:44 |
filtrar datos desde delphi 6 | el_barto | Impresión | 1 | 06-01-2006 17:42:05 |
Acceso a firebird desde Delphi 2005.net | hibero | Firebird e Interbase | 1 | 26-12-2005 16:48:34 |
Con delphi Insert en Firebird varios registros desde otra tabla | lasweb | Conexión con bases de datos | 3 | 04-04-2005 20:58:26 |
Generar una DB en Firebird desde Delphi | RONPABLO | Conexión con bases de datos | 1 | 22-10-2004 09:58:28 |
|