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 25-03-2014
mantraxer21 mantraxer21 is offline
Miembro
 
Registrado: ago 2010
Posts: 94
Poder: 14
mantraxer21 Va por buen camino
Trigger de calculo Stock Firebird

Estiamdos :

Tengo el siguiente Trigger en Firebird 2.5.

Código SQL [-]
SET TERM ^ ;



CREATE OR ALTER TRIGGER STOCK_MATERIALES FOR PRESTAMOS
ACTIVE AFTER INSERT POSITION 0
AS
begin
  /* Trigger text */

  update libros set libros.cantidad_lib = -1 *(select sum(prestamos.cantidad_material1)
  from prestamos where prestamos.id_material1 = new.id_material1)
  where libros.idlibro = new.id_material1;
end
^


SET TERM ; ^

Los campos de la tabla Libros son:

Código SQL [-]
    IDLIBRO          INTEGER NOT NULL,
    IDAUTOR          INTEGER,
    ISBN_LIB         VARCHAR(25),
    TITULO_LIB       VARCHAR(50),
    IDTEMATICA       INTEGER,
    CANTIDAD_LIB     INTEGER,
    CANTIDAD_MINIMA  INTEGER,
    ANIO_LIB         VARCHAR(4),
    REGISTRO_LIB     DATE DEFAULT 'NOW',
    IDIOMA_LIB       INTEGER,
    IDUBICACION      INTEGER,
    PAGINAS          INTEGER

Campos de la tabla préstamos son:

Código SQL [-]
    IDPRESTAMO          INTEGER NOT NULL,
    ID_ALUMNO           INTEGER,
    ID_DOCENTE          INTEGER,
    FECHA_PRESTAMO      DATE,
    ID_MATERIAL1        INTEGER, // libro o material 1
    ID_MATERIAL2        INTEGER, // libro o material 2
    ID_MATERIAL3        INTEGER, // libro o material 3
    FECHA_DEVOLUCION1   DATE,
    FECHA_DEVOLUCION2   DATE,
    FECHA_DEVOLUCION3   DATE,
    CANTIDAD_MATERIAL1  INTEGER, // unidades a solicitar de material 1
    CANTIDAD_MATERIAL2  INTEGER, // unidades a solicitar de material 2
    CANTIDAD_MATERIAL3  INTEGER // unidades a solicitar de material 3

Pero por ejemplo en el campo "CANTIDAD_LIB" de la tabla libros tengo asignado un stock de prueba "200", pero al momento de hacer INSERT sobre la Tabla préstamos, me muestra "-120" registros en el campo "CANTIDAD_LIB" de la tabla Libros.

Alguien una ayuda?
Responder Con Cita
  #2  
Antiguo 26-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué datos tienen esas tablas?, haces un sum(cantidad_material) ¿es correcto la cantidad que hay?
Responder Con Cita
  #3  
Antiguo 26-03-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Parece ser que siempre que insertas un registro en PRESTAMOS le restas todas las cantidades de los registros que se correspondan con ese material.
Solo deberías restarle el del registro que estás insrtando:

Código SQL [-]
CREATE OR ALTER TRIGGER STOCK_MATERIALES FOR PRESTAMOS
ACTIVE AFTER INSERT POSITION 0
AS
begin
  /*
  Esto devuelve la suma de todos los préstamos, no solo del de este registro
  select sum(cantidad_material1) from prestamos where id_material1 = new.id_material1

  update libros
  set cantidad_lib = -1 *(select sum(cantidad_material1) from prestamos where id_material1 = new.id_material1)
  where idlibro = new.id_material1;
  */

  update libros 
  set cantidad_lib = cantidad_lib - new.cantidad_material1
  where idlibro = new.id_material1;
end
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
Trigger en Firebird Antoniov Conexión con bases de datos 5 21-09-2011 19:13:56
Trigger Firebird tec Firebird e Interbase 3 04-10-2010 21:46:43
Importar datos de hoja de calculo excel a firebird 1.5 day_eli Conexión con bases de datos 1 07-02-2007 20:02:28
Error Calculo FIREBIRD 1.5.2.4731 ASAPLTDA Firebird e Interbase 1 10-01-2006 21:55:26
Calculo por medio de un trigger.... ? uper Tablas planas 2 18-11-2005 00:08:39


La franja horaria es GMT +2. Ahora son las 09:35: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