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 | Argumento | Descripción | | DbPath | Requerido. 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: |