Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador Compactar. Mostrar todas as postagens
Mostrando postagens com marcador Compactar. Mostrar todas as postagens

VBA Access | Como Copiar Todas as Tabelas Contidas no Arquivo ACCDB

 VBA Access | Como Copiar Todas as Tabelas Contidas no Arquivo ACCDB


Este código VBA copia todas as tabelas contidas no banco de dados Access, renomeando-as, e cria uma tabela de log, caso não exista, para registrar a execução do backup:

Sub CopiaTabelasComRenomeacao()

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim nomeTabela As String
    Dim nomeTabelaCopia As String
    Dim dataHora As String
    Dim rs As DAO.Recordset

    On Error GoTo TrataErro

    ' Abre o banco de dados atual
    Set db = CurrentDb

    ' Formata a data e hora atual para usar no nome das tabelas copiadas
    dataHora = Format(Now, "yyyymmdd_hhmmss")

    ' Percorre todas as tabelas no banco de dados atual
    For Each tdf In db.TableDefs
        nomeTabela = tdf.Name
        
        ' Ignora as tabelas de sistema (começam com "MSys")
        If Left(nomeTabela, 4) <> "MSys" Then
            ' Define o novo nome da tabela com a data e hora incluída
            nomeTabelaCopia = nomeTabela & "_" & dataHora
            
            ' Copia a tabela com o novo nome
            db.Execute "SELECT * INTO [" & nomeTabelaCopia & "] FROM [" & nomeTabela & "]"
            
            ' Registra a cópia na tabela de log
            Call RegistraLog(db, "Cópia de Tabela", "Tabela '" & nomeTabela & "' copiada como '" & nomeTabelaCopia & "'")
        End If
    Next tdf

    MsgBox "Cópias de tabelas concluídas com sucesso."

    ' Limpeza de variáveis
    Set tdf = Nothing
    Set db = Nothing

    Exit Sub

TrataErro:
    ' Registra o erro na tabela de log
    Call RegistraLog(db, "Erro durante cópia", Err.Description)
    MsgBox "Ocorreu um erro: " & Err.Description, vbCritical

End Sub

Sub RegistraLog(ByVal db As DAO.Database, ByVal acao As String, ByVal descricao As String)

    Dim rs As DAO.Recordset

    ' Abre ou cria a tabela de log
    On Error Resume Next
    Set rs = db.OpenRecordset("tblBackupLog", dbOpenTable)
    If Err.Number <> 0 Then
        ' Cria a tabela de log se não existir
        db.Execute "CREATE TABLE tblBackupLog (ID COUNTER PRIMARY KEY, Acao TEXT(255), Descricao TEXT(255), DataHora DATETIME)"
        Set rs = db.OpenRecordset("tblBackupLog", dbOpenTable)
    End If
    On Error GoTo 0

    ' Adiciona um novo registro de log
    rs.AddNew
    rs!Acao = acao
    rs!Descricao = descricao
    rs!DataHora = Now
    rs.Update

    rs.Close
    Set rs = Nothing

End Sub

Explicação do Código


Conexão com o Banco de Dados

O código abre o banco de dados atual (CurrentDb).

Renomeação e Cópia das Tabelas:

Cada tabela no banco de dados é percorrida usando um loop For Each.

O nome da cópia da tabela é gerado adicionando a data e hora ao nome original da tabela.

A cópia é feita utilizando a instrução SELECT INTO.

Registro de Logs:

A função RegistraLog é usada para registrar cada operação de cópia em uma tabela de log chamada tblBackupLog. Se essa tabela não existir, ela é criada automaticamente.

Os registros incluem a ação realizada e uma descrição, juntamente com a data e hora da operação.

Tratamento de Erros:

O código captura e trata erros, registrando qualquer problema na tabela de log e informando o usuário via MsgBox.

Como Usar

Invocação: Execute este código diretamente no Access para criar cópias de todas as tabelas no banco de dados, com nomes renomeados para incluir a data e hora da cópia.

Logs: Consulte a tabela tblBackupLog para ver o histórico de cópias e qualquer erro que possa ter ocorrido.

Este código é útil para criar cópias de segurança das tabelas no próprio banco de dados, mantendo um histórico de backups realizados e facilitando a rastreabilidade.

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

Envie 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

VBA Access | Como Auto-Compactar o arquivo ACCDB

VBA Access | Como Auto-Compactar o arquivo ACCDB

Aqui está um código VBA que você pode usar para auto-compactar o arquivo .accdb assim que ele for aberto. O código deve ser colocado em um módulo e será executado automaticamente na abertura do banco de dados.


Código VBA para Compactar Banco de Dados ao Abrir

 Private Sub CompactarAoAbrir()


    Dim strPath As String

    Dim strBackupPath As String

    Dim strTempDB As String


    On Error GoTo TrataErro


    ' Caminho completo do banco de dados atual

    strPath = CurrentDb.Name


    ' Caminho do backup antes de compactar

    strBackupPath = Left(strPath, Len(strPath) - 6) & "_backup_" & Format(Now, "yyyymmdd_hhmmss") & ".accdb"


    ' Caminho do banco de dados temporário usado para a compactação

    strTempDB = Left(strPath, Len(strPath) - 6) & "_temp.accdb"


    ' Cria uma cópia de segurança do banco de dados

    FileCopy strPath, strBackupPath


    ' Fecha o banco de dados atual para permitir a compactação

    Application.SetOption "Auto compact", False

    Application.Quit


    ' Compacta o banco de dados atual para o arquivo temporário

    DBEngine.CompactDatabase strPath, strTempDB


    ' Substitui o banco de dados original pelo arquivo compactado

    Kill strPath

    Name strTempDB As strPath


    ' Reabre o banco de dados original compactado

    Shell "msaccess.exe """ & strPath & """", vbNormalFocus


    Exit Sub


TrataErro:

    MsgBox "Erro durante a compactação: " & Err.Description, vbCritical

End Sub



Como Usar

Colocar o Código no Módulo:

Abra o Access.

Pressione Alt + F11 para abrir o Editor VBA.

 

Insira o código acima em um módulo novo ou existente.

Adicionar a Função ao Evento de Abertura:

No Editor VBA, expanda Formulários no painel de navegação.

Clique com o botão direito em Formulário Inicial, selecione Visualizar código.

No menu suspenso à esquerda, selecione Form, e à direita, Open.

Chame a função CompactarAoAbrir no evento Form_Open.

 


Private Sub Form_Open(Cancel As Integer)
    CompactarAoAbrir
End Sub


Desativar a Opção de Compactação Automática do Access:

O Access possui uma opção de compactação automática ao fechar, mas essa função será desabilitada pelo código Application.SetOption "Auto compact", False. 

Isso é necessário para evitar conflitos com a compactação personalizada ao abrir o banco de dados.


Explicação do Código

Criação de Backup:

O banco de dados atual é copiado para um arquivo de backup com a data e hora da execução.

Compactação:

O banco de dados é compactado em um arquivo temporário.
O arquivo original é substituído pelo banco de dados compactado.

Reabertura do Banco:

Após a compactação, o banco de dados é reaberto automaticamente para continuar o uso normal.

Tratamento de Erros:

Se ocorrer algum erro durante a compactação, o erro é tratado e uma mensagem de erro é exibida.

Este código garante que o banco de dados seja compactado automaticamente toda vez que for aberto, ajudando a manter o desempenho e a integridade do banco de dados.

 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

VBA Tips - Compactando e Descompactando arquivos




Baixe o Calendário Compacto para 2014 em Excel



O que é o fenômeno chamado BIG DATA?



Sim meus caros, existem relatórios repletos de dados pré-processados, contidos em cubos OLAP. os quais ficam enormes, e, enquanto espaço em disco tiver alguma importância, precisaremos compactá-los para distribuí-los.


Este primeiro código abaixo extrairá conteúdo de arquivos Zip. Note que o parâmetro "24" suprime qualquer janela de diálogo que possa existir encapsulada no arquivo compactado. O arquivo será automaticamente sobreposto.


Function UnZip (PathToUnzipFileTo As Variant, FileNameToUnzip As Variant)

    Dim objOApp As Object

    Dim varFileNameFolder As Variant


    Let varFileNameFolder = PathToUnzipFileTo


    Set objOApp = CreateObject("Shell.Application")


    objOApp.Namespace(varFileNameFolder).CopyHere objOApp.Namespace(FileNameToUnzip).items, 24

End Function


Sempre que possível, é bom termos um código diferente para aplicarmos uma técnica semelhante. Então segue mais um:

Sub UnZip(strTargetPath As String, Fname As Variant)

    Dim oApp As Object, FSOobj As Object

    Dim FileNameFolder As Variant


    If Right(strTargetPath, 1) <> Application.PathSeparator Then

        Let strTargetPath = strTargetPath & Application.PathSeparator

    End If


    Let FileNameFolder = strTargetPath


    'create destination folder if it does not exist

    Set FSOobj = CreateObject("Scripting.FilesystemObject")


    If FSOobj.FolderExists(FileNameFolder) = False Then

        FSOobj.CreateFolder FileNameFolder

    End If


    Set oApp = CreateObject("Shell.Application")


    oApp.Namespace(FileNameFolder).CopyHere oApp.Namespace(Fname).items


    Set oApp = Nothing

    Set FSOobj = Nothing

    Set FileNameFolder = Nothing

End Sub


Ahh, e claro, não há sentido em ensinar a descompactar e não ensinar a como compactar, não é mesmo? Divirtam-se!

Sub zip_activeworkbook()

    Dim strDate As String, DefPath As String

    Dim FileNameZip, FileNameXls

    Dim oApp As Object

    If ActiveWorkbook Is Nothing Then Exit Sub


    Let DefPath = ActiveWorkbook.Path


    If Len(DefPath) = 0 Then

        msgbox "Plz Save activeworkbook before zipping" & Space(12), vbInformation, "zipping"


        Exit Sub

    End If

    

    If Right(DefPath, 1) <> "\" Then

        Let DefPath = DefPath & "\"

    End If

    'Create date/time string and the temporary xls and zip file name

    Let strDate = Format(Now, " dd-mmm-yy h-mm-ss")

    Let FileNameZip = DefPath & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & strDate & ".zip"

    Let FileNameXls = DefPath & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & strDate & ".xls"

    If Dir(FileNameZip) = "" And Dir(FileNameXls) = "" Then

        'Make copy of the activeworkbook

        ActiveWorkbook.SaveCopyAs FileNameXls

        'Create empty Zip File

        newzip (FileNameZip)

        'Copy the file in the compressed folder

        Set oApp = CreateObject("Shell.Application")

       oApp.Namespace(FileNameZip).CopyHere FileNameXls

        'Keep script waiting until Compressing is done

        On Error Resume Next


        Do Until oApp.Namespace(FileNameZip).items.Count = 1

            Application.Wait (Now + TimeValue("0:00:01"))

        Loop


        On Error GoTo 0

        'Delete the temporary xls file

        Kill FileNameXls

        msgbox "completed zipped : " & vbNewLine & FileNameZip, vbInformation, "zipping"

    Else

        msgbox "FileNameZip or/and FileNameXls exist", vbInformation, "zipping"


    End If

End Sub


Private Sub newzip(sPath)

    'Create empty Zip File


    If Len(Dir(sPath)) > 0 Then Kill sPath

        Open sPath For Output As #1


        Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)

    Close #1

End Sub


Tags: VBA, Zip, compact, Compactar, zipping, unzip, 




diHITT - Notícias