VB .NET -  Backup e Restauração de um banco de dados Microsoft Access


Este artigo mostra como podemos fazer o backup e a restauração de um banco de dados Microsoft Access 2003, 2003, 2007, 2009, etc.

É um exemplo básico para iniciantes e foi criado para ser simples e fácil de entender.

Vou mostrar cada etapa básica necessária para construir uma aplicação Windows Forms usando a linguagem VB .NET na esperança de que tudo fique bem claro ao iniciante.

Portanto se você é iniciante na linguagem VB .NET ou esta migrando de outra linguagem e quer aprender como fazer um backup e restauração de um banco de dados MS Access acompanhe cada etapa caso contrário siga para outro artigo.

Objetivos

Nosso objetivo será realizar o backup e a restauração de banco de dados MS Access.

Do que eu vou precisar ?

Você vai precisar de um ambiente onde a linguagem Visual Basic .NET possa ser desenvolvida e de um banco de dados.

Para começar uma boa notícia : as ferramentas que você vai precisar são todas grátis e você não vai gastar um centavo para aprender.

No link abaixo você poderá baixar o Visual Studio Express 2012 for Windows Desktop. Ele é grátis, totalmente funcional e não tem restrições. Após algum tempo de uso você será solicitado a efetuar um registro mas fique tranquilo é apenas para controle da Microsoft a ferramenta é realmente grátis.

  1. Visual Studio 2012 Express for Windows Desktop

Neste momento você também já pode usar as novas versões do Visual Studio 2013. Veja neste link: Microsoft Visual Studio Express 2013 for Windows Desktop

Criando o projeto no Visual Studio Express 2012 for Windows Desktop

Abra o Visual Studio 2012 Express for Windows Desktop e no menu FILE clique em New Project e selecione o template Windows Forms Application com o nome Backup_Restore;

Agora vamos definir no formulário form1.vb a interface para interação com o usuário.

Para isso abra a janela ToolBox e arraste e inclua os controles abaixo no formulário:

Disponha os controles conforme o leiaute abaixo:

Definindo o código do projeto

Vamos começar definindo o código do evento Click do botão de comando Procurar do GroupBox - Backup.

Veja abaixo o código deste botão:

 Private Sub btnBancodeDados_Click(sender As Object, e As EventArgs) Handles btnBancodeDados.Click
        Try
            Dim dlg As New OpenFileDialog
            dlg.Filter = "Microsoft Access Database(2002-2003) (*.mdb)|*.mdb|Microsoft Access Database(2007-2009) (*.accdb)|*.accdb"
            ' para definir a extensão *.mdb como padrão use FilterIndex = 1 , para extensão *.accdb use FilterIndex=2
            dlg.InitialDirectory = My.Settings.PastaOrigem
            dlg.FilterIndex = 1
            If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
                txtBancoDeDados.Text = dlg.FileName
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Neste código usamos o componente OpenFileDialog para abrir uma caixa de diálogo onde o usuário poderá selecionar o local e o banco de dados Microsoft Access para o qual deseja fazer o backup.

Definimos as propriedades Filter, InitialDirectory e FilterIndex do controle OpenFileDialog.

O caminho e nome do arquivo selecionado será exibido na caixa de texto txtBancoDeDados :

   txtBancoDeDados.Text = dlg.FileName

O valor da propriedade InitialDirectory esta sendo obtida do arquivo de configuração - App.Config. Para isso vamos definir uma propriedade clicando com o botão direito do mouse sobre o nome do projeto e a seguir clicar em Properties.

Existem duas maneiras de armazenar dados em um arquivo de configuração. Usando as seções :
  • appSettings
  • userSettings

Na sequência selecione a opção Settings e defina a propriedade : PastaOrigem  com o valor c:\dados conforme figura abaixo:

Isso irá se refletir no arquivo App.Config conforme podemos ver a seguir:

Como vemos foi criada a seção <userSettings> armazenando o nome da propriedade e seu valor.

Existe uma outra forma de armazenar valores no arquivo App.Config e depois obter esse valor na aplicação.

Vamos definir uma propriedade chamada PastaDestino com o valor c:\_dados na tag <appSettings> conforme a seguir:

Veremos mais adiante como recuperar o valor da propriedade PastaDestino.

A próxima tarefa será definir o código do evento Click do botão de comando Procurar onde o usuário irá definir a pasta de destino onde será feito o backup do banco de dados.

Abaixo vemos o código deste botão:

Private Sub btnDestino_Click(sender As Object, e As EventArgs) Handles btnDestino.Click
        Try
            Dim pasta As New FolderBrowserDialog
            If pasta.ShowDialog() = Windows.Forms.DialogResult.OK Then
                txtDestino.Text = pasta.SelectedPath
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Usamos a classe FolderBrowseDialog que solicita ao usuário para selecionar uma pasta.

FolderBrowserDialog é uma caixa de diálogo modal; portanto, quando exibida, ela bloqueia o restante do aplicativo até que o usuário escolha uma pasta.

O valor selecionado pelo usuário será exibido na caixa de texto txtDestino :

 txtDestino.Text = pasta.SelectedPath

O usuário deverá informar o nome do arquivo de backup na caixa de texto txtNomeBackup.

Para iniciar o Backup definimos o código a seguir no evento Click do botão de comando - Iniciar Backup :

Private Sub btnBackup_Click(sender As Object, e As EventArgs) Handles btnBackup.Click
        Try
            If txtBancoDeDados.Text = "" Then
                MessageBox.Show("Selecione o banco de dados de Origem.")
                btnBancodeDados.Focus()
                Exit Sub
            End If
            If txtDestino.Text = "" Then
                MessageBox.Show("Selecione o banco de dados de destino.")
                btnDestino.Focus()
                Exit Sub
            End If
            If txtNomeBackup.Text = "" Then
                MessageBox.Show("Informe o nome do arquivo de Backup.")
                txtNomeBackup.Focus()
                Exit Sub
            End If
            Dim ext As String
            ext = txtBancoDeDados.Text.Substring(txtBancoDeDados.Text.IndexOf(".") + 1)
            File.Copy(txtBancoDeDados.Text, txtDestino.Text & "\" & txtNomeBackup.Text & "." & ext)
            MessageBox.Show("Backup realizado com sucesso.", "BACKUP", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Após verificar o caminho de origem, destino e o nome do backup extraímos a extensão do arquivo Access e usando o comando File.copy() da classe System.IO para realizar a cópia do arquivo para a pasta de destino:

  ext = txtBancoDeDados.Text.Substring(txtBancoDeDados.Text.IndexOf(".") + 1)
  File.Copy(txtBancoDeDados.Text, txtDestino.Text & "\" & txtNomeBackup.Text & "." & ext)

O método Copy da classe File copia um arquivo existente para um novo arquivo. A sintaxe usada é a seguinte:

Public Shared Sub Copy ( sourceFileName As String, destFileName As String )
sourceFileName
Tipo: System.String
O arquivo para copiar.
 
destFileName
Tipo: System.String
O nome do arquivo de destino. Não pode ser um diretório ou um arquivo existente.

Definindo a Restauração do Backup

Vamos agora definir o código para realizar a restauração do Backup para banco de dados Microsoft Access.

No controle GroupBox - Restauração - vamos definir o código do evento Click do primeiro botão Procurar conforme abaixo:

Private Sub btnArquivoBackupRestaurar_Click(sender As Object, e As EventArgs) Handles btnArquivoBackupRestaurar.Click
        Try
            Dim dlg As New OpenFileDialog
            dlg.Filter = "Microsoft Access Database(2002-2003) (*.mdb)|*.mdb|Microsoft Access Database(2007-2009) (*.accdb)|*.accdb"
            ' para definir a extensão *.mdb como padrão use FilterIndex = 1 , para extensão *.accdb use FilterIndex=2
            Dim reader As New System.Configuration.AppSettingsReader
            dlg.InitialDirectory = reader.GetValue("PastaDestino", GetType(String))
            dlg.FilterIndex = 1
            If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
                txtArquivoBackupRestaurar.Text = dlg.FileName
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Neste código usamos a classe OpenFileDialog() que abre uma janela de diálogo que solicita que o usuário abra um arquivo.

Note que aqui estamos obtendo o valor da propriedade PastaDestino que será atribuída a propriedade InitialDirectory da classe OpenFileDialog():

Dim reader As New System.Configuration.AppSettingsReader
dlg.InitialDirectory = reader.GetValue("PastaDestino", GetType(String))

Para que o código acima funcione você terá que incluir uma referência no projeto ao namespace System.Configuration. Para isso clique em PROJECT -> Add Reference, selecione a guia Assemblies e marque a opção conforme mostra a figura abaixo:

Concluída essa tarefa vamos agora definir o código do outro botão Procurar onde o usuário define a pasta para onde a restauração será feita.

 Private Sub btnDestinoRestaurar_Click(sender As Object, e As EventArgs) Handles btnDestinoRestaurar.Click
        Try
            Dim pasta As New FolderBrowserDialog
            If pasta.ShowDialog() = Windows.Forms.DialogResult.OK Then
                txtDestinoRestaurar.Text = pasta.SelectedPath
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Aqui usamos novamente a classe FolderBrowserDialog atribuindo o valor selecionado à caixa de texto txtDestinoRestaurar.

Para concluir no evento Click do botão de comando - Iniciar Restauração - definimos o código que restaura o arquivo selecionado para pasta de destino:

Private Sub btnRestaurar_Click(sender As Object, e As EventArgs) Handles btnRestaurar.Click
        Try
            Dim resultado As DialogResult = MessageBox.Show("Deseja Restaurar este Banco de dados ?", "Tem Certeza ?", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            Dim nomeArquivo As String
            nomeArquivo = txtArquivoBackupRestaurar.Text.Substring(InStrRev(txtArquivoBackupRestaurar.Text, "\"))
            If resultado = Windows.Forms.DialogResult.Yes Then
                If File.Exists(txtDestinoRestaurar.Text & "\" & nomeArquivo) Then
                    Dim resultadoReplace As DialogResult = MessageBox.Show("Este arquivo já existe na pasta de destino. Deseja substituir este Banco de Dados ?", " Tem Certeza ?",
 MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                    If resultadoReplace = Windows.Forms.DialogResult.Yes Then
                        File.Delete(txtDestinoRestaurar.Text & "\" & nomeArquivo)
                        File.Copy(txtArquivoBackupRestaurar.Text, txtDestinoRestaurar.Text & "\" & nomeArquivo)
                        MessageBox.Show("Restauração realizada com sucesso.", "RESTAURAÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    End If
                Else
                    File.Copy(txtArquivoBackupRestaurar.Text, txtDestinoRestaurar.Text & "\" & nomeArquivo)
                    MessageBox.Show("Restauração realizada com sucesso.", "RESTAURAÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Abaixo vemos a figura do projeto em execução:

Pegue o projeto completo aqui: Backup_Restore.zip

Heb 2:13 E outra vez: Porei nele a minha confiança. E ainda: Eis-me aqui, e os filhos que Deus me deu.

Heb 2:14 Portanto, visto como os filhos são participantes comuns de carne e sangue, também ele semelhantemente participou das mesmas coisas, para que pela morte derrotasse aquele que tinha o poder da morte, isto é, o Diabo;

Heb 2:15 e livrasse todos aqueles que, com medo da morte, estavam por toda a vida sujeitos à escravidão.

Heb 2:16 Pois, na verdade, não presta auxílio aos anjos, mas sim à descendência de Abraão.

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

Referências:


José Carlos Macoratti