VB 2005 - Compactando e restaurando uma base de dados Access via DAO


Como eu faço para compactar e reparar um banco de dados Microsoft Access (MDB) usando ADO.NET ?

Nota: Só para lembrar como se fazia no VB6 leia o artigo : Compactando uma base de dados Access

Tenho uma má notícia para você : ADO.NET não da suporte a compactar e reparar um banco de dados Access .

Agora a boa notícia: Você pode realizar tal tarefa incluindo uma referência a biblioteca DAO360.DLL no seu projeto.

Nota: Se quiser compactar arquivos no VB 2005 leia o artigo: VB.NET  2005  - Compactando e descompactando arquivos  

Agora vamos ao que interessa:

Abra o Visual Basic 2005 Express Edition e crie um novo projeto chamado backupDAO_Net.

Agora inclua uma referência a biblioteca Microsoft DAO 3.6 Object Library da seguinte forma:

Ao final do processo marque a opção Show All Files na janela Solution Explorer para visualizar na pasta References a referência DAO incluída no projeto. (figura 3.0)

Esta tudo pronto para criarmos o código para compactar e reparar uma base de dados Access via DAO.

No formulário padrão form1.vb inclua uma caixa de text e um botão de comando conforme o leiaute abaixo:

No evento Click do botão de comando inclua o seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not (txtOrigem.Text = String.Empty) And Not (txtDestino.Text = String.Empty) Then
compactarReparar(txtOrigem.Text, txtDestino.Text)
Else
MsgBox("Informe o caminho e o nome de origem e destino.")
End If
End Sub

Agora vamos definir o código da rotina para Reparar e compactar o arquivo MDB:

Private Sub compactarReparar(ByVal origem As String, ByVal destino As String)

Dim db As DAO.DBEngine
Dim novoNomeDestino As String
Dim destinoCompactado

Dim nomeSemExtensao As String = System.IO.Path.GetFileNameWithoutExtension(origem)
destinoCompactado = destino & "\" & nomeSemExtensao

Try
    novoNomeDestino = destino & "\" & nomeSemExtensao & Format(Now, "MMddyyyyHHmmss") & ".mdb"

If File.Exists(novoNomeDestino) Then
   Kill(novoNomeDestino)
End If

file.(origem, novoNomeDestino)

db = New DAO.DBEngine()

If File.Exists(destinoCompactado) Then
   Kill(destinoCompactado)
End If

db.CompactDatabase(novoNomeDestino, destinoCompactado)

MsgBox("Operação realizada com sucesso.")

Catch ex As System.Exception
   MsgBox(ex.Message)
End Try
End Sub

E pronto. Se você realmente estive precisando de algo parecido eu mostrei o caminho das pedras o resto é com você , então refine e incremente o código ajustando as suas necessidades.

Pegue o projeto completo aqui : arquivoIniNet.zip

Com VB.NET você pode , então vá...


José Carlos Macoratti