backup
¿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.
Gracias ...
Adriana.
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
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
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
