La propiedad Data Access Objects (DAO) LastUpdated devuelve fechas y horas incorrectas en la base de datos de Microsoft Access

Avanzado: Requiere conocimientos expertos de codificación, interoperabilidad y multiusuario. Este artículo solo se aplica a una base de datos de Microsoft Access (.mdb).

Síntomas

La propiedad Data Access Objects (DAO) LastUpdated devuelve fechas y horas incorrectas para formularios, informes, macros y módulos de Microsoft Access.

Causa

Microsoft Access no notifica al motor de base de datos Microsoft Jet sobre la modificación de objetos específicos de Access (formularios, informes, macros y módulos); Por lo tanto, la columna DateUpdate de la tabla MSysObjects nunca se actualiza a la fecha y hora correctas. El mismo comportamiento es cierto para Microsoft Access 2007, que usa el Motor de base de datos de Microsoft Access.

Estado

Microsoft ha confirmado que este es un problema en los productos Microsoft que aparecen enumerados al principio de este artículo.

Más información

La propiedad LastUpdated proporcionada por DAO devuelve la fecha y hora correctas para los objetos del motor de base de datos (tablas, consultas y relaciones), pero solo devuelve la fecha de creación, no la última fecha de modificación para los objetos específicos de Microsoft Access (formularios, informes, macros y módulos). Antes de Microsoft Access 2000, Microsoft Access usaba un archivo de base de datos Jet (.mdb) para almacenar tanto objetos de base de datos (tablas, consultas y relaciones), como los objetos específicos de Microsoft Access (formularios, informes, macros y módulos). Microsoft Access almacenó sus objetos específicos en tablas del sistema Jet, específicamente las tablas MSysObjects y MSysModules (o MSysModules2). La columna DateUpdate de la tabla MSysObjects es responsable de almacenar la última fecha de modificación de un objeto y es la columna que la propiedad DAO LastUpdated utiliza para devolver la última fecha de modificación de un objeto. Cuando un usuario modifica y guarda un objeto en versiones anteriores, Microsoft Access notificó al motor de base de datos Jet que el objeto se había modificado y Jet actualizó la columna DateUpdate a la fecha y hora actuales. Microsoft Access 2000 introdujo archivos de proyecto de Access (.adp), que tienen la capacidad de conectarse directamente a bases de datos de Microsoft SQL Server sin usar el motor de base de datos Jet. Dado que los archivos ADP no utilizan el motor de base de datos Jet (o el motor de base de datos de access), Access no pudo utilizar el mismo formato de almacenamiento utilizado anteriormente en las bases de datos Jet para objetos específicos de Access. Tenía que almacenarlos en un nuevo formato de almacenamiento de documentos OLE al que se puede acceder tanto en bases de datos Jet como en proyectos de Access. Cuando el usuario crea inicialmente un nuevo objeto específico de Microsoft Access, como un formulario), el motor de base de datos sigue escribiendo la fecha y hora actuales en las columnas DateCreate y DateUpdate de la tabla MSysObjects. Sin embargo, cuando el usuario modifica y guarda el objeto, Microsoft Access no notifica al motor de base de datos; por lo tanto, la columna DateUpdate siempre permanece igual. Además, es posible que haya observado que la ventana Base de datos (en versiones anteriores a Access 2007) y el Panel de navegación de Access 2007 o Access 2010 muestran la fecha y hora correctas para la última modificación de un objeto. Esto se debe a que Microsoft Access utiliza su propio mecanismo interno para almacenar la fecha de creación y la fecha de modificación, independientemente del motor de base de datos. Desafortunadamente, Microsoft Access no expone esta información en su modelo de objetos; por lo tanto, no hay ninguna forma programática de obtener esta información en Microsoft Access.

Pasos para reproducir el comportamiento

  1. Inicie Microsoft Access y, a continuación, cree una nueva base de datos en blanco.

  2. Cree un nuevo formulario en blanco en la vista Diseño.

  3. Agregue un cuadro de texto al formulario.

  4. Guarde el formulario como frmLastUpdatedy, a continuación, ciérrelo.

  5. En Access 2003 y versiones anteriores de Access, seleccione el menú Ver y haga clic en Detalles. En Access 2007 o Access 2010, haga clic con el botón derecho en el encabezado Categoría del Panel de navegación de la izquierda y haga clic en Ver por detalles. Esto muestra las fechas Modificadas y Creadas para cada objeto. Tenga en cuenta que las columnas Modified y Created para el formulario frmLastUpdated se establecen en la misma fecha y hora.

  6. Presione CTRL+G para abrir la ventana Inmediato en el Editor de Visual Basic. (En Access 2007 o Access 2010, primero debe habilitar el contenido o la base de datos debe estar en una ubicación de confianza.)

  7. Escriba la línea siguiente en la ventana Inmediato y, a continuación, presione ENTRAR:

    ?CurrentDb.Containers("Forms").Documents("frmLastUpdated").LastUpdated

    Tenga en cuenta que la fecha y hora devueltas corresponde a las columnas Modificado y Creado en la ventana Base de datos.

  8. Presione ALT+F11 para volver a Microsoft Access.

  9. Abra el formulario frmLastUpdated en la vista Diseño.

  10. Agregue un segundo cuadro de texto al formulario y, a continuación, guárdelo y ciérrelo. Tenga en cuenta que la columna Modificado de la ventana Base de datos contiene una fecha y hora actualizadas para el formulario.

  11. Repita los pasos 7 y 8.

Nota La propiedad LastUpdated sigue deformando la fecha y hora originales en lugar de la nueva fecha y hora que se muestran en la columna Modificado de la ventana Base de datos.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¿Cómo de satisfecho está con la calidad de la traducción?

¿Qué ha afectado a tu experiencia?

¿Algún comentario adicional? (Opcional)

¡Gracias por sus comentarios!

×