2015-01-26

Compactar y reparar Access cada cierto tiempo

Title

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.

  1. Creamos la siguiente función en un módulo.
  2. ' 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
    
    
  3. Creamos una macro que ejecute la función.
  4. Guardamos la macro como Autoexec para que se ejecute automáticamente al abrir la base de datos.

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

Nube de datos