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.
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 caminhostrTempBEDB = 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
Nenhum comentário:
Postar um comentário