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 04-04-2006
Morphine Morphine is offline
Miembro
 
Registrado: ago 2004
Posts: 28
Poder: 0
Morphine Va por buen camino
No me funciona el when sqlcode ...

Hola estoy trabajando en Interbase 6.5 y he creado este trigger:
Código SQL [-]
SET TERM ^;
CREATE TRIGGER CHECKSTOCK FOR DETALLE_FACTURA_A
ACTIVE BEFORE INSERT POSITION 0
as
declare variable cant integer;
begin
   select (existencia) from articulos where articulo=NEW.ARTICULO into :cant;
   if (NEW.CANTIDAD > cant) then
   begin
      exception STOCK_MINIMO;
   end
   if (NEW.CANTIDAD < cant) then
   begin
      update articulos set existencia = existencia - new.CANTIDAD where articulo=new.articulo;
   end
   WHEN SQLCODE -803 DO
     EXCEPTION REPITE_ART;
end
 ^
SET TERM;^
para una tabla con este formato:

TABLA "DETALLE_FACTURA_A"
"FACTURA_A" INTEGER NOT NULL,
"ARTICULO" INTEGER NOT NULL,
"CANTIDAD" INTEGER,
"DESCUENTO_1" DOUBLE PRECISION,
"DESCUENTO_2" DOUBLE PRECISION,
"SUBTOTAL" DOUBLE PRECISION
CONSTRAINT "PK_DETALLE_FACTURA_A" PRIMARY KEY ("FACTURA_A", "ARTICULO")
donde la clave primaria esta conformada por el campo FACTURA_A Y ARTICULO ambos son atributos de otras tablas (claves foraneas)
El problema es que funciona todo, menos la ultima linea que en teoria tiene que elevar una excepcion cuando repite un articulo en la tabla, no se si es por el momento en que ejecuta el trigger (BEFORE INSERT).
Si alguien tiene idea, gracias.

Última edición por Morphine fecha: 05-04-2006 a las 21:24:59.
Responder Con Cita
  #2  
Antiguo 05-04-2006
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Código:
 if (NEW.CANTIDADthen
Claramente te digo compañero que hay un garrafal error en el código que he remarcado.

Por otro lado no es necesario que metas dentro del "if" erroneo la sentencia "update", pues ya tienes controlada la posible excepción de ruptura de stock.

un saludo.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #3  
Antiguo 05-04-2006
Morphine Morphine is offline
Miembro
 
Registrado: ago 2004
Posts: 28
Poder: 0
Morphine Va por buen camino
Je corregi el error, pero no consigo que me muestre el mensaje que quiero (EXCEPCION REPITE_ART: 'Se ha repetido un item'), por lo que pude leer en otro thread el problema es el siguiente:

"El trigger before insert no puede "cachar" un error que no se ha producido cuando se invoca (el SQL code ocurrirá un instante después, cuando se intente aplicar el registro a la bd). El trigger after tampoco servirá, pues dado que el error ya ocurrió, nunca llega a dispararse.

En general, no podes capturar en el trigger un error que se generará por la inserción del registro en la bd.

¿Por que no capturas el error desde donde está intentando insertarse el registro?".

Lo que no se es como hacer esto, que recomienda el amigo.

Saludos.
Responder Con Cita
  #4  
Antiguo 06-04-2006
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Tienes dos opciones:

a) En el trigger realizas una búsqueda para comprobar si existe ese item y llamas a la excepción

b) Controlas el error en la aplicación cuando la base de datos te devuelva por si sola la excepción.

Ya que la excepción la tienes definida en la BD, yo haría el punto a).

Saludos
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
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
sqlcode Juanito-Kun Firebird e Interbase 7 06-04-2006 12:46:31
usando SQLCODE en procedimiento /trigger ASAPLTDA Firebird e Interbase 1 05-01-2006 14:35:41
shellexecute...no funciona israel_01 API de Windows 3 14-06-2005 22:59:32
CopyFile no funciona en XP mofo C++ Builder 6 08-04-2004 01:11:22
like no funciona ! dmasson Conexión con bases de datos 9 23-03-2004 14:10:50


La franja horaria es GMT +2. Ahora son las 00:17:31.


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