Fecha de modificación de campo en access

Tengo una base de datos en acces 2007 con varios formularios y registros, necesito saber en qué fecha se modifica un campo; He buscado y solo encuentro la forma para establecer la modificación del registro, pero lo que yo necesito es la fecha de modificación de un campo de ese registro. En la base que tengo un registro se consulta varias veces pero en cada oportunidad se modifica un campo diferente, esa fecha es la que necesito establecer para luego sacar un informe. Muchas gracias señores todoexpertos por la ayuda que al respecto me puedan brindar.

2 respuestas

Respuesta
2

Camilo: A no ser que en algun sitio, tu lleves un control de modificaciones de cada Campo de la Tabla, me temo que no vas a poder saber si en dicha Tabla modificaste un Campo u otro,. Lo que si puedes saber es la "Ultima Modificación". No creo que Access tenga un control interno así, aunque mis conocimientos tienen límites.

Si quieres conocer Datos de los Objetos de tu Bd, haz lo siguiente:

1.- Abre una Consulta Nueva en vista de Diseño sin ninguna Tabla.

2.- Ponla en Vista >>SQL Vista SQL (botón derecho del Mouse y elige esa opción)

3.- Si hay algo escrito como SELECT... Lo borras y

4.- Copias lo siguiente.

SELECT IIf([Type]=1,"Tabla",IIf([Type]=6,"Tabla Vinculada",IIf([Type]=5,"Consulta",IIf([Type]=-32768,"Formulario",IIf([Type]=-32764,"Informe",IIf([Type]=-32766,"Modulo",IIf([Type]=-32761,"Modulo","Desconocido"))))))) AS TipoObjeto, MSysObjects.Name AS NombreObj, MSysObjects.DateCreate AS FechaCrea, MSysObjects.DateUpdate AS FechaModif, DateDiff("d",[DateCreate],Now()) AS AntigCreaD, DateDiff("d",[DateUpdate],Now()) AS AntigModifD, MSysObjects.Type, IIf([TipoObjeto]="Tabla",BitsLaTabla([NombreObj]),0) AS BitsTabla
FROM MSysObjects
WHERE (((MSysObjects.Type) In (1,5,6,-32768,-32764,-32766,-32761)) AND ((Left([Name],1))<>"~") AND ((Left([Name],2))<>"f_") AND ((Left([Name],4))<>"MSys"))
ORDER BY IIf([Type]=1,"Tabla",IIf([Type]=6,"Tabla Vinculada",IIf([Type]=5,"Consulta",IIf([Type]=-32768,"Formulario",IIf([Type]=-32764,"Informe",IIf([Type]=-32766,"Modulo",IIf([Type]=-32761,"Modulo","Desconocido"))))))), MSysObjects.Name;

Si todo ha ido bien tendrás algo así:

Un saludo >> Jacinto

Camilo: Se me ha olvidado comentarte la Función que calcula los Bits de cada Tabla, que es llamada desde la Consulta que te he enviado:

Function BitsLaTabla(NombreTabla As String)
Dim Tabla As Object
Dim dbs As Database
Dim TblDef As TableDef
Dim FLDSrc As Object
Dim NRegistros, NCampos, TamañoCampos, ListaCampos
Set dbs = CurrentDb
Set TblDef = dbs.TableDefs(NombreTabla)
For Each FLDSrc In TblDef.Fields
        NCampos = NCampos + 1
        TamañoCampos = TamañoCampos + FLDSrc.Size      
Next
For Each Tabla In CurrentDb.TableDefs
        If Tabla.Name = NombreTabla Then
            NRegistros = Tabla.RecordCount             
        End If
Next
BitsLaTabla = TamañoCampos * NRegistros
End Function

Un saludo >> Jacinto

Respuesta
2

También tienes otra forma. Puedes crear una tabla Modificaciones con, por ejemplo, IdMod(Autonumérico), Campo(texto) y FechaMod

En vista diseño del formulario, en el cuadro de texto, por ejemplo NombreContacto, en sus propiedades-eventos-Después de actualizar pon

DoCmd.SetWarnings False
DoCmd.RunSQL "insert into modificaciones(campo,fecha)values('" & Me. NombreContacto.Name & "',date())"

Así, si abren el formulario y no modifican NombreContacto no pasa nada, pero si le cambia al mensos una letra, te lo guarda en la tabla Modificaciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas