Compacta.vbs

 

'**************************************************************************************************
'* Si esta cerrada, repara y compacta la base de datos pasada como argumento ( el nombre no debe tener espacios en blanco)
'*
'* uso: en el evento al cerrar del formulario principal de la base de datos se insertan las siquientes instrucciones
'* Private Sub Form_Close()
'*
'* Dim strRuta As String, _
'* strArchivo As String, _
'* strCadena As String
'*
'* strArchivo = CurrentDb.Name
'* strRuta = Ruta(strArchivo)
'*
'* If MsgBox("¿Estás seguro de que quieres cerrar la aplicación?", vbOKCancel + vbExclamation, "ATENCION") = vbOK Then
'*
'*        strCadena = "Wscript " & strRuta & "\Compacta.vbs " & strArchivo
'*        Shell strCadena
'*
'*        Application.Quit
'* End If
'* End Sub ' Form_Close
'*
'* ESH 04/06/03 10:20
'**************************************************************************************************

Dim strArchivo, _
       strArchivoCorto, _
       strArchivoZip, _
       strArchivoZipCorto, _
       strRuta, _
       objDBEngine, _
       strTemporal, _
       fso, _
       objArgumentos

' creo objetos
Set objArgumentos = WScript.Arguments
Set objDBEngine = CreateObject("DAO.DBEngine.35")
Set WshShell = WScript.CreateObject("WScript.Shell")

' espero un poquito, a que se cierre la base de datos
WScript.Sleep 2500

' obtengo el archivo pasado como argumento
strArchivo = objArgumentos(0)

' reparo la base de datos
objDBEngine.RepairDatabase strArchivo

MsgBox "La base de datos " & strArchivo & " ha sido reparada con exito", vbInformation + VbOKOnly

Set fso = CreateObject("Scripting.FileSystemObject")

' creo en el directorio temporal por defecto, una base de datos temporal utilizando un número aleatorio.
' la base de datos se compactará sobre esta temporal

Randomize
strTemporal = fso.GetSpecialFolder(2) & "\TempDB" & _
Int((999 * Rnd) + 1) & ".mdb"

' compacto la base de datos en la temporal
objDBEngine.CompactDatabase strArchivo, strTemporal
' si la compactación finaliza correctamente, elimino la base de datos original y renombro la temporal
fso.DeleteFile strArchivo
fso.MoveFile strTemporal, strArchivo

MsgBox "La base de datos " & strArchivo & " ha sido compactada con exito", vbInformation + VbOKOnly

' cierro objetos
Set objDBEngine = Nothing
Set fso = Nothing