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 15-10-2008
CLUSTERBIT CLUSTERBIT is offline
Miembro
 
Registrado: oct 2008
Posts: 14
Poder: 0
CLUSTERBIT Va por buen camino
Smile ayuda porfavor!!

hola bueno me presento soy nuevo en el foro y tengo una consulta que me tiene aflijido

tengo que hacer un trigger que mande los datos de una tabla que se ingresan o se modifiquen de cada campo en otro campo de otra tabla
solo espero un ejemplo lo que sea

espero me ayuden

los felisito por el foro
Responder Con Cita
  #2  
Antiguo 16-10-2008
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
Bienvenido !!!

Ante todo, tómate un tiempo para leer la Guia de Estilo. En ella verás que "Ayuda Por Favor" no nos cuenta nada de tu problema y no ayuda en las búsquedas.

También deberías especificar para qué motor de base de datos necesitas el trigger.

Si es Firebird, necesitarás dos triggers : uno para insertar y otro para la modificación.

Código SQL [-]
CREATE TRIGGER TABLA_BI0 FOR TABLA BEFORE INSERT
AS
BEGIN
   INSERT INTO SEGUNDA_TABLA(CAMPO_EN_SEGUNDA_TABLA) VALUES (NEW.CAMPO);
END
Responder Con Cita
  #3  
Antiguo 16-10-2008
CLUSTERBIT CLUSTERBIT is offline
Miembro
 
Registrado: oct 2008
Posts: 14
Poder: 0
CLUSTERBIT Va por buen camino
hola duilioisola bueno disculpas no lo sabia jejeje...
bueno gracias por responder a mi demanda

todo esto lo tengo que hacer en mysql
y esto es lo que hice

CREATE TRIGGER prueba AFTER INSERT ON td_persona
FOR EACH ROW
BEGIN
INSERT INTO ts_auditoria(pers_id,perf_id,audi_ip,audi_fecha,audi_tabla,audi_campo,audi_valor_anterior,audi_valor _actual) VALUES((SELECT MAX(pers_id) AS pers_id FROM td_persona),(SELECT MAX(inst_id) AS inst_id FROM td_persona),1,(SELECT (DATE_FORMAT(CURDATE(),'%d/%m/%y')))',1,1,1,1);
END;

ahora mi problema es que los campos que tienen un 1 no se como podria extraer los registros de la tabla td_persona y enviarlos a esos campos que me faltan de la tabla ts_auditoria

saludos
Responder Con Cita
  #4  
Antiguo 16-10-2008
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
No conozco MySQL, pero se que es parecido.

Dentro de un Trigger puedes ver el valor de los campos de la tabla precediendolos con "NEW." .

Supongamos que TD_PERSONA tiene los campos pres_id, nombre,direccion,telefono,...

El trigger quedaría más o menos así:
Código SQL [-]
CREATE TRIGGER prueba AFTER INSERT ON td_persona
FOR EACH ROW
BEGIN
   INSERT INTO ts_auditoria(pers_id,nombre,direccion)
   VALUES(NEW.pers_id,NEW.nombre,NEW.direccion);
END;
Responder Con Cita
  #5  
Antiguo 16-10-2008
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
Esto está MUY mal:

Código SQL [-]
INSERT INTO ts_auditoria(pers_id,perf_id,audi_ip,audi_fecha,audi_tabla,audi_campo,audi_valor_anterior,audi_valor _actual) VALUES((SELECT MAX(pers_id) AS pers_id FROM td_persona),

Debes reemplazarlo por NEW.ID_PERSONA.
El problema es que el máximo de ID_PERSONA no necesariamente será el ID_PERSONA del registro que estás insertando.
Lo mismo con INST_ID. Puede que estés insertando una "Instancia" y que otro haya insertado una posterior y estarías mezclando información.
Responder Con Cita
  #6  
Antiguo 16-10-2008
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
Los campos de la tabla que ves en los trigger precedidos por NEW. o por OLD. son los campos del registro actual..
(Por lo menos en Firebird)

El prefijo NEW, lo verás en los triggers de Insert y Update.
El prefijo OLD, lo verás en los triggers de Update y Delete.

Un ejemplo es poder saber si ha cambiado algo.

Código SQL [-]
TRIGGER UPDATE
BEGIN
   IF (NEW.PRECIO<>OLD.PRECIO) THEN
   BEGIN
      /* Recalculo comisiones... */
      /* ... */ 
   END
END
Responder Con Cita
  #7  
Antiguo 16-10-2008
CLUSTERBIT CLUSTERBIT is offline
Miembro
 
Registrado: oct 2008
Posts: 14
Poder: 0
CLUSTERBIT Va por buen camino
jejeje... perdon si tenia un despelote es que recien estoy aprendiendo esto de consultas de base de datos

hare la prueba y te cuento como me fue muchisimas gracias duilioisola
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
Ayuda porfavor fenixjes Conexión con bases de datos 14 09-08-2007 01:05:45
Ayuda PorFavor¡¡¡¡ JKM Gráficos 5 21-06-2006 15:58:06
Una Ayuda Porfavor!! JerS Varios 2 17-08-2005 20:07:06
una ayuda porfavor! Ryu Internet 3 15-04-2005 23:09:43
Ayuda Porfavor MasterOzzy Varios 2 25-11-2003 16:14:15


La franja horaria es GMT +2. Ahora son las 00:50:11.


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