Repara Access
HomeRepara AccessEsta página

Recuperación extrema de tablas de Access

Cómo recuperar los datos de tablas de MS Access gravemente dañadas, mediante la sustitución de la definición perdida.

David Cimadevilla

22/4/2019

Un archivo accdb o mdb de Access puede dañarse de muchas formas distintas. En algunos casos el archivo se vuelve inservible porque no se puede ni abrir. En otros casos, sólo algunas tablas u objetos se ven afectados.

En este artículo vamos a tratar específicamente un fallo concreto que puede afectar a una o varias tablas: cuando la definición de una tabla se pierde.

La definición, es la estructura de datos que contiene los datos que se editan desde Diseño de tabla. En la definición se guarda toda la información que define la tabla: los campos; con su nombre, tipo y atributos; y también los índices.

Si se ve afectada la definición tenemos, en principio, un caso sin solución. No obstante, vamos a ver a continuación cómo recuperar este tipo de tablas.

Cómo reconocer una tabla con la definición dañada

Cuando este tipo de fallo afecta a una tabla, se vuelve imposible de abrir. Si intentamos abrirla o acceder a la vista diseño, Access devuelve este error:

Error de Microsoft Access: No se reconoce el formato de base de datos

Cuando se pierde la definición la tabla se vuelve inaccesible.

Este error no significa necesariamente que se haya perdido la definición de la tabla. Pero sí es cierto a la inversa: si perdemos la definición de la tabla veremos este error.

En Cómo reparé 28 bases de datos, examinamos varios archivos accdb que devuelven el error No se reconoce el formato de base de datos.

También es relevante este problema en archivos de Access muy deteriorados, como por ejemplo archivos truncados, que requerirán de un herramienta de software para sacar los datos. La mayoría de las herramientas de recuperación de datos no podrán recuperar nada de una tabla que haya perdido la definición.

Cómo es el error internamente

Voy a explicar someramente como se almacenan internamente las tablas y cuál es el problema en este tipo de casos. Llevo muchos años trabajando en recuperación de datos de archivos dañados accdb y mdb, y conozco el formato binario de Access al detalle.

Una tabla se guarda repartida en tres zonas diferenciadas del archivo de Access:

  1. Nombre. Se guarda dentro del índice de objetos, separado del resto de datos de la tabla.

  2. Definición. La definición contiene todos los detalles sobre la tabla y se corresponde con los datos que se editan cuando se abre la vista Diseño de tabla desde Access. Contiene los campos de la tabla con sus nombres y sus tipos. También guarda información sobre los índices de la tabla.

  3. Registros. Se almacenan a lo largo de todo el archivo de base de datos. Si se destruye una parte del archivo accdb o mdb, se perderán sólo los registros que estuvieran en esa parte pero el resto seguirán estando disponibles.

Si se daña el índice, podemos recuperar una tabla sin nombre.

Si se dañan algunos registros, podemos recuperar el resto.

Pero si se pierde la definición, se pierde por completo la tabla, aunque todos los datos de los registros sigan estando "ahí".

Esto es así, porque para poder interpretar cualquier fila de una tabla, se necesita obligatoriamente la definición para decodificar el bloque de datos del registro.

Actualmente, la única forma de recuperar estos datos que conozco es la herramienta AccessFIX con la que se pueden recuperarse parcial o totalmente todos los registros de la tabla. Más adelante hablaré de ello en detalle.

¿Y si reparamos con "Compactar y reparar"?

No lo hagas. Si ya lo has hecho y no tienes una copia de seguridad, habrás perdido definitivamente las tablas afectadas.

Compactar y reparar base de datos "resuelve" el problema eliminando por completo este tipo de tablas... sin previo aviso.

En los siguientes ejemplos voy a usar el archivo corrupt-customers-def.accdb de Cómo reparé 28 bases de datos, un proyecto de investigación con archivos dañados de Access.

Hagamos una prueba con un archivo que tiene dañada la definición de la tabla Customers. Fíjate en las pantallas que siguen y como la tabla desaparece después de aplicar Compactar y reparar.

  1. Antes

    La tabla Customers tiene la definición dañada. Si intentamos abrirla, nos sale el error.

  2. Después

    Después de aplicar Compactar y reparar la tabla no solo desaparece sino que además todos sus datos son definitivamente eliminados del archivo.

Recuperamos con AccessFIX

Vamos a recuperar el mismo archivo del ejemplo anterior con AccessFIX. Fíjate en los pantallazos a continuación.

  1. Así era la tabla antes de dañarse

    La tabla Customers se veía así en Access.

  2. Ahora ni siquiera se puede abrir

    Tras el fallo, cualquier intento de acceder a la tabla provoca el error.

  3. Recuperamos con AccessFIX

    Se recupera la tabla con sus 29 registros, pero nos muestra un triángulo de advertencia en la tabla para indicar que hay un problema.

    AccessFIX es capaz de generar una nueva definición aunque con limitaciones: 1. Los nombres de campo originales se pierden. 2. Sólo se recuperan los campos de texto.

    En la siguiente sección explico una posible solución a esto.

Mejoramos la recuperación

Se puede mejorar mucho el resultado si disponemos de una copia obsoleta de la base de datos. No importa que no tenga registros, o que sea de hace años, mientras contenga una definición idéntica de la misma tabla.

AccessFIX tiene una opción para usar la definición de un archivo externo. El número de registros recuperados será el mismo, pero con todos sus detalles.

Veamos como sería el proceso:

  1. Seleccionamos el archivo externo

    Desde AccessFIX, activamos la recuperación Avanzada y, seleccionamos el archivo dañado. Después, en la opción de sustitución de estructura, seleccionamos la copia antigua. La copia nos aportará la definición que nos falta.

  2. Recuperación mejorada

    Las cosas han mejorado mucho ahora. Ya no aparece el símbolo amarillo de advertencia, se recuperan los nombres de campo, y se recuperan todos los campos, incluidos los que no son de texto, como el campo ID.

  3. La tabla recuperada en Access

    Una vez guardado el archivo desde AccessFIX, tenemos la tabla recuperada al completo.

Conclusiones

Una tabla es irrecuperable, en principio, si se pierden los datos de su definición. Sin embargo, con AccessFIX se pueden recuperar los campos de texto de todos los registros, directamente, con las opciones por defecto.

Adicionalmente, si disponemos de una copia de la base de datos, por antigua que sea, la función de Sustitución de estructura de AccessFIX nos permite recuperar completamente estas tablas.

Más información útil sobre recuperación de datos de Access en nuestro blog Repara Access.