La Web del Programador: Comunidad de Programadores
 
    Pregunta:  37000 - REPARAR BASE D ACCESS 97 DESDE VISUAL AUTOMATICAMENTE
Autor:  Jorge
Hola, estoy haciendo una aplicaciĆ³n en VB que trabaja con bases de datos access 97, tengo una opciĆ³n que revisa que todas las bases esten bien pero me gustaria hacer que si detecta que alguna esta rota el programa automaticamente la repare.

Agradeceria muchisimo si alguien me pudiese ayudar.

Gracias.

  Respuesta:  Oswaldo Monagas
Una vez que revisas las bases de datos si alguna esta corrupta debe generate un error, porque me imagino que esa rutina que las chequea, detecta que alguna esta mal. Cuando se genere este error puedes generar una rutina de error y dentro de ella hacer que repare la base de datos, si lo puede hacer entonces continua de nuevo con tu rutina y chequea de nuevo todo, si no, ya sabes no se puede hacer la reparacion y ahi tomas tu propia decicion.
Aqui te envio dos rutinas para reparar las bases de datos.

Case ...
RepairDatabase Curentdatabasename
Case ....
On Error Resume Next
Kill "temp.MDB"
Name curentdatabasename as "temp.mdb"
On Error Goto errcompact
compactdatabase "temp.mdb", Currentdatabasename
kill "temp.mbd"
Exit Sub
errcompact:
MsgBox "compaction failed"
name "temp.mdb" as Currentdatabasename
Case ...

Fijate que aqui esta la rutina si no se puede reparar la base de datos.

Aqui tienes otra con la rutina de errores:

Public Function DAO_RepairDataBase(ByVal pvStrDataBaseName _
As String) As String
'----------------------------------------------------
' Purpose:
' Repairs any DataBase
'
' Parmaters:
' 1 - pvStrDataBaseName
' The database Path and Name
'
' Return Value:
' Empty string if successful
' String with err number(s) & "|" & Err description(s)
'
' Notes:
' This routine uses the Database Engine's error collection
' to notify the user of exactly what's gone wrong during the
' repair process.
'--------------------------------------------------

Dim lErrDataBaseErrors As DAO.Error
Dim lStrErrors As String
Const lcIntNoErrors = 0
Const lcStrErrorDivider = "|"
lStrErrors = ""

On Error Resume Next

' Attempt to repair the database
DBEngine.RepairDatabase pvStrDataBaseName

' If an ERROR occured then show the user all of the errors
' in the database engine's error collection
If Err <> lcIntNoErrors Then

For Each lErrDataBaseErrors In DBEngine.Errors
lStrErrors = lStrErrors & lErrDataBaseErrors.Number _
& lcStrErrorDivider & lErrDataBaseErrors.Description _
& Chr(9)
Next lErrDataBaseErrors
End If

On Error GoTo 0

DAO_RepairDataBase = lStrErrors

End Function

Saludos