¿Cómo evitar el error "no se puede completar la consulta ... Tamaño máximo de una BD (2GB)"?

Necesito ayuda con una base de datos en Access 2007 que me está dando muchos quebraderos de cabeza.

La base tiene un peso aproximado de 300 MB y una tabla con unos 800.000 registros. El campo id de esta tabla que era autonumérico se ha convertido en numérico (supongo que al compactar y reparar se ha producido el cambio -tengo que hacerlo porque cada dos por tres la base sube de peso hasta 1 GB- y no es la primera vez que algo se me daña en esta operación).

El caso es que necesito volver a tener este campo como autonumérico, manteniendo los id actuales. Mi idea ha sido crear una tabla nueva que inserte todos esos registros ordenados por el id y luego sencillamente crear un nuevo campo id autonumérico. De este modo mantendría los mismos números asociados a cada registro y podría comprobar la corrección de esto revisando la coincidencia entre estos dos campos.

El problema es que Access al tratar de crear este campo autonumérico da el siguiente error:

"No se puede completar la consulta.El resultado de la consulta tiene un tamaño superior al tamaño máximo de una base de datos (2 GB) o no hay espacio temporal suficiente
En el disco para almacenar los resultados".

En las búsquedas que he realizado he visto respuestas aludiendo a que el problema se encuentra en:

- El tamaño de la base, como dice el propio mensaje no puede ser superior a 2 GB. Recomiendan compactar y reparar o cambiar a otro SGBD. Pero mi base compactada pesa 300 MB, con lo que entiendo no es el problema.

- Un número reducido del máximo de bloqueso por archivo de access. Pero hace mucho que tengo cambiado este parámetro en el registro de Windows a 1.000.000 de registros.

Por otro lado, la mención que hace el mensaje de error a espacio temporal en el disco (aquí ya me pierdo un poco), supongo que tampoco es el problema porque mi portatil usa 4 GB de RAM y tiene una decena de GB libres en el disco duro.

Si alguien puede aportarme alguna idea sobre como afrontar el problema, evitando el error o usando otro método para crear el id, le estaría muy agradecido.

3 Respuestas

Respuesta
1

Carlos: El como evitar la anomalía "en ese Fichero", ignoro como hacerlo ya que se ve que has hecho varios ensayos.

Mi sugerencia: Crea una Base de datos en blanco, importa todos los objetos de la BBDD con los problemas. Abre el Editor de VBA y mira que tengas todas las Referencias en la nueva BBDD.

En el Editor >> Depuración>> Compilar...(Nombre BD).

Una vez que no queden fallos de código (si es que los hay), cierra la BBDD nueva, la abres sin ningún objeto abierto (Formulario, Tabla, Consulta,...). Compacta y repara entonces.

Si es que puedes y auenque Access lo admita, esa Tabla de 800.000 registros, la puedes partir en 2 o 3 o .. Tablas haciendo una de Históricos, otra de ...(ignoro su contenido)

Ya comentarás si te ha ido bien. Saludos >> JTJ.

Respuesta
2

Yo no tengo ni por aproximación una tabla con tantos registros, la más grande que haya visto tenía 280.000 registros, pero la verdad es que es raro porque, un campo Autonumérico no deja de ser un campo con tamaño Entero Largo y admite hasta 2 147 483 647, que son muchos registros. Por otro lado, efectivamente, según Microsoft admite hasta 2 gygas, situación fácilmente subsanable, si pones una mitad en otra base, y desde una "solicitas" los datos de la otra.

Pero puedes "fingir" un autonumérico. Vamos a suponer que se llama Orden(tamaño Entero largo). Si los datos los rellenas desde un formulario, en sus propiedades-eventos-Al activar registro crea un procedimiento de evento y entre Private Sub y End Sub pon

if me.newrecord then

Orden=nz(dmax("orden","nombretabla"))+1

end if.

Así, cuando estés en un registro nuevo, mirará el último valor del campo Orden y le suma 1. Lo de nz es por el primero(que no tiene anterior).

¡Gracias! Me has sido muy útil, porque me temo que no podré recurrir al tipo autonumérico y tendré que formularlo de esta manera, tanto en el formulario para registros introducidos a mano, cómo mediante un bucle para registros importados.

Respuesta
1

Muy raro que al compactar haya cambiado de autonumérico a numérico, muy grave, esto indica que su base de datos está dañada. ¿Está trabajando con backend y frontend?.

Personalmente tuve muchos problemas con bases de datos grandes y dejé de utilizar Access como BackEnd. La solución fue pasarme a PostgreSQL y el cambio fue notable, nunca más he tenido problemas y estoy hablando de sistemas multiusuario, donde hay más de 20 personas conectadas al servidor PostgreSQL y con más de 2 millones de registros y 50 y más tablas.

Sino tiene dividida su base datos va a seguir y con graves problemas, hasta que puede llegar el momento en que no podrá consultar su información. Mis recomendaciones son:

1- Divida la base de datos

2- Exporte la tabla de los 800 mil registros a Excel u otro gestor de datos

3- Cree una nueva base de datos e importe todas las tablas, menos la de los 800 mil registros, ésta la importa desde Excel u otro gestor de datos.

4- Cámbiese cuanto antes a PostgreSQL u otro gestor de datos, le recomiendo PostgreSQL porque es gratis y bastante potente, además, si el día de mañana desea pasar la base a otro sistema operativo como linux o aplicativo Web ya ha recorrido mucho, no tendrá que hacer ningún cambio significativo o ajustes menores.

Si no tiene información relevante comprima y envíeme la base de datos a [email protected] a ver que puedo hacer, si no la acepta el correo súbala a un servidor web gratuito hay varios, me gusta WeTransfer.

Le recomiendo hacer una copia de su base de datos. Si algo anda mal de nada le sirve hacer la numeración manual, porque puede seguir el fallo, además el campo autonumérico es muy importante, más cuando las tablas tienen bastantes registros. Dice que al compactar se cambio el campo autonumérico a numérico. Esto puede ser por:

- Virus

- Registro de windows

- Su access esta corrupto.

- Tiene más de una version de Access instalado

Mientras no tenga a mano su base de datos es difícil entrar en más detalles. No queda más que desearle suerte con lo que le recomendaron.

Como última alternativa haga antes una copia de su base de datos e ingrese esta función en un módulo y llámela desde la ventana de inmediato:(Ctrl G).

Se llama AutoNumFix() es de Allen Broune, este es el link.

Microsoft Access tips: Fixing AutoNumbers when Access assigns negatives or duplicates (allenbrowne.com)

Espero le sirva, siempre hay que agotar hasta el último recurso.

Corrijo el nombre del autor es Allen Browne

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas