Pregunta: | 27562 - ¿PORQUE AUMENTA DE MB UNA BD AL COMPACTARLA? |
Autor: | Paco |
Alguien me puede decir algun método efieciente para compactar y reparar una BD de Access 97 desde Visual Basic 5, ya lo he intentado con las instrucciones DBEngine.RepairDatabase "ruta" y DBEngine.CompactDatabase "ruta, pero ocurre que me la dejó con mas megas de los q tenia en principio, ¿como puede ser esto si al compactarla desde Access se fue a menos megas?
Un saludo y gracias. |
Respuesta: | Dante Cantone |
Paco:
La sentencia "DBEngine.RepairDatabase " siempre te aumenta la db de un 10 a un 25 % de volumen, segùn los tipos de datos que contenga y cuàn indexada estè. Sucede que en vez de trabajar con un temporal en disco (como la mayorìa de las aplicaciones windows) lo hace sobre el mismo archivo, lo cual hace que aumente su volumen. Luego al ejecutar la sentencia "DBEngine.CompactDatabase " se reordena la DB en "OTRO" archivo sin copiar la info redundante... Es decir... al realizar ABM sobre las tablas estas modificaciones se van guardando siempre "al final" con punteros que indican a que tabla, registro, indice, etc corresponde. informaciòn que desaparece al aplicar las ABM sobre los registros involucrados. Sospecho que en la rutina de compactaciòn que utilizas hay un error y solo se ejecuta la de reparaciòn(y por eso aumenta de volumen, en vez de disminuir). Prueba (si es que lo tienes en el còdigo) quitando la sentencia - On Error Resume Next y ejecutando paso a paso.... Dim DB As Database Dim RS As Recordset Dim StrRuta As String '//Ruta de la DB Dim StrDBCompactada As String '//ruta donde ubicar la DB compactada '//Generamos un nombre, puede ser en cualquier Path '//Puede ser tambien un UNC (por ejemplo : \\server\carpeta) StrDBCompactada = App.Path & "\" & Format(Now, "hhmmss") On Error Resume Next 'Siempre conviene '//REPARAMOS DBEngine.RepairDatabase StrRuta '//Compactamos DBEngine.CompactDatabase StrRuta, StrDBCompactada If Err Then '// Aviso de error // Exit Sub End If 'Y cambiamos la VIEJA DB por la NUEVA Kill StrRuta FileCopy StrDBCompactada, StrRuta Perdona si he sido muy explìcito en mi explicaciòn, quizàs haya temas que ya los sabìas... cualquier duda que tengas mandame un mail... |