Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Problemas : AOIndex no es un índice de esta tabla
Autor/es:
Sashka [MVP Access]
Pregunta : Cuando intento abrir una base de datos, me aparece el mensaje 'AOIndex no es un índice en esta tabla' y no hay manera de que pueda abrirla. ¿Qué es lo que está pasando?
Respuesta : Lo más probable es que esa base de datos fuera cerrada de manera brusca, como por ejemplo en una caída de tensión o un corte de luz. Seguramente en ese momento ese índice se habría perdido o borrrado.

AOIndex es un índice que existe en la tabla de sistema MSysAccessObjects. No existe documentación oficial sobre lo que esa u otras tablas de sistema hacen, pero parece ser que simplemente llevan la cuenta de los objetos de la base así como de sus características.

Sabiendo esto, podría ser que intentaras abrir cualquier tabla de este tipo y hacer cambios tanto en sus datos como en su diseño. Pero el caso es que Access no te dejará, pues tiene protegidas esas tablas contra el 'cacharreo' constante de los usuarios (mejor así...)

Aún así, para este caso tenemos una solución fácil y que podemos implementar con unas cuantas líneas de código. Se trata de volver a crear de nuevo ese índice. He hecho una rutina cortita para que la podáis utilizar desde un módulo de otra base de datos. Tiene los siguientes

Argumentos

ArgumentoDescripción
DbPathRequerido. Ruta completa de la base de datos a la que le falta el índice 'AOIndex'
Ejemplo de uso:
Call CreateAOIndex("C:\MiBdCorrupta")
Pega este código en un módulo estandar
'---------------------------------------------------------
'
' CreateAOIndex
'
' Código escrito originalmente por Sashka (MVP Access)
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' Este código se brinda por cortesía de
' Sashka (MVP Access)
'
Sub CreateAOIndex(DbPath As String)
Dim db As DAO.Database
Dim idx As DAO.Index

    ' abrimos la base corrupta
    Set db = DBEngine.OpenDatabase(DbPath)
     
    ' creamos de nuevo el índice AOIndex
    With db.TableDefs("MSysAccessObjects")
        Set idx = .CreateIndex("AOindex")
        idx.Fields.Append idx.CreateField("ID")
        idx.Primary = True
        .Indexes.Append idx
        Set idx = Nothing
    End With

    ' cerramos la base (ahora ya no está corrupta)
    db.Close
    Set db = Nothing
     
End Sub
'---------------------------------------------------------
Después de esto deberías poder volver a abrir la base de datos que estaba dando problemas

Ejemplos:

 

Temas relacionados:

 

Última actualización: 25/12/2004