Hola!
Esta es mi rutina original, a ver si alguien me dice q es lo mas conveniente, si cambiar la rutina o me como puedo solucionar el error, lo q hago es q cuando se conecta y descubre q la base esta defectuosa, tomo el error y lo mando a esta rutina con la orden de q compacte. GRACIAS. Diego Ares
CODIGO:
Public Sub Mantenimiento() 'Compactar y BackUp 1 vez por día en forma automatica !!!
Dim Origen As String, Destino As String, Copia As String
Dim Dia As String, Extencion As String
'
Extencion = ".mdb"
'
If BasedeDatos = "Access" Then If cnBase.State = 1 Then Call Cerrar_Conexion(cnBase)
'
BaseDefecto = cnBase.DefaultDatabase 'Path donde esta la Base de Datos
PathDNS = Mid(BaseDefecto, 1, Len(BaseDefecto) - Len(App.Title) - 1)
'
If Mid(PathDNS, Len(PathDNS), 1) = "\" Then PathDNS = Mid(PathDNS, 1, Len(PathDNS) - 1)
'
Dia = Format(Date, "dddd")
Copia = PathDNS & "\Backups\" & BaseNombre & Dia & Extencion '(Día escrito seguido de Base)
'
If Dir(Copia) <> "" Then Kill Copia
'
Dia = UCase(Mid(Dia, 1, 1)) & LCase(Mid(Dia, 2, Len(Dia)))
Copia = PathDNS & "\Backups\" & BaseNombre & " " & Dia & Extencion '(Día escrito separdo y con mayusculas de Base)
'
If Dir(Copia) <> "" Then Kill Copia
'
'Poner el nombre de la base Origen
Origen = PathDNS & "\" & BaseNombre & Extencion
'
'Poner el nombre de la base Destino
Destino = PathDNS & "\Backups\" & "Copia de " & BaseNombre & Extencion
'
'Copia Compactando
On Error GoTo errorApertura
'
'Si existe la base Destino la borra
If Dir(Destino) <> "" Then Kill Destino
'
'Compactar la base de datos
'myJRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\sample.mdb;Jet OLEDB

atabase Password=YourPassword;", _
'"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\compactedSample.mdb;Jet OLEDB:Engine Type=5; Jet OLEDB

atabase Password=YourPassword;"
'
'Compactar Destino
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Origen & ";" & "Jet OLEDB

atabase Password=" & pClave & ";", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Destino & ";" & "Jet OLEDB:Engine Type=5;Jet OLEDB

atabase Password=" & pClave & ";"
'
'Compactar Copia
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Origen & ";" & "Jet OLEDB

atabase Password=" & pClave & ";", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Copia & ";" & "Jet OLEDB:Engine Type=5;Jet OLEDB

atabase Password=" & pClave & ";"
'
'Borrar la base Original
Kill Origen
'
'Renombrar la base compactada
Name Destino As Origen
'
'Borrar la copia
If pAyuda = "Compactar" Or pAyuda = "Salir" Then Kill Copia
'
'Cerrar 1ro y despues Conectar la base de datos
Call Cerrar_Conexion(cnBase)
Call Conectar(cnBase, "Base")
'
If pAyuda = "Compactar" Then MsgBox "Base de Datos Compactada", vbInformation + vbOKOnly, "Administrador"
If pAyuda = "BackUp" Then MsgBox "Copia de Seguridad Realizada", vbInformation + vbOKOnly, "Administrador"
'
If pAyuda = "Mantenimiento" Then
'
Dim rsInicio As ADODB.Recordset
Set rsInicio = New ADODB.Recordset
'
If rsInicio.State = adStateOpen Then rsInicio.Close
With rsInicio
.ActiveConnection = cnBase
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Source = "SELECT * FROM Inicio"
.Open
End With
'
Do While Not rsInicio.EOF
rsInicio!Mantenimiento = Format(Date, "dd/mm/yyyy")
rsInicio.Update
rsInicio.MoveNext
Loop
'
rsInicio.Close
Set rsInicio = Nothing
'
End If
'
Exit Sub
'
errorApertura:
If Err.Number Then
'MsgBox Err.Description, vbOKCancel + vbCritical, "Error"
Call Cerrar_Conexion(cnBase)
Call Conectar(cnBase, "Base")
On Error GoTo 0 '???
Exit Sub
End If
'
End Sub
Public Sub Conectar(mConn As ADODB.Connection, mDSN As String)
mConn.Open mDSN
End Sub
Public Sub Cerrar_Conexion(mConn As ADODB.Connection)
If mConn.State <> adStateClosed Then mConn.Close
End Sub