Problema
Ms Access permite compactar y reparar automáticamente nuestra base de datos al cerrarla. Aunque así nos aseguramos de compactar la base de datos regularmente, esta opción presenta ciertas limitaciones. La principal es que incrementa el tiempo que tarda en cerrarse la base de datos. Además, si ésta es de gran tamaño y entramos en ella frecuentemente la acción es aún más lenta y redundante.
Solución
En lugar de compactar y reparar cada vez que salgamos de la base de datos, programamos Access para que compacte y repare nuestra base de datos cada cierto tiempo.
- Creamos la siguiente función en un módulo.
- Creamos una macro que ejecute la función.
- Guardamos la macro como Autoexec para que se ejecute automáticamente al abrir la base de datos.
' Benjamín Martín-Palanco Public Function Compactar() Dim fs As Object, f As Object, s As String Dim i As Date, j As Date Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile(CurrentDb.Name) i = f.DateLastModified j = Now - i Set fs = Nothing: Set f = Nothing If j > 8 / 24 Then ' Cada 8 horas. 1 = 24 horas. Application.SetOption "Auto compact", True Else Application.SetOption "Auto compact", False End If End Function
Notas
Creamos una función que se ejecutará automáticamente cada vez que abramos la base de datos. Ésta comprobará si hemos sobrepasado el tiempo definido. En caso afirmativo compactará al cerrar, en caso negativo nos permitirá salir sin compactar.
- Utilizamos FileSystemObject (FSO) para acceder a la propiedad última fecha de modificación (DateLastModified) de la base de datos actual (CurrentDb.Name). Restamos la fecha actual de la fecha de última modificación y si es mayor que el tiempo especificado —ochos horas en nuestro ejemplo— activará la opción compactar al cerrar con Application.SetOption "Auto compact".
- Al nombrar como Autoexec la macro que ejecuta la función, nos aseguramos de que al abrir la base de datos se ejecute automáticamente. En este caso no será necesario cerrar y volver a abrir la base de datos para que la opción tenga efecto, lo que sucedería si seleccionamos manualmente dicha opción en la base de datos actual. Si deseamos que al abrir la base de datos la macro no se ejecute, mantenemos presionada la tecla MAYÚS.
Referencias
No hay comentarios:
Publicar un comentario