Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2008
Gabichu Gabichu is offline
Miembro
 
Registrado: jul 2008
Posts: 10
Poder: 0
Gabichu Va por buen camino
Question Procedimiento almacenado ejecutado desde un trigger.

hola a todos...
tengo el siguiente procedimiento AGREGAR_PENDIENTE , realmente no estoy segura de que tenga la estructura correcta, se ejecuta sin problemas desde un trigger, la cuestion es que se ejecuta la linea del insert sin importar si se cumple o no la condicion del if
Código SQL [-]
CREATE PROCEDURE AGREGAR_PENDIENTE (
    COD_PRESUP INTEGER)
AS
DECLARE VARIABLE CODCLIENTE INTEGER;
DECLARE VARIABLE FECHA DATE;
DECLARE VARIABLE CLIENTE VARCHAR(150);
DECLARE VARIABLE CODPRESUP INTEGER;
DECLARE VARIABLE CANTIDAD INTEGER;
begin
  /*Insertar fecha, cod_cliente, cliente, cod_presupuesto */
  select count(pendientes.cod_presup) from pendientes where pendientes.cod_presup=:codpresup into :cantidad;
  if (:cantidad=0) then
  begin
       for
         select presupuestos.cod_presup, presupuestos.cod_cliente,clientes.nombre||' '||clientes.apellido AS CLIENTE,fecha
             from presupuestos, CLIENTES
                where presupuestos.cod_presup=:cod_presup AND PRESUPUESTOS.cod_cliente=CLIENTES.cod_cliente into :CODpresup, :codcliente, :cliente,:fecha
       do
       begin
            insert into pendientes(cod_cliente,FECHA_AT,cliente,cod_presup) values(:codcliente,:fecha, :cliente,:codpresup);
        end
    end

end

cualquier sugerencia es bienvenida...
este es el trigger
Código SQL [-]
CREATE TRIGGER AU_PRESUPUESTO FOR PRESUPUESTOS
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (old.deposito='SI') then
  execute procedure AGREGAR_PENDIENTE(old.cod_presup);
end

La idea es que si en la tabla PRESUPUESTOS el campo deposito (que puede tener dos valores, 'SI' y 'NO') cambia de NO a SI entonces se debe insertar un nuevo campo en la tabla PENDIENTES, el problema es que por cada vez que modifico la tabla de PRESUPUESTOS se inserta un nuevo registro en la tabla PENDIENTES, por lo tanto si modifico cualquier campo de la tabla presupuestos 10 veces, voy a tener 10 nuevos registros en PENDIENTES..

Espero no haberlos mareado, por favor ayudenme a resolver esto!!!
gracias...

Última edición por Gabichu fecha: 30-09-2008 a las 17:42:31. Razón: para que sea mas comprensible
Responder Con Cita
  #2  
Antiguo 30-09-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Prueba haciendo esto:

Código SQL [-]
if ((cantidad = 0) or (cantidad is null)) then
  /* Ejecutas el insert */


Saludos...
Responder Con Cita
  #3  
Antiguo 30-09-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Esque la variable :codpresup siempre tiene valor NULL cuando haces el primer "select", debido a que no le estas pasando ningun valor, para mi que estas un poco "confundida" por el parecido del nombre de la variable :codpresup con el parametro de entrada :cod_presup, por lo que la cosa en teoria debería quedar de la siguiente manera:

Código SQL [-]
CREATE PROCEDURE AGREGAR_PENDIENTE (
    COD_PRESUP INTEGER)
AS
DECLARE VARIABLE CODCLIENTE INTEGER;
DECLARE VARIABLE FECHA DATE;
DECLARE VARIABLE CLIENTE VARCHAR(150);
DECLARE VARIABLE CODPRESUP INTEGER;
DECLARE VARIABLE CANTIDAD INTEGER;
begin
  /*Insertar fecha, cod_cliente, cliente, cod_presupuesto */
  select count(pendientes.cod_presup) from pendientes where pendientes.cod_presup=:COD_PRESUP into :cantidad;
  if (:cantidad=0) then
  begin
       for
         select presupuestos.cod_presup, presupuestos.cod_cliente,clientes.nombre||' '||clientes.apellido AS CLIENTE,fecha
             from presupuestos, CLIENTES
                where presupuestos.cod_presup=:cod_presup AND PRESUPUESTOS.cod_cliente=CLIENTES.cod_cliente into :CODpresup, :codcliente, :cliente,:fecha
       do
       begin
            insert into pendientes(cod_cliente,FECHA_AT,cliente,cod_presup) values(:codcliente,:fecha, :cliente,:codpresup);
        end
    end
end
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 30-09-2008
Gabichu Gabichu is offline
Miembro
 
Registrado: jul 2008
Posts: 10
Poder: 0
Gabichu Va por buen camino
Gracias!!! Me causa gracia pensar que perdi tanto tiempo probando tantas cosas y el problema era tan sencillo de solucionar..

Aca esta el procedimiento y funciona correctamente!!!!

Código SQL [-]
begin
  /*Insertar fecha, cod_cliente, cliente, cod_presupuesto */
  select count(pendientes.cod_presup) from pendientes where pendientes.cod_presup=:cod_presup into :cantidad;
  if (:cantidad=0 or (:cantidad is NULL) ) then
  begin
       for
         select presupuestos.cod_presup, presupuestos.cod_cliente,clientes.nombre||' '||clientes.apellido AS CLIENTE,fecha
             from presupuestos, CLIENTES
                where presupuestos.cod_presup=:cod_presup AND PRESUPUESTOS.cod_cliente=CLIENTES.cod_cliente into :CODpresup, :codcliente, :cliente,:fecha
       do
       begin
            insert into pendientes(cod_cliente,FECHA_AT,cliente,cod_presup) values(:codcliente,:fecha, :cliente,:codpresup);
        end
    end

end

Última edición por Gabichu fecha: 30-09-2008 a las 18:52:33. Razón: error de sintaxis
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Procedimiento almacenado desde Delphi hmv MS SQL Server 6 06-01-2010 23:02:05
llamando Procedimiento Almacenado desde Delphi jjaen26 MySQL 2 15-08-2007 02:53:26
insertar desde un procedimiento almacenado Gabriel2 Firebird e Interbase 5 28-10-2005 17:48:29
Desactivar trigger desde procedimiento almacenado oliverinf Firebird e Interbase 5 09-10-2004 16:17:45
Ejecutar Procedimiento Almacenado en Trigger AGAG4 SQL 16 21-09-2004 03:27:47


La franja horaria es GMT +2. Ahora son las 22:13:03.


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