backup

Adriana
05 de Octubre del 2005
¿Como puedo hacer desde visual basic una copia de una base de datos de access con todas las tablas y como puedo copiar una tabla sola? ... Si ademas se puede obtener el archivo zipeado ... SERIA GENIAL !!!!

Gracias ...
Adriana.

pablinweb
05 de Octubre del 2005
Para hacer un back up de un acces lo único que tienes que hacer es copiar el archivo con fso, podrías usar algo así:
Dim fsoF As New Scripting.FileSystemObject
Dim SourcePath As String
Dim DestinationPath As String
Dim a As Date
Dim b As Date

SourcePath = App.Path & "MiBD.mdb" 'le doy el path de la bd que quiero copiar

DestinationPath = App.Path & "" & "BUMiBD.mdb"'creo el path de la bd backup

If fsoF.FileExists(DestinationPath) Then 'si el archivo existe lo borro

fsoF.DeleteFile DestinationPath
'le doy unos segundos para que el sistema pueda borrarla
a = Now
b = DateAdd("S", 5, Now)
Do While Not a = b
a = Now
If a > b Then
Exit Do
End If
Loop

End If
'copio la bd
fsoF.CopyFile SourcePath, DestinationPath

Set fsoF = Nothing

para esto tienes que agregar la referncia a Microsoft Sripting Runtime y asegurarte que cuando lo ejecutes la bd no esté en uso.

Para compactarla algo muy util es usar la herramienta de access que compacta y reindexa, es más te recomiendo que con fines de performance primero copies el archivo, compactes el archivo de bu y restaures el anterior, te paso un ejemplo para que te orientes:
Public Function CompactDB(pName As String = "") As Boolean

On Error GoTo Error

Dim db As New DBEngine
Dim oFso As New FileSystemObject
Dim a As Date, b As Date

If oFso.FileExists(App.Path & "CO" & pName & ".mdb") Then
oFso.DeleteFile App.Path & "CO" & pName & ".mdb"
End If

db.CompactDatabase App.Path & "" & pName & ".mdb", App.Path & "CO" & pName & ".mdb"
Set db = Nothing

oFso.CopyFile App.Path & "CO" & pName & ".mdb", App.Path & "" & pName & ".mdb"

Set oFso = Nothing

a = Now
b = DateAdd("S", 5, Now)
Do While Not a = b
a = Now
If a > b Then
Exit Do
End If
Loop

CompactDB = True
Exit Function

Error:
CompactDB = False
End Function

Para usar el DBengine creo que tienes que agragar la referencia a Microsoft DOA 3.5 o algo así y tambien debes asegurarte que la bd no esté en uso.

Si lo que quieres es zipearla es un poquito más de trabajo pero en la web hay muchos ejemplos de como usar zlib, pkzip o alguna de esas.

Saludos

pablinweb
05 de Octubre del 2005
me olvidaba para copiar una tabla sola puede ser tomado de dos formas, una tener una bd de back up con una sola tabla y otra tener una bd de back up con muchas tablas y solo copiar una tabla, para la primera depende un poco de la cantidad de datos de la tabla y la cantidad de tablas restantes pero lo más simple y rápido es copiar el archivo y borrar todas las demás tablas con un DROP TABLE MITABLA para la segunda no tienes mucho más que abrir dos conexiones e iterar por una tabla e ir copiando a la otra