Crear un historial cuando yo cambie un dato del registro de una tabla

Julián disculpa que te moleste tanto, lo hago porque me agrada que tu eres un miembro de este foro que siempre coloca imágenes y código de muestra cuando respondes y así demuestras que lo hiciste en tu casa y que lo que compartes funciona.

Tengo una inquietud la cual te la planteo, Tengo una base de datos con la tabla Empleados (nombre, apellido, dirección, teléfono, correo, etc), pero los datos cambian de vez en cuando (se mudó de dirección, cambió número de celular, otros), yo quiero mantener un respaldo de los datos anteriores en la base de datos y agregar los nuevos datos. ¿Cómo podría hacer eso en una tabla histórico con la fecha de modificación? ¿Y si tengo una tabla de usuarios también quiero conocer que usuario fue el que realizó la actualización en los datos de registro? ...

1 respuesta

Respuesta
1

Lo puedes hacer de muchas formas. El problema es que tu sabes lo que quieres y yo tengo que imaginarlo. ¿Te refieres a que te guarde todo el registro de un empleado y también el registro donde hayas cambiado un campo? Me imagino que te refieres a que te guarde constancia de lo que se cambió. Si es eso, supongamos que tengo una tabla Copia, donde el campo IdCliente es numérico( no autonumérico)

Supongamos también que tengo un formulario Clientes, donde aunque no se vea está el campo Idcliente)

Fíjate en el Idcliente4 Around the Horn, le voy a cambiar el nombre por el tuyo

Cuando pulso Enter, la tabla Copia me queda

Es decir, el ahora cliente con IdCliente 4 antes era Around ... y como tengo el idcliente puede saber a quien corresponde ahora

En el formulario, el código del evento En Datos no guardados del cuadro de texto NombreCliente es

Private Sub NombreCliente_Dirty(Cancel As Integer)
If Not Me.NewRecord Then
DoCmd.RunSQL "insert into copia(idcliente,fecha,nombrecliente)values(idcliente,date(),nombrecliente)"
End If
End Sub

Le pongo lo de If... para que si das de alta un nuevo cliente no crea que es una modificación y lo lleve a la tabla Copia.

Con respecto a lo de saber quien efectuó el cambio es muy sencillo si tienes un formulario de identificación de los usuarios que entran a la base.

Por eso y para no tener que estar escribiendo mucho aquí, te propongo que si quieres, repito, si quieres, mándame un mensaje, sólo el mensaje, a [email protected] y te mando un ejemplo completo.

Si lo haces, en el asunto del mensaje pon tu alias Argenis, ya que si no sé quien me escribe ni los abro.

¡Gracias! Como siempre muy rápida tu respuesta. Tengo 3 tablas: empleados (idempleado,  nombre, dirección, teléfono, situación), histórico_empleados (idhistorico, idempleado, nombre, dirección, teléfono,situación, idusuario), usarios (idusuario, usuario).

Supongamos que tenemos los usuarios ( 1, Juan, 2, Omar, 3, Pablo) y que el usuario 2 crea un nuevo registro, lo que necesito es que al crear un nuevo registro en la tabla empleados (1, Piedroo Perez, Balencia, 98904130, contratado) también me lo cree en la tabla histórico_empleados y me diga que usuario lo creó (1, 1, Piedroo Perez, Balencia, 98904130, contratado, 2)

Luego el registro lo modificó el usuario Pablo(idusuario 3). Necesito que al modificar un registro de empleados (1, Pedro Perez, Valencia, 98904130, despedido) haga un nuevo registro en la tabla histórico_empleados  (2, 1, Pedro Perez, Valencia, 98904130, despedido, 3)

Vamos a ver si me explico( por eso te decía lo del ejemplo, pero..., tengo una tabla Usuarios con, entre otros

Usuario=Pepe

Contraseña=111

Tengo un formulario de inicio donde escribo el usuario, la contraseña y compruebo que valen

En este caso es correcta y primero me pasa a la tabla Registro

Porque siempre está bien saber quien entró, el día y la hora por si hace un desperfecto poder "liquidarlo".

Como en el formulario de inicio acertó se abre el formulario Clientes, donde hay un mensaje de saludo y un cuadro de texto oculto llamado Usuario, que busca en la tabla Registro, el último que ha entrado(lógico)

Y voy dando de alta los clientes. Vamos a suponer que un día determinado, decido despedir a Julián, algo que no me parece lógico porque soy un buen trabajador Buaaaa, Buaaaa

El código de los diferentes eventos del formulario Clientes es

Private Sub Estado_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
DoCmd. RunSQL "insert into historico(fecha, nombrecliente, ciudad, estado, creadopor)values(date(), nombrecliente, ciudad, estado, usuario)"
End Sub
Private Sub Form_DataSetChange()
If Not Me.NewRecord Then
DoCmd. RunSQL "insert into historico(fecha, nombrecliente, ciudad, estado, creadopor)values(date(), nombrecliente, ciudad, estado, usuario)"
End If
End Sub
Private Sub Form_Load()
Usuario = DLast("usuario", "registro")
Saludo = "Bienvenido, Srº(Srª) " & Usuario
End Sub

Muchas gracias Julián, Me haz salvado la vida. Haz sido de mucho apoyo en un proyecto personal que estoy realizando.  Te agradezco el compartir tus conocimientos y atender mis molestias

Julián nuevamente te agradezco las molestias que te tomas en atenderme. Ya estoy por terminar el pequeño proyecto que estoy realizando.

Te comento que hice un pequeño cambio.

He creado una nueva tabla que se llama teléfonos y he creado un subformulario teléfonos y lo agregué al formulario Empleados.

Mi pregunta es como hago para guardar en la Tabla Copia los datos que ingreso en ese subformulario.

Espero me puedas apoyar con tus oportunas respuestas como lo haz hecho en cada una de mis preguntas

Pero, en el subformulario los únicos datos interesantes son Telefono e Idempleado, y como supongo que el formulario y el subformulario están relacionados por Idempleado, en el momento que escribas un teléfono, en Idempleado te pondrá el mismo valor que figura en el formulario. Por tanto, en el evento Después de actualizar del cuadro de texto Telefono puedes crear un procedimiento de evento y poner

Docmd. Setwarnings false (para evitar la ventana de "Va a añadir ...")

Docmd.runsql"insert into copia(CampoA,Campob)values(telefono,idempleado)"

Lo de campoa y campob son los nombres de los campos de la tabla Copia donde quieres guardar el telefono y el idempleado

La pregunta no admite más respuestas

Más respuestas relacionadas