Compactando um Banco de dados - DAO e ADO
Sabe qual o problema com uma base de dados Access ? Ela cresce , cresce , e cresce , não importa se você exclui registros e mais registros da base de dados , ela continua crescendo. A única maneira de fazer o mdb encolher e compactar a base de dados. As vezes o tamanho chega a cair de megas para kbytes...
Nas versões anteriores a versão 3.6 do Jet a DAO usava o método RepairDatabase para reparar uma base de dados e o método CompactDatabase para compactar o banco de dados. O processo era feito em duas etapas. Assim temos abaixo as rotinas para compactar e reparar uma base de dados nas versões anteriores a versão 3.6 do Jet ( 3.51, etc.).
Reparando um base de dados - Versão anterior a 3.6
Private Sub CmdReparar_Click() On Error GoTo Reparar_Error Dim MDB_Base As String CommonDialog1.Filter = "Access (*.mdb)|*.mdb" CommonDialog1.Flags = &H1000 CommonDialog1.FilterIndex = 1 CommonDialog1.Action = 1 If CommonDialog1.FileName <> "" Then Screen.MousePointer = 11 MDB_Base = CommonDialog1.FileName RepairDatabase (MDB_Base) Screen.MousePointer = 0 MsgBox "Base reparada com sucesso! ", vbInformation, "Reparar Base de Dados" End If Screen.MousePointer = 0 Exit Sub Reparar_Error: MsgBox "Erro durante a reparaççao da base de dados", vbCritical, "Error" Screen.MousePointer = 0 Exit Sub End Sub |
Compactando uma base de dados - Versão anterior a 3.6
Private Sub cmdcompactar_Click() On Error GoTo Compact_Error Dim MDB_Nome As String Dim MDB_NovoNome As String Dim MDB_Caminho As String Dim MDB_Opcoes As String MDB_NovoNome = "c:\teste.mdb" CommonDialog1.Filter = "Access (*.MDB)|*.mdb" CommonDialog1.Flags = &H1000 CommonDialog1.FilterIndex = 1 CommonDialog1.Action = 1 If CommonDialog1.FileName <> "" Then MDB_Nome = CommonDialog1.FileName CompactDatabase MDB_Nome, MDB_NovoNome & MDB_Caminho & MDB_Opcoes Kill MDB_Nome Name MDB_NovoNome & MDB_Caminho & MDB_Opcoes As MDB_Nome MsgBox "Base de dados compactada com sucesso !", vbInformation, "Compactar Base de dados" End If Exit Sub Compacta_Error: MsgBox "Base de dados nao pode ser compactada", vbCritical, "Erro na Compactacao" Exit Sub End Sub |
A partir da versão 3.6 do Jet a coisa mudou , ficou mais simples. A função CompactDatabase agora compacta e faz a reparação da base de dados ao mesmo tempo. Vejamos um exemplo onde tomamos o cuidado de checar a versão da DAO
Compactando e Reparando uma base de dados - Versão 3.6 ou superior
Function CompactarRepararDatabase(DatabasePath As String, _ |
Compactando e Reparando uma base de dados - Usando ADOX - JRO
A ADO não nos fornece meios para reparar ou compactar um banco de dados Access. Para realizar tal tarefa devemos usar uma extensão da ADO: Microsoft Jet OLE DB Provider and Replication Objects (JRO). Esta capacidade foi implementada a partir da versão 4.0 do PROVEDOR JET OLE DB (Mjsetoledb40.dll) e da versão 2.1 da JRO (Msjro.dll) . Esses arquivos estão disponíveis para instalação na MDAC 2.1. ( Universal Data Access Web Site ).
Vamos ao projeto para compactar uma base de dados usando JRO.
Private Sub Command1_Click() Dim origem_path, destino_path As String If Text1.Text <> "" And Text2.Text <> "" Then origem_path = Text1.Text destino_path = Text2.Text If Not compactaDB(origem_path, destino_path) Then MsgBox "Ocorreu um erro durante a compactacao " & vbCrLf & vbCrLf & Text2.Text, vbExclamation Else MsgBox Text1.Text & "foi compactado com sucesso", vbInformation, " Compactando com JRO" End If End If |
Public Function compactaDB(ByVal origem_path As String, _ ByVal destino_path As String) As Boolean On Error GoTo Erro_compacta Dim DB_origem As String, DB_destino As String Dim JRO As JRO.JetEngine Set JRO = New JRO.JetEngine DoEvents DB_origem = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & origem_path DB_destino = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & destino_path & " ;Jet OLEDB:Engine Type=5" JRO.CompactDatabase DB_origem, DB_destino compactaDB = True Exit Function Erro_compacta: compactaDB = False MsgBox Err.Description, vbExclamation End Function |
O Engine Type=5 indica que formato dos arquivos é para a versão 4.0 do JET. Para versões anteriores siga a tabela abaixo:
Jet OLEDB:Engine Type | Jet x.x Formato dos arquivos MDB |
---|---|
1 | JET10 |
2 | JET11 |
3 | JET2X |
4 | JET3X |
5 | JET4X |
Agora é só clicar e compactar...
Tchau.. ,