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 24-02-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 24-02-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
que motor usas???
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 24-02-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Firebird 2.0
Responder Con Cita
  #4  
Antiguo 24-02-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 24-02-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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
__________________

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
Que es el update 3? Debo descargar el update 3? Nicomaco Varios 4 23-04-2009 00:53:24
deadlock update conflict with concurrent update! JuanErasmo Firebird e Interbase 6 10-07-2008 20:58:10
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
UPDATE con seccion llamada UPDATE sql's MyDAC karlaoax SQL 4 25-04-2007 22:10:50
Trigger Before (Insert,update,delete)? estebanx MS SQL Server 2 25-05-2006 15:58:19


La franja horaria es GMT +2. Ahora son las 01:47:22.


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