Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] cambio dinamico en campo

Estas en el tema de cambio dinamico en campo en el foro de Mysql en Foros del Web. Hola, espero me puedan ayudar en esta!! Tengo 3 campos en una tabla (mas de 3 pero estos me interesan) 1) Comprado: (con default 'n') ...
  #1 (permalink)  
Antiguo 24/02/2013, 12:07
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
cambio dinamico en campo

Hola, espero me puedan ayudar en esta!!

Tengo 3 campos en una tabla (mas de 3 pero estos me interesan)

1) Comprado: (con default 'n')
2) Recepcionado : (con default 'n')
3) fecha_cierre : (con timestamp)

La idea que depende de lo que pase en mi programa, en algún momento cambiare los valores en 'comprado' y 'recepcionado' a 's' con update.

Habra alguna forma de activar en timestamp del fecha_cierre cuando los valores de comprado y recepcionado sean = 's' ?????
  #2 (permalink)  
Antiguo 24/02/2013, 12:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cambio dinamico en campo

TRIGGERs: MySQL Reference Manual:: 13.1.15. CREATE TRIGGER Syntax
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/02/2013, 15:33
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

Me lo imaginaba, pero en la universidad me dijeron que los evitara... ¿por que sera?
En fin el trigger que busco es algo asi:

Código MySQL:
Ver original
  1. CREATE TRIGGER cierra  BEFORE INSERT ON tabla1
  2.     UPDATE tabla1 SET fecha_cierre = NOW() WHERE comprado = 's' and recepcionado = 's';
  3.   END;

Me imagino que esta correcto, pero mi pregunta es que si se puede colocar AFTER en vez de BEFORE?
  #4 (permalink)  
Antiguo 26/02/2013, 20:36
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

yaya, averigue mas y al final hago este script pero no me funciona

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3.     UPDATE Solicitud SET fecha_cierre = NOW() WHERE comprado = 's' AND recepcionado = 's';
  4.   END
  5. $$

Bueno y en la tabla fecha_cierre esta creada con tipo de dato timestamp y aceptando null con default null, es decir al ingresar un registro queda null esperando un update donde recepcionado = 's' y comprado = 's', pero me tira error al crear el trigger, alguno me puede ayudar??
  #5 (permalink)  
Antiguo 27/02/2013, 06:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cambio dinamico en campo

Por dos razones:
1) No puedes hacer operaciones ABM en un trigger sobre la misma tabla que dispara el trigger, o sobre otras tablas que disparen triggers con operaciones de ese tipo en la misma.
2) Los registros que se operan en un trigger se acceden con dos pseudovariables: NEW y OLD.
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3.     IF NEW.comprado = 's' AND NEW.recepcionado = 's' THEN
  4.         SET NEW.fecha_cierre = NOW() WHERE ;
  5.     END IF;
  6.   END$$
  7.  
  8. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/02/2013, 19:21
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

Lo intente asi y me da el siguiente error:

# 1362 - Updating of NEW row is not allowed in after trigger

tambien trate de varias un poco el codigo, suponiendo que tambien necesitaba dicernir que el campo donde se queria agregar el timestamp estaba vacio:

Código MySQL:
Ver original
  1.     IF NEW.comprado = 's' AND NEW.recepcionado = 's' and NEW.fecha_cierre IS NULL THEN
  2.         SET NEW.fecha_cierre = NOW();
  3.     END IF;
  4.   END

Y nada me da el mismo error :(
  #7 (permalink)  
Antiguo 28/02/2013, 19:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cambio dinamico en campo

Cita:
# 1362 - Updating of NEW row is not allowed in after trigger
Bueno, se cae de cajón: Te está diciendo que actualizar un valor de NEW no es posible en un trigger AFTER, por lo que sólo se puede hacer en uno BEFORE...
Código MySQL:
Ver original
  1. CREATE TRIGGER `cierra` BEFORE UPDATE ON Solicitud
  2.     IF NEW.comprado = 's' AND NEW.recepcionado = 's' AND NEW.fecha_cierre IS NULL THEN
  3.         SET NEW.fecha_cierre = NOW();
  4.     END IF;
  5.   END

En este ambiente es necesario poder leer inglés, aunque más no sea como comprensión de textos. Sino es lo mismo que estar ciego.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 28/02/2013, 19:52
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

pero a mi no me sirve un before por que no tendria sentido antes del update verificar eso... supuestamente al recibir el ultimo valor s en recepcionado por ejemplo ahi cerraria la solicitud y necesito capturar la fecha en ese momento.... con un before lo haria despues del siguiente update
  #9 (permalink)  
Antiguo 03/03/2013, 11:45
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

En serio nadie puede ayudarme.... voy a tener que hacerlo con consultas en php, seran varias pero hara lo que quiero, gracias
  #10 (permalink)  
Antiguo 03/03/2013, 11:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cambio dinamico en campo

Cita:
con un before lo haria despues del siguiente update
cuando dices esto, estoy viendo que no has entendido el funcionamiento de los TRIGGERs.
El BEFORE no significa en el siguiente UPDATE, sino luego de haber actualizado el registro y antes de devolver el resultado de la operación exitosa, es decir, antes de darlo por terminado.
En serio, deberías leer mejor el manual...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 04/03/2013, 19:56
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: cambio dinamico en campo

Gracias.... estudiare mas... funciona tal cual dijiste!!

Etiquetas: campo, campos, dinamico, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:50.