Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Trigger y Update (https://www.clubdelphi.com/foros/showthread.php?t=66509)

mjjj 24-02-2010 00:18:17

Trigger y Update
 
Hola gente, una consulta.

Necesito un Trigger que al modificar un registro y siempre se que cumplan ciertas condiciones agregue un en un campo autoincremental el nunero correspondiente.

Código SQL [-]
AS
begin
IF (new.empresa = 1 and new.f_b = 'B' and new.imagen = '1') THEN
    NEW.NIMAGEN = GEN_ID(DETRENDICION_a,1);
IF (NEW.empresa = 2 and (NEW.f_b = 'B')) THEN
    NEW.NIMAGEN = GEN_ID(DETRENDICION_b,1);

el problema es que en el campo autoincremental (nimagen), si ingresa el valor aunque no se cumplan las restricciones.

Esta bien escrito este trigger... es de tipo before update.

Gracias

movorack 24-02-2010 00:41:44

que motor usas???

mjjj 24-02-2010 06:17:23

Firebird 2.0

mjjj 24-02-2010 15:11:10

Voy a tratar de explicar esto con un poco mas de detalle.

Utilizo Firebird 2.0, y necesito un trigger que se dispare al momento de modificar una la detrendiciones, expecificamente el campo imagen: Varchar (1).

Algunos otros campos de importancia dentro de la tabla estan:

nren : Integer
ncorr: Integer
usuario: String
f_b: char (1)

Desde la aplicación se modifica el registro con esta sentencia.

Código SQL [-]
update detrendiciones set imagen =:imagen
where nren =:nren and ncorr =:ncorr and f_B =:f_B

Ahora bien, el trigger debe modificar el campo NImagen: Integer, autoincrementado por un generador, el mismo numero para todos los registros que cumplan con las condiciones de los campos usuario, nren, f_b y ncorr, asociado a la modificación por parte de la aplicación.

Se puede hacer esto?
Espero que ahora se entienda mi consulta.

Saludos

ContraVeneno 24-02-2010 16:30:59

Según veo, estas haciendo una revisión del tipo "Si esto se cumple, haz el update"; tienes que considerar que la instrucción "update" ya la tienes definida y es está la que ejecuta el disparador, vamos, que ya la tienes.

Lo que tendrías que hacer, es una revisión del tipo: "Si esto no se cumple, no hagas nada y te sales" y en el "te sales", entonces cancelas (rollback) la instrucción "update" que intentabas realizar.

Código:

trigger begin
 if Dato No Valido begin
  RollBack
  Mensaje Error
  Return //salirse del trigger
 end 
 
 Update tabla
 campo = valor

end



La franja horaria es GMT +2. Ahora son las 23:59:57.

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