VB6 - Backup com FileSystemObject


Este artigo apresenta uma rotina simples para efetuar cópia de segurança de seu arquivo .MDB usa o objeto FileSystemObjec.

O FileSystemObject foi um grande avanço no Visual Basic 6 sobre a versão anterior pois apresenta um modelo de objetos para operações com arquivos.

Para ter acesso ao FileSystemObject o seu projeto tem que fazer referência a Microsoft Scripting RunTime.

O objetivo deste artigo não é entrar em detalhes sobre o FileSystemObject, isto já foi feito nos artigos :

O projeto deste artigo usa dois formulário : um formulário MDI(Mdi_backup) que é o formulário principal e apresenta o menu com uma opção para realizar o backup, e , o formulário(frm_backup) onde o backup é feito.

Inicie um novo projeto no VB6 do tipo StandardEXE e inclua um formulário MDI no menu Project->Add MDI Form

Inclua também um modulo no projeto no menu Project->Add Module

Inclua o módulo o seguinte código :

Dim conn As ADODB.Connection

Sub main()
  
  Set conn = New ADODB.Connection
  conn.CursorLocation = adUseClient
  conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Macoratti.mdb;Jet OLEDB:Database Password=Library;"
  Load Mdi_backup
  Mdi_backup.Show
End Sub

O código apenas define a rotina Sub Main onde a conexão com o banco de dados é aberta e o formulário principal é carregado.

A seguir inclua um formulário que será usado como interface para o backup.

No formulário MDI inclua um menu usando o Menu Editor (CTRL+E) com uma opção Principal chamada Arquivo e uma sub-opção chamada Cópia de Segurança. (Abaixo a figura do formulário MDI com o menu e os arquivos do projeto)

No evento Click da opção do Menu mnuBackup inclua o código que irá chamar o formulário de backup.

Private Sub mnuBackup_Click()
   Load Frm_backup  
   Frm_backup.Show
End Sub

Vamos criar a interface para o formulário de backup. Para isto vamos usar os seguintes controles:

O layout do formulário é dado a seguir:

Agora inclua o código abaixo no formulário frm_backup:

'incluindo uma referência a microsoft script library para usar o filesystemobject
Dim Fsys As New FileSystemObject
Dim arquivoBackup As File
Private Sub cmdCancela_Click()
    Unload Me
End Sub

Private Sub cmdsalva_click()
On Error GoTo trata_erro

    cmdSalva.Enabled = False
    lbl_Status.Caption = "Por favor aguarde , Backup em operação..."
        
    'define as variaveis para o backup
    Dim Destino As String
    Dim Origem As String
    Dim DataAtual, HoraAtual As String
    
    'formata da hora e a data
    DataAtual = Format$(Now, "dd, mmm, yyyy")
    HoraAtual = Format$(Now, "hh:mm:ss AM/PM")
    
    'obtem o destino e a origem
    Destino = File1.Path & "\" & "ArquivoBackup.mdb"
    Origem = App.Path & "\Macoratti.mdb"
   
   'retorna um objeto File associado ao arquivo
    Set arquivoBackup = Fsys.GetFile(Destino)
    'define o atributo do arquivo como compressed
    arquivoBackup.Attributes = Compressed
    
   'Usa o FileSystemObject para efetuar a copia do arquivo
    Fsys.CopyFile Origem, Destino, True
    
    'salva informações no registro do backup atual
    SaveSetting App.Title, "Settings", "BackupPath", Destino
    SaveSetting App.Title, "Settings", "BackupDate", DataAtual
    SaveSetting App.Title, "Settings", "BackupTime", HoraAtual
    
    lbl_Status.Caption = "Backup realizado com sucesso."
    
    cmdSalva.Enabled = True
    
    MsgBox "Todos os dados foram Copiados com Sucesso", vbInformation, "Backup"
    
    Unload Me
    Exit Sub
    
trata_erro:
     If Err.Number = 53 Then
         MsgBox " Erro no. " & Err.Number & " - Arquivo -> " & Destino & " , Não Encontrado."
     Else
         MsgBox Err.Number & " - " & Err.Description
    End If
End Sub
Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub

Private Sub Form_Load()
   
    'define as variáveis
    Dim ultimoDestino As String
    Dim ultimaData As String
    Dim ultimaHora As String
    File1.Visible = False
    'posiciona o formulário
    Me.Top = 50
    Me.Left = 50
      
    'le o registro para obter valores armazenados
    ultimoDestino = GetSetting(App.Title, "Settings", "BackupPath")
    ultimaData = GetSetting(App.Title, "Settings", "BackupDate")
    ultimaHora = GetSetting(App.Title, "Settings", "BackupTime")
    
    lbl_Status.Caption = "Selecione o caminho de destino e pressione o botão : Inicia Backup"
    If ultimoDestino = "" Then
        lbl_destino.Caption = "Nenhum backup feito anteriormente"
        lbl_ultimaData.Caption = " "
        lbl_ultimaHora.Caption = " "
    Else
        lbl_destino.Caption = ultimoDestino
        lbl_ultimaData.Caption = ultimaData
        lbl_ultimaHora.Caption = ultimaHora
    End If
    
End Sub

 

Vale destacar no código acima o seguinte :

 

1- A utilização do método FileCopy do objeto FileSystemObject para realizar a cópia do banco de dados

 

2- A utilização do recurso de gravar (SaveSetting) e obter(GetSetting)  os valores armazenados no registro

 

3- A utilização dos componentes DirListBox, FileListBox e DriveListBox para definir o destino do backup

 

Pegue o projeto completo aqui :   backup06.zip

 

Você pode usar a rotina incorporando-a ao seu projeto. Pode também incrementá-la com outras funcionalidades...
 

Eu sei, é apenas VB , mas eu gosto ...


José Carlos Macoratti