Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Ejecutar Procedimiento Almacenado en Trigger

Uso FireBird 1.50
Como se ejecuta un Procedimiento Almacenado en un Trigger, lo que pasa es que le quiero pasar un valor a un campo Antes de Insertar y Guardar un Registro, mediante un Procedimiento Almacenado que tengo, le paso como parámetros de Entrada la Sucursal y el Cliente y tengo como parámetro de Salida el Indice por ejemplo:
Código SQL [-]
 new.indice=execute procedure dame_indice_dpromociones(New.sucursal,new.cliente);
me marca en error en execute y si se lo quito no me reconoce la palabra reservada "Procedure".. Agradezco cuanlquier comentario.
Responder Con Cita
  #2  
Antiguo 18-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Si el procedure devuelve un valor, recuperalo en un select.

Código SQL [-]
select indice
  from dame_indice(:valor1, :valor2)
 into :indice;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 18-09-2004 a las 02:25:53.
Responder Con Cita
  #3  
Antiguo 18-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
oki

Gracias Sr. Juan Antonio Castillo Hernández, así me funcionó, pero me sucede algo raro, lo que me pasa es que este Trigger se Dispará antes de que el dbGrid Graba en el Detalle, pero No me devuelve ningun valor, y si lo ejecuto a traves del Componente ibStoreProcedure, mandandole los parámetros del Pro. Alamcenado si me devuelve el Parámetro. De antemano Muchas Gracias.
Responder Con Cita
  #4  
Antiguo 18-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
No entendí bien tu planteamiento... lo que se decirte es que el trigger es totalmente independiente de cualquier dbgrid y cosas similares. Se disparará justo antes (before) o depues (after) de la insercion (insert), actualizacion (update) o borrado (delete) de un registro en el servidor de la base de datos.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 18-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Pruebalo de esta forma :

execute procedure dame_indice_dpromociones(new.sucursal, new.cliente) returning_values new.indice;

NOTA: Lo he escrito de memória, si no funciona, consulta la sintaxis de execute procedure, en la documentación de Firebird (aunque creo que es correcta).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 18-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
oki

Gracias Sr. Juan Antonio Castillo Hernández, ya se que un trigger se ejecuta antes de después de Insertar, Actualizar y Borrar, pero no se porque no se ejecuta cuando en el dbGrid "AUTOMATICAMENTE" ejecuta el POST de la Tabla(IbDataset) en donde en el ModifiSQL tengo un "UPDATE ......", ya le cambie a todos los estados al Trigger pero no me devuelve ningun valor, pero si mando a llamar el ibStoreProccedure en el "BeforePost" del IbDataset mandandole los parámetros de Entrada, si me devuelve el parámetro de Salida.

En el BeforePost del IbDataset tengo esto:
Código:
   tDPromocionSUCURSAL.value:=SucursalProm;
   tDPromocionCLIENTE.value:=ClienteProm;
Antes de que el dbGrid Guarde el Registro Ejecuta esto para añadirlo a la Llave Primaria, pero el Trigger no me devuelve nada, me marca que el Campo INDICE no tiene ningun valor para Guardar, este campo forma parte de la llave Primaria del Detalle, pero si pongo en este mismo evento un ibStoreProccedure si me devuelve el INDICE.

Ya lo probe como también me dice Sr. Marc Guillot, no me marca error en el Trigger pero también no me devuelve el ningún valor. No se que estaré haciendo mal, ó bien supuestamente en el dbGrid porque si al agregar un Nuevo registro "ACTUALIZA AUTOMATICAMENTE" el registro anterior y no se Dispará el Trigger. De antemano Gracias por sus Respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:20:51.


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
Copyright 1996-2007 Club Delphi