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 |