Cómo recuperar objetos desaparecidos de una base de datos de Access
22/4/2019
Tablas, formularios, Visual Basic y otros datos perdidos, pueden seguir aún en una base de datos de Access, ocultos, en forma de objetos huérfanos.
En ocasiones, una base de datos de MS Access puede ocultar en su interior datos que son completamente inaccesibles pero que aún podrían ser recuperables.
Se trata de tablas, formularios, informes o módulos de Visual Basic, desconectados de la base de datos, pero que aún "flotan" en el algún lugar del archivo.
Yo los llamo objetos huérfanos y este artículo trata sobre como recuperarlos.
¿Qué es un objeto huérfano?
Son datos aislados de una tabla, formulario, informe o pieza de Visual Basic.
Los objetos huérfanos están disociados de la estructura de la base de datos. Son los restos de un estado anterior.
Casos en que se generan objetos huérfanos:
Se ha borrado una tabla, formulario, informe o módulo Visual Basic.
Aunque ya no está en el índice de la base de datos, los datos son recuperables durante un tiempo.
Un objeto se ha dañado y se ha vuelto inaccesible, con o sin error.
Aunque la estructura de datos es inconsistente, los restos del objeto podrían seguir en el archivo, aunque inaccesibles.
Un archivo accdb o mdb de Access está parcialmente destruido y se han perdido los datos del índice.
Sin los datos del índice es problemático reconstruir los objetos, incluso con una herramienta de recuperación de datos.
Una base de datos de Access mantiene internamente un índice, una lista con todos los objetos que podemos ver en el panel de navegación, más otros tantos del sistema que se mantienen ocultos.
Cada una de las entradas en este índice contiene el nombre del objeto y un enlace apuntando a su contenido. El contenido de los objetos se almacena aparte, guardado en diferentes zonas del archivo accdb o mdb.
¡Atención!, los objetos huérfanos son frágiles
Como están en zonas del archivo marcadas como vacías y disponibles, estos espacios podrían ser rellenados en cualquier momento con nuevos datos, destruyéndose así estos objetos.
Aunque no añadas ni edites nada, se pueden perder objetos huérfanos. Por ejemplo, Access, durante la ejecución de una consulta, puede crear tablas temporales y remplazar y destruir nuestros datos ocultos.
Si tu tabla, formulario o código de Visual Basic, se ha vuelto inaccesible, es recomendable hacer una copia del archivo cuanto antes, para preservar este tipo de datos.
¿Compactar y reparar?
Desde el punto de vista de Microsoft Access, y de la herramienta Compactar y reparar, los objetos huérfanos no existen.
Access los entiende llanamente como espacio libre y, por tanto, no puede acceder a este tipo de datos.
Ejemplo de recuperación de huérfanos
Veamos con recuperar los objetos huérfanos con la herramienta AccessFIX.
Para ello, vamos a usar un archivo accdb del proyecto Cómo reparé 28 bases de datos dañadas con el índice de objetos totalmente destruido.
No se puede abrir la base de datos
Al intentar abrir el archivo accdb, Access nos devuelve este curioso error que nada tiene que ver con el problema.
Tras aceptar, el archivo accdb no se abre y Access salta a la página de inicio.
Recuperamos con AccessFIX
A pesar de no existir el índice, AccessFIX es capaz de reucuperar tablas, formularios, informes y módulos.
No se pueden recuperar ni consultas y ni macros.
Tablas
Se recuperan todas las tablas pero sin el índice no hay forma de recuperar sus nombres. Las tablas sólo se pueden reconocer por su contenido: por ejemplo, Tabla recuperarda 14 es la tabla Customers.
Formularios e informes
También formularios e informes se recuperan pero, al igual que con las tablas, los nombres se pierden. Por su contenido sabemos, por ejemplo, que Recovered form 7 es el formulario Customer Details.
Visual Basic
Se recuperan todos los módulos y también el Visual Basic asociado a formularios e informes. En este caso, AccessFIX puede recuperar los nombres a partir de los propios datos del módulo, sin necesidad del índice.
En formularios e informes con Visual Basic no conoceremos el nombre del objeto en sí, pero sí lo sabremos para su Visual Basic asociado. En estos casos, AccessFIX crea formularios e informes vacíos con el nombre original del objeto donde alojar el Visual Basic recuperado. El usuario podrá trasladar manualmente este Visual Basic hasta su correspondiente formulario sin nombre.
Tablas huérfanas sin definición
Las tablas huérfanas recuperadas, en algunos casos, podrían haber perdido también su definición.
En estos casos, la vista previa de AccessFIX mostrará un triángulo de advertencia. Estas recuperaciones se pueden mejorar si se dispone de un archivo accdb o mdb con el que sustituir la definición de la tabla.
Una tabla huérfana sin definición se ve así en AccessFIX:
Conclusiones
Llamamos objetos huérfanos a aquellas tablas, formularios, informes o modulos de Visual Basic que han quedado desconectados de la estructura principal de la base de datos pero que aún pueden recuperarse.
Si has probado otras herramientas de recuperación de Access y no han encontrado nada, antes de rendirte prueba AccessFIX por si acaso hubiera objetos huérfanos en tu archivo.
Más información sobre recuperación de datos de Access y reparación de archivos dañados accdb o mdb en nuestro blog ACCDB Crash Help.