Public Sub CompactarBaseDeDatos(ByVal sRutaDb As String, Optional ByVal sPassword As String)
' Compactar una base de datos con ADO
Dim sDBTmp As String
Dim je As JRO.JetEngine
Dim CadenaConexion1 As String
Dim CadenaConexion2 As String
On Error GoTo ErrCompactar
Set je = New JRO.JetEngine
' Cerrar la conexión y recordset actual,(08/Oct/01)
' ya que tiene que estar abierto en modo exclusivo
gDB.Close
' Crear un nombre "medio" aleatorio
sDBTmp = "DBT_" & Format$(Minute(Now), "00") & Format$(Second(Now), "00") & ".mdb"
' Asegurarnos de que no existe una base con el nombre temporal
If Len(Dir$(sDBTmp)) Then
Kill sDBTmp
End If
CadenaConexion1 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sRutaDb & ";"
If Len(sPassword) Then
CadenaConexion1 = CadenaConexion1 & "Jet OLEDB:Database Password=" & sPassword & ";"
End If
CadenaConexion2 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDBTmp & ";"
If Len(sPassword) Then
CadenaConexion2 = CadenaConexion2 & "Jet OLEDB:Database Password=" & sPassword & ";"
End If
' Compactar la base de datos
je.CompactDatabase CadenaConexion1, CadenaConexion2
' Eliminar la base de datos original
Kill sRutaDb
'
' Renombrar la base temporal con el original
Name sDBTmp As sRutaDb
CompactarSalir:
Call InicializarDatos(sRutaDb, glbPassDB)
Exit Sub
'
ErrCompactar:
' Mostrar el mensaje de error
MsgBox "Error al compactar la base de datos:" & vbCrLf & _
Err.Number & " " & Err.Description, _
vbExclamation, "Error al compactar la base de datos"
Err.Clear
Resume CompactarSalir
End Sub