Tabla modificada ?


([N4] Ramon Denuc) #1

Hola Foro,

¿Cómo puedo saber si una tabla ha sido modificada?

Lo necesito saber para poder evitar que si una tabla en concreto no ha sido modificada, un proceso que tengo no entre en un bucle innecesariamente, ya que si la tabla esta igual que hace un instante, para que entrar, no?

Saludos


([N1] wikan) #2

Podrías usar un campo tiempo o fecha y hora separados, como mejor lo veas. Y actualizarlos en el trigger anterior a modificación.
En tu proceso guarda una marca de tiempo para saber si debes usar el registro o no.


([N1] Manuel,Cabrera) #3

Hola Ramón.

Si he entendido correctamente el problema, la solución es fácil.
Crea un campo booleano que se inicialice con valor 1.
En un triger anterior a la modificación pones el booleano a 1.
Crea un índice condicionado por el campo booleano = 1.

El proceso llama a la tabla por el índice condicionado, todos los registros que te encuentres son altas o han sido modificados. Solo tienes que modificar el campo booleano = 0.

Evidentemente necesitas un truquito para que no se te vuelva a disparar el triguer. Para eso crea una variable en global en memoria, SIN_TRIGER = 0. Cuando lances el proceso, pones la variable gobal a 1 y cuando termine lo pones a 0.
En el triger lo primero que debes tener es una if SIN_TRIGER = 1, finalizar proceso.

Solucionado ?


([N4] Ramon Denuc) #4

Hola y gracias,

Entendido todo, por lo que veo no creo que a Velneo tuviera mucha dificultad en tener un comando al estilo ¿Ha cambiado … para facilitarnos el trabajo en algunas tareas a los programados , y así programar con Velneo fuese más Life is soft, no?

Saludos


([N4] Ramon Denuc) #5

Hola y gracias,

Entendido todo, por lo que veo no creo que a Velneo tuviera mucha dificultad en tener un comando al estilo ¿Ha cambiado … para facilitarnos el trabajo en algunas tareas a los programadores , y así programar con Velneo fuese más Life is soft, no?

Saludos


([N3] pacosatu) #6

Hola Ramón.

Una tercera opción.

  • Si solo necesitas saber si la tabla ha sido modificada, crea una tabla externa Log en la que vayas guardando, desde los triggers, la fecha/hora de la última modificación (Añadir/Modificar/Borrar).
  • El proceso ya solo tiene que leer ese Log para determinar si debe o no ejecutar el bucle

Saludos
Paco Satué


([N4] Ramon Denuc) #7

Hola y gracias,

Entendido todo, por lo que veo no creo que a Velneo tuviera mucha dificultad en tener un comando al estilo ¿Ha cambiado … para facilitarnos el trabajo en algunas tareas a los programadores , y así programar con Velneo seria aun más Life is soft, no?

Saludos


([N1] wikan) #8

Rizando la solución de Paco.

Si esa tabla usa una maestra de configuración o empresa, podrías poner una puntero al último registro usando los campos que te indicao en la anterior respuesta. Te haría lo que comenta Paco, pero sin añadir tabla extra, solo un campo.


([N3] pacosatu) #9

Hola Ramón.

No tiene sentido que Velneo nos diga si una tabla ha cambiado, ya que siempre nos diría que Sí.
Quizás una solución, pero creo que no fructificaría, es que pudiéramos leer el registro de transacciones del vServer.

Preguntar si algo ha cambiado en una base de datos solo tiene sentido dentro de una transacción, en la que conocemos exactamente el momento de inicio de dicha transacción.

No pienses que las tablas del vServer son ficheros normales del disco duro, es más complicado.

Saludos
Paco Satué


([N1] Manuel,Cabrera) #10

Eso de tener un log decente de la base de datos, serie la leche, pero me parece que pides mucho.

La solución que he aportado parece un poco engorrosa, pero es muy práctica para muchas cosas y evita que cada vez que tengas que pasar el proceso debas preguntar en cada registro por la fecha. Si la tabla es pequeña lo de las fechas vale, pero cuando crecen empiezan las tonterías, sobre todo si tienes que abrir en lectura escritura.

Saludos.


([N4] Ramon Denuc) #11

Hola Foro,

Al final he creado una tabla externa a la tabla que quiero controlar, y en ella voy actualizando en que fecha y hora alguien ha actualizado la tabla a controlar, eso lo hago en el trigger anterior a modificación de la tabla a controlar. Hasta ahora funciona bien, gracias por las aportaciones. :wink:

Saludos