Compactar una base de datos en forma remota
El siguiente código nos permite compactar y reparar una base de datos Access en forma remota. Es decir sin tener que
hacerlo a mano entrando a la base de datos y elegir la opcion de Compactar / Reparar.
Para aquellos que no lo sepan, cuando usamos bases de datos (en este caso Access), al eliminar informacion, queda el
"hueco" de los datos eliminados, ocupando el lugar que anteriormente ocupaban, y los bytes ocupados siguen por la informacion
borrada siguen alli estorbando (ocupando) ya que el registro, sigue "estando".
Para compactar la base de datos a su tamaño que deberia estar, dentro del access vamos a:
Herramientas > Utilidades de las base de datos > Compactar y reparar base de datos
Y esto nos reduce el tamaño a los bytes que realmente ocupan los datos.
En fin, este script hace lo mismo pero en forma remota. Aqui va.
<%
Const DriverConexion = "Provider=Microsoft.Jet.OLEDB.4.0; Data source="
Dim strDatabase, strFolder, strFileName
'#################################################
'# Edite las siguientes dos líneas
'# Defina el path de la base de datos. Si desea hacerlo completo, puede hacerlo
StrCarpeta = server.mappath("./db")
'##################################################
'Compacta la base de datos
Private Sub dbCompact(StrBaseDeDatos)
if right(StrCarpeta,1) <> "\" then StrCarpeta = StrCarpeta & "\"
Dim SourceConn, DestConn, oJetEngine, oFSO
SourceConn = DriverConexion & StrCarpeta & StrBaseDeDatos
DestConn = DriverConexion & StrCarpeta & "Temp" & StrBaseDeDatos
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oJetEngine = Server.CreateObject("JRO.JetEngine")
If Not oFSO.FileExists(StrCarpeta & StrBaseDeDatos) Then
Response.Write ("Base no encontrada: " & StrCarpeta & StrBaseDeDatos)
else
If oFSO.FileExists(StrCarpeta & "Temp" & StrBaseDeDatos) Then
Response.Write ("Error. Intente Nuevamente.")
oFSO.DeleteFile (StrCarpeta & "Temp" & StrBaseDeDatos)
else
oJetEngine.CompactDatabase SourceConn, DestConn
oFSO.DeleteFile StrCarpeta & StrBaseDeDatos
oFSO.MoveFile StrCarpeta & "Temp"& StrBaseDeDatos, StrCarpeta& StrBaseDeDatos
Response.Write ("* La base de datos <B'>" & Request.form("DBFileName") & "</B'> fue compactada con exito.")
End If
End If
Set oFSO = Nothing
Set oJetEngine = Nothing
End Sub
'Pinta la lista de bases en ese directorio
Private Sub dbList
Dim oFolders, i
i = 0
Set oFolders = Server.CreateObject("Scripting.FileSystemObject")
Response.Write ("<SELECT name='DBFileName''>")
For Each Item In oFolders.GetFolder(StrCarpeta).Files
If LCase(Right(Item, 4)) = ".mdb" Then
'corrijo el path, y saco la "\"
item = Replace(lcase(Item), lcase(StrCarpeta), "")
item = Replace(Item, "\", "")
Response.Write ("<OPTION value='" & item &"'>" & item & "</OPTION'>")
i = i+1
End If
Next
Response.Write ("</SELECT'>")
Response.Write ("<BR'><BR'>En la carpeta <b'>"& StrCarpeta &"</b'> hay <b'>"& i &"</b'> bases de datos Access.")
Set oFolders = Nothing
End Sub
Select Case Request.form("compactar")
Case "Compactar"
dbCompact Request.form("DBFileName")
End Select
%>
<p align="center"><b>Seleccionar la base para compactar de la lista</b>
<form method="POST" action="" id=form1 name=form1>
<%dbList%><BR><BR>
<input type="submit" value="Compactar" name="compactar">
</form></p>
|
Lo unico que hay que editar dentro del script es el path al directorio donde se encuentra la base de datos.
El propio script recorre el directorio y muestra un combo con todas las bases que estan alli y permite seleccionarla
para compactarla
Los que deban modificar el DRIVER de la base de datos, pueden hacer con cuidado también.
El script lo probe con bases de Access 2000 y anda perfecto. Con otras versiones sinceramente no lo se.
(extraido de planet-source-code.com) [Modificado por CoRSA]
|