MS Access | Automatizando a Compactação do Bancos de Dados

MS Access | Automatizando a Compactação do Bancos de Dados


Manter o desempenho de bancos de dados Access é uma tarefa essencial, especialmente em ambientes que fazem uso intensivo de arquivos backend compartilhados. A compactação regular do banco de dados melhora sua eficiência, elimina fragmentação e recupera espaço em disco. O código CompactBackendDatabaseFile_Custom automatiza essa tarefa, permitindo compactar um banco de dados backend com segurança e facilidade.


 Aprenda: 17 Passos Essenciais para Melhorar seu Código VBA 


A função verifica se o arquivo original do banco de dados está sendo usado através da existência de um arquivo ".ldb", o que indica que o banco de dados está em uso. Se o arquivo de bloqueio estiver presente, a compactação não é realizada para evitar a corrupção de dados. Isso é útil em ambientes multiusuário, onde o banco pode estar constantemente acessado por diferentes usuários.


 Que tal aprender estes códigos também: 

MS Access | Aplicando Função Concatenação de Valores nos Campos das Consultas
MS Access | Utilizando SendKeys de Forma Eficiente
MS Access | Automatizando a Compactação do Bancos de Dados
MS Access | Como Gerenciar Links das Tabelas
MS Access | Quebra de Texto em Linhas com Comprimento Máximo
MS Access | Monitoramento de Conexões de Usuários
MS Access | Mapeando 3.500 Erros com a Criação de Tabelas de Erros
MS Access | Código para Registro de Logs
MS Access | 17 Passos Essenciais para Melhorar seu Código VBA
MS Access | Código VBA para Backup de Todas as Tabelas Comentado


A compactação é realizada de maneira segura utilizando um arquivo temporário. O código renomeia o arquivo original e cria uma cópia temporária, que é compactada em seguida. Essa abordagem minimiza os riscos de falhas durante o processo, e, em caso de erro, o código restaura o arquivo original automaticamente. Esse nível de automação reduz o esforço manual e a probabilidade de erro humano.


Public Function CompactBackendDatabaseFile_Custom(strPathFilename_OriginalBEDB As String, _

strPathFilename_TemporaryBEDB As String, blnKeepBackup As Boolean) As Integer


' Função para compactar um banco de dados backend do Access

' strPathFilename_OriginalBEDB: caminho e nome do arquivo do banco de dados que será compactado

' strPathFilename_TemporaryBEDB: caminho e nome do arquivo temporário usado para compactação

' blnKeepBackup: indica se uma cópia de backup será mantida (True) ou não (False)

' Retorna:

'   -1: se um arquivo .ldb existir (indica que o banco está em uso, sem compactação)

'    0: se a compactação foi bem-sucedida

'    1: se o arquivo original não for encontrado (sem compactação)

'    2: se houve erro durante a compactação (sem compactação)


Dim intLocation As Integer

Dim xlngLooping As Long

Dim strTempBEDB As String, strDateTime As String

Dim strLockFile As String


Const strLockFileExtension As String = "ldb" ' Extensão do arquivo de bloqueio do Access


On Error Resume Next


' Gera um timestamp para nomear o arquivo temporário

Let strDateTime = Format(Now, "mmmddyyyyhhnnssAmPm")
Let strTempBEDB = strPathFilename_TemporaryBEDB
Let intLocation = InStrRev(strTempBEDB, "\") ' Localiza a última barra invertida no caminho

strTempBEDB = Left(strTempBEDB, intLocation) & strDateTime & _

      Mid(strTempBEDB, intLocation + 1) ' Insere o timestamp no nome do arquivo temporário


' Verifica se o arquivo de bloqueio (.ldb) existe, o que indica que o banco está em uso

Let strLockFile = Left(strPathFilename_OriginalBEDB, Len(strPathFilename_OriginalBEDB) - 3) & strLockFileExtension

If Dir(strLockFile) = "" Then


      On Error GoTo Err_Compact_1


      ' Renomeia o arquivo original para o nome temporário

      Name strPathFilename_OriginalBEDB As strTempBEDB

      DoEvents ' Permite que outros processos continuem executando


      On Error GoTo Err_Compact_2


      ' Compacta o banco de dados temporário no arquivo original

      DBEngine.CompactDatabase strTempBEDB, strPathFilename_OriginalBEDB

      DoEvents


      ' Espera até que o arquivo compactado esteja disponível

      Do Until Dir(strPathFilename_OriginalBEDB) <> ""

            On Error Resume Next

            For xlngLooping = 0 To 25

                  DoEvents

            Next xlngLooping

      Loop


      On Error Resume Next


      ' Remove o arquivo temporário se o backup não for necessário

      If blnKeepBackup = False Then Kill strTempBEDB


      Let CompactBackendDatabaseFile_Custom = 0 ' Compactação concluída com sucesso


Else

      Let CompactBackendDatabaseFile_Custom = -1 ' Arquivo em uso, compactação não realizada


End If


Exit_Compact:

      Exit Function


Err_Compact_1:

      ' Caso o arquivo original não seja encontrado

      MsgBox "O arquivo original do banco de dados não foi encontrado neste local:" & _

            vbCrLf & " " & strPathFilename_OriginalBEDB & vbCrLf & _

           "O arquivo não pode ser compactado.", vbExclamation, "Arquivo Não Encontrado!"

     CompactBackendDatabaseFile_Custom = 1

     Resume Exit_Compact


Err_Compact_2:

      ' Em caso de erro durante a compactação, restaura o banco original

      Kill strPathFilename_OriginalBEDB

      FileCopy strTempBEDB, strPathFilename_OriginalBEDB

      MsgBox "Ocorreu um erro durante a operação de compactação do arquivo!" & _

            vbCrLf & "O arquivo não pode ser compactado.", vbExclamation, "Erro de Compactação!"

      CompactBackendDatabaseFile_Custom = 2

      Resume Exit_Compact


End Function


Outro recurso interessante é a opção de manter ou não uma cópia de backup do banco de dados compactado. Caso o usuário deseje arquivar uma cópia antes da compactação, o sistema automaticamente adiciona um carimbo de data/hora ao nome do arquivo, tornando-o fácil de identificar. Isso é útil para manter versões anteriores de backups para auditoria ou recuperação de dados.


Em suma, a função CompactBackendDatabaseFile_Custom oferece uma maneira prática e segura de realizar a compactação de bancos de dados Access de forma programática. Essa automação não apenas melhora a performance e a organização do banco, mas também proporciona maior controle sobre o processo, permitindo agendamentos e execuções regulares sem intervenção manual constante.


  Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série Donut Project 
DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 Clique nas capas abaixo e compre também: 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)


Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel (Série Top 10 Funções - Microsoft Excel)


eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias