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

Bitacoras

Estas en el tema de Bitacoras en el foro de Bases de Datos General en Foros del Web. Buenas tardes mi problema es al hacer una bitacora me salio bien pero no como yo quiero, bueno tengo una tabla donde registro usuarios que ...
  #1 (permalink)  
Antiguo 18/02/2015, 17:41
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Bitacoras

Buenas tardes
mi problema es al hacer una bitacora me salio bien pero no como yo quiero,
bueno tengo una tabla donde registro usuarios que pueden entrar a una aplicacion web y quiero que el campo user de mi tabla bitacora se guarde el usuario que se loggea en la aplicacion no el de mysql. pero al momento de jalar el id_usuario para saber quien realizo algun moviemiento en la base mi aplicacion web truena y no realiza el insert y en la tabla bitacora tampoco me manda nada

Codigo de la tabla que funciono pero no es lo que necesito

Código SQL:
Ver original
  1. DROP TABLE IF EXISTS `rastreo`;
  2.  
  3. CREATE TABLE `rastreo` (
  4.   `id_ras` INT(11) NOT NULL AUTO_INCREMENT,
  5.   `operacion` VARCHAR(30) DEFAULT NULL,
  6.   `usuario` VARCHAR(50) DEFAULT NULL,
  7.   `host` VARCHAR(50) DEFAULT NULL,
  8.   `modificado` datetime DEFAULT NULL,
  9.   `tabla` VARCHAR(50) NOT NULL,
  10.   PRIMARY KEY(`id_ras`)
  11. );

Codigo del trigger que funciono pero no es lo que necesito

Código MySQL:
Ver original
  1. DROP TRIGGER IF EXISTS `bitacora`;
  2. DELIMITER //
  3. CREATE TRIGGER `bitacora` AFTER INSERT ON convenios
  4. FOR EACH ROW INSERT INTO rastreo(host, user, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “convenios”)
  5. //DELIMITER
  6. ;

Codigo de la tabla que me ocaciono el error en la aplicacion

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS `rastreo`;
  2.  
  3. CREATE TABLE `rastreo` (
  4.   `id_ras` int(11) NOT NULL AUTO_INCREMENT,
  5.   `operacion` varchar(30) DEFAULT null,
  6.   `usuario` varchar(50) DEFAULT null,
  7.   `host` varchar(50) DEFAULT null,
  8.   `modificado` datetime DEFAULT null,
  9.   `tabla` varchar(50) NOT NULL,
  10.   'user.id_usuario int not null
  11.  PRIMARY KEY(`id_ras`)
  12. );

Codigo del trigger que me ocaciono el error

Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS `bitacora`;
  2. DELIMITER //
  3. CREATE TRIGGER `bitacora` AFTER INSERT ON convenios
  4. FOR EACH ROW INSERT INTO rastreo(host, USER, operacion, modificado, tabla, USER.id_usuario) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “convenios”)
  5. //DELIMITER ;

y el error no recuerdo que me dice por que elimine mi tabla rastreo y mi trigger y me registra todo bien pero no me hace la bitacora


gracias saludos
__________________
"Las piedras me las quito caminando y las pedradas tambien"

Última edición por gnzsoloyo; 18/02/2015 a las 19:11
  #2 (permalink)  
Antiguo 18/02/2015, 19:14
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, 4 meses
Puntos: 2658
Respuesta: Bitacoras

Por supuesto que te va a dar error la creación de la tabla...
¿Qué se supone que es esto?:
Código MySQL:
Ver original
  1. 'user.id_usuario int not null
Si es un intento de hacer una FK, está completamente mal escrito, y encima le pones un apostrofe al inicio, rompiendo completamente la sintaxis...

En el segundo caso, también tienes errores, porque se te están filtrando caracteres de Windows donde deberían existir otros, como por ejemplo las comillas tipográficas (“), acentos graves (`) donde van apóstrofos ('), y algunos otros etcéteras.
Te recomiendo no escribir código para MySQL como no sea en una interfaz adecuada.
Bajate de la web oficial el MySQL Workbench y usalo.
Luego volvamos aprobar.

Por cierto, usa los Highlight cuando quieras poner codigo en estos foros. Para eso están.
__________________
¿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 19/02/2015, 09:36
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Bitacoras

no me da error en la creacion de la tabla me da error a nivel aplicacion pero gracias por el punto de vista y lo hago yo desde cero no ocupo nada grafico
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #4 (permalink)  
Antiguo 19/02/2015, 11:18
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, 4 meses
Puntos: 2658
Respuesta: Bitacoras

Cita:
Iniciado por Lugo100 Ver Mensaje
no me da error en la creacion de la tabla me da error a nivel aplicacion
Dejame que lo dude...
Esto no puede correr sin generar un error de sintaxis:
Código MySQL:
Ver original
  1. CREATE TABLE `rastreo` (
  2.   `id_ras` int(11) NOT NULL AUTO_INCREMENT,
  3.   `operacion` varchar(30) DEFAULT null,
  4.   `usuario` varchar(50) DEFAULT null,
  5.   `host` varchar(50) DEFAULT null,
  6.   `modificado` datetime DEFAULT null,
  7.   `tabla` varchar(50) NOT NULL,
  8.   'user.id_usuario int not null
  9.  PRIMARY KEY(`id_ras`)
  10. );

Literalmente:
Cita:
Error

Parece haber un error en su consulta de SQL. La salida generada por el servidor de MySQL, de existir, aparece abajo, en cuyo caso puede ayudar a diagnosticar el problema.

Código MySQL:
Ver original
  1. ERROR: Comillas sin cerrar @ 361
  2. STR: '
  3. CREATE TABLE `rastreo` (
  4.  `id_ras` int(11) NOT NULL AUTO_INCREMENT,
  5.  `operacion` varchar(30) DEFAULT null,
  6.  `usuario` varchar(50) DEFAULT null,
  7.  `host` varchar(50) DEFAULT null,
  8.  `modificado` datetime DEFAULT null,
  9.  `tabla` varchar(50) NOT NULL,
  10.  'user.id_usuario int not null
  11.   PRIMARY KEY(`id_ras`)
  12. );

consulta SQL:

Código MySQL:
Ver original
  1. CREATE TABLE `rastreo` ( `id_ras` int(11) NOT NULL AUTO_INCREMENT, `operacion` varchar(30) DEFAULT null, `usuario` varchar(50) DEFAULT null, `host` varchar(50) DEFAULT null, `modificado` datetime DEFAULT null, `tabla` varchar(50) NOT NULL, 'user.id_usuario int not null PRIMARY KEY(`id_ras`) );
  2.  
  3. MySQL ha dicho: Documentación
  4. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user.id_usuario int not null
  5.  PRIMARY KEY(`id_ras`)
  6. )' at line 8
y si quito la comilla:
Código MySQL:
Ver original
  1. Error
  2.  
  3. consulta SQL:
  4.  
  5. CREATE TABLE `rastreo` (
  6.   `id_ras` int(11) NOT NULL AUTO_INCREMENT,
  7.   `operacion` varchar(30) DEFAULT null,
  8.   `usuario` varchar(50) DEFAULT null,
  9.   `host` varchar(50) DEFAULT null,
  10.   `modificado` datetime DEFAULT null,
  11.   `tabla` varchar(50) NOT NULL,
  12.   'user.id_usuario' int not null
  13.   PRIMARY KEY(`id_ras`)
  14. )
  15.  
  16. MySQL ha dicho: Documentación
  17. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user.id_usuario' int not null
  18.   PRIMARY KEY(`id_ras`)
  19. )' at line 8

Así que NO, no es posible que ese CREATE TABLE te esté funcionando...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/02/2015, 13:54
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Bitacoras

Código SQL:
Ver original
  1. CREATE TABLE rastreo (id_rastrea INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_usuario INT NOT NULL, operacion VARCHAR(30), usuario VARCHAR(30), host VARCHAR(30), modificado datetime, tabla VARCHAR(30), FOREIGN KEY(id_usuario) REFERENCES USER(id_usuario));


pues este es el codigo de la tabla ya mejorado para que se entienda mejor
ahora quisiera saber como jalar el usuario de mi id_usuario en el trigger para que mi bitacora sea como la requiero
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #6 (permalink)  
Antiguo 19/02/2015, 14:24
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, 4 meses
Puntos: 2658
Respuesta: Bitacoras

Código MySQL:
Ver original
  1. CREATE TABLE rastreo (
  2.     id_usuario INT NOT NULL,
  3.     operacion VARCHAR(30),
  4.     usuario VARCHAR(30),
  5.     host VARCHAR(30),
  6.     modificado datetime,
  7.     tabla VARCHAR(30),
  8.     FOREIGN KEY(id_usuario) REFERENCES USER(id_usuario)
  9.     );

Eso es otra cosa...

Ahra bien, cuando mencionas el TRIGGER, asumiendo que se trata de este código:
Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS `bitacora`;
  2. DELIMITER $$
  3. CREATE TRIGGER `bitacora` AFTER INSERT ON convenios
  4. FOR EACH ROW INSERT INTO rastreo(host, USER, operacion, modificado, tabla, USER.id_usuario)
  5. VALUES (SUBSTRING(USER(), (INSTR(USER(),'@')+1)), SUBSTRING(USER(), 1, (instr(USER(),'@')-1)), 'INSERTAR', NOW(), 'convenios')$$
  6. DELIMITER ;
lo que habría que ver es si en la tabla "CONVENIOS" tienes una columna dedicada al "ID_USUARIO".
Entendamos que un TRIGGER sólo recibe como datos de entrada, aquellos datos que se insertan/actualizan en la propia tabla del TRIGGER, por lo que no puede tomar parámetros externos.
Esto quiere decir que si la tabla donde está definido el trigger no incluye una columna donde en ese momento estés insertando el id_usuario, ese dato simplemente no existe para el trigger.
No puedo saber si lo tienes o no porque no estás posteando la estructura de ESA tabla.

¿Existe ese dato y lo insertas desde la aplicación?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/02/2015, 16:23
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Bitacoras

no tengo la tabla ningun campo de id_usuario, por eso es que se hacela llave foranea para sacar el id_usuario de la tabla usuario

Código:
que hay de nuevo viejo?
enviando los datos al Dao
DAW insertaDocumento: Column count doesn't match value count at row 1
Documento insertado-1
DAW consultaFolio: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
Mandar a llamar los datos al Dao
este es el error que me manda la aplicacion llevo mucho batallando con ese requerimiento
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #8 (permalink)  
Antiguo 19/02/2015, 16:39
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, 4 meses
Puntos: 2658
Respuesta: Bitacoras

La base de datos nunca puede obtener automágicamente ese dato. No puede adivinar cual es y sin algún dato para consultar no lo obtendrás.
El sentido de un FK no es que la base se ocupe de ese dato, sino proteger la integridad referencial de la información.
El tipo de tarea que pretendes no se logra con triggers, sino en todo caso con stored procedures.

Por su lado, el error obtenido es porque en el INSERT estas enviando menos datos que los campos de la tabla, asumo que porque no mandas ese id del usuario, creyendo que la base sabe que poner, cosa que ya dije, la base no hace.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/02/2015, 16:48
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Bitacoras

ok le intentare con stored procedure a ver que resulta cualquier problema lo posteo aqui
__________________
"Las piedras me las quito caminando y las pedradas tambien"

Etiquetas: mysql, registro, 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:56.