ROTINA DE BACKUP

SIRIOUS 25/05/2013 15:53:57
#424025
Boas tardes.
Estou brigando com uma rotina de backup da minha base de dados (access 7.0), projeto criado e desenvolvido em VB6... Eis a rotina (que consegui tempos atrás aqui mesmo no site) associada a um botão <Criar Cópia> no form principal:

Dim FSO As New FileSystemObject
Dim RetVal As String
RetVal = Dir([Ô]C:\Safe Database\Livros.mdb[Ô])
If RetVal = [Ô][Ô] Then MkDir [Ô]C:\Safe Database[Ô]
FSO.CopyFile [Ô]c:\Users\Manager\AppData\Local\VirtualStore\Program Files (x86)\Biblioteca\livros.mdb[Ô], [Ô]c:\Safe DataBase\[Ô], True

Ocorre o seguinte: na pasta <c:\users> consta que houve alteração/modificação da base de dados em determinado horário.
Na pasta <Safe DataBase>, a (presente) alteração não é gravada. A base de dados não reflete a alteração acima...
Alguém tem uma dica?


PROFESSOR 26/05/2013 14:46:47
#424039
Resposta escolhida
Bom, ás vezes, a operação com arquivos pela FSO não apresenta resultado tão rapidamente quanto o VB executa suas linhas. Com isso, ocorre eventualmente de uma operação [Ô]parecer[Ô] finalizada, quando, na verdade, está em andamento.
Ainda assim, a operação é normalmente efetuada.
No entanto, é sempre conveniente tratar erros prováveis / possíveis, como a não-existência de pastas e/ou arquivos e ainda as permissões de acesso á essas mesmas pastas e/ou arquivos.
Teste a rotina abaixo no passo á passo (F8) e veja o que ocorre, ok ?
Se com isso sua dúvida for resolvida, você pode mudar a rotina para que fique mais genérica, de modo á receber os parâmetros de pasta de origem, de destino e o nome (ou escopo) dos arquivos.

Private Sub GeraBackup()
On Error GoTo Hell:
Dim fso As New Scripting.FileSystemObject
Dim fdoDb As String
Dim fdtDb As String
Dim floDb As String
Dim fltDb As String
fdoDb = [Ô]C:\Users\Manager\AppData\Local\VirtualStore\Program Files (x86)\Biblioteca\[Ô]
fdtDb = [Ô]C:\Safe Database\[Ô]
floDb = [Ô]livros.mdb[Ô]
fltDb = [Ô]Livros.mdb[Ô]
If (fso.FolderExists(fdoDb)) = True Then
If (fso.FileExists(fdoDb & floDb)) = True Then
If (fso.FolderExists(fdtDb)) = False Then Call fso.CreateFolder(foldername)
If (fso.FolderExists(fdtDb)) = True Then
If (fso.FileExists(fdtDb & fltDb)) = True Then Call fso.DeleteFile(fdtDb & fltDb, True)
If (fso.FileExists(fdtDb & fltDb)) = False Then
Call fso.CopyFile((fdoDb & floDb), (fdtDb & fltDb), True)
Else
Call MsgBox([Ô]Uma cópia com o mesmo nome já existe e não pôde ser excluída.[Ô])
End If
Else
Call MsgBox([Ô]A pasta de destino dos dados não existe nem pôde ser criada.[Ô])
End If
Else
Call MsgBox([Ô]O arquivo de origem não foi encontrado.[Ô])
End If
Else
Call MsgBox([Ô]A pasta de origem dos dados não foi encontrada.[Ô])
End If
GoTo Sai:
Hell:
Call MsgBox(Err.Description)
Err.Clear
Sai:
End Sub


SIRIOUS 26/05/2013 23:09:38
#424059
Consegui resolver por aqui, após testar inúmeras vezes a rotina. Embora o sistema automaticamente atualize a base de dados a cada modificação, uma chamada por menu <Atualizar a cópia de segurança> faz uma cópia idêntica àquela que reside na pasta <C;\Users\Manager...> acima, usando corretamente o <FileCopy>...
Obrigado pela ajuda e, principalmente, pelos métodos de procura de erros que vc passou.... Vou, com certeza, deles me utilizar.
Abraços.
Tópico encerrado , respostas não são mais permitidas