VBA Access - Deletando tabelas e querys programaticamente - VBA Access: How to Programmatically Delete Tables and Queries

VBA Access - Deletando tabelas e querys programaticamente - VBA Access: How to Programmatically Delete Tables and Queries

Quando estamos criando múltiplas tabelas atualizáveis dinamicamente no MS Access e as disponibilizando para consultas externas como no próprio Access, Excel, Word ou Powerpoint, por vezes precisaremos checar se os seus respectivos nomes já não existem e em caso positivo deletá-las.

Uma funcionalidade para tal execução no próprio MS Access, através do nome da tabela, é a que descrevo abaixo:

    Function CheckTable(nTable As String)
        ' André Bernardes             06/06/2008 07:23    bernardess@gmail.com
        Dim db As Database
        Dim i As Integer

        Set db = DBEngine.Workspaces(0).Databases(0)

        db.TableDefs.Refresh

        For i = 0 To db.TableDefs.Count - 1
            If nTable = db.TableDefs(i).Name Then
                DoCmd.DeleteObject acTable, nTable      ' Table Exists.

                Exit For
            End If
        Next i

        Set db = Nothing
    End Function

' Função para verificar e excluir uma tabela no banco de dados do Access
' Melhorada por [Seu Nome] em [Data Atual]
' Revisado para melhorar legibilidade e robustez do código

Function CheckTable(nTable As String)
    ' Declaração das variáveis
    Dim db As Database  ' Objeto de banco de dados
    Dim i As Integer    ' Contador para iterar sobre as tabelas

    ' Verifica se o nome da tabela foi fornecido corretamente
    If Len(Trim(nTable)) = 0 Then
        MsgBox "Nome da tabela não fornecido.", vbExclamation, "Erro"
        Exit Function
    End If

    ' Define o objeto de banco de dados como o banco de dados atual
    Set db = DBEngine.Workspaces(0).Databases(0)

    ' Atualiza a coleção de TableDefs para garantir que estamos vendo as tabelas mais recentes
    db.TableDefs.Refresh

    ' Itera sobre todas as tabelas no banco de dados
    For i = 0 To db.TableDefs.Count - 1
        ' Verifica se a tabela existe comparando o nome
        If nTable = db.TableDefs(i).Name Then
            ' Se a tabela existir, deleta a tabela
            DoCmd.DeleteObject acTable, nTable
            MsgBox "Tabela '" & nTable & "' foi deletada com sucesso.", vbInformation, "Sucesso"
            Exit Function  ' Sai da função após deletar a tabela
        End If
    Next i

    ' Caso a tabela não seja encontrada
    MsgBox "Tabela '" & nTable & "' não encontrada.", vbExclamation, "Erro"

    ' Libera o objeto de banco de dados para evitar vazamentos de memória
    Set db = Nothing
End Function


Para deletarmos Querys, utilizaríamos:


Function CheckQuery(nQuery As String)
    ' Author:                     Date:               Contact:
    ' André Bernardes             30/04/2009 11:26    bernardess@gmail.com
    ' .

    Dim db As Database
    Dim i As Integer

    Set db = DBEngine.Workspaces(0).Databases(0)

    db.QueryDefs.Refresh

    For i = 0 To db.QueryDefs.Count - 1
        If nQuery = db.QueryDefs(i).Name Then
            DoCmd.DeleteObject acQuery, nQuery      ' Query Exists.

            Exit For
        End If
    Next i

    Set db = Nothing
End Function


' Função para verificar e excluir uma consulta no banco de dados do Access
' Melhorada por [Seu Nome] em [Data Atual]
' Revisado para melhorar legibilidade, robustez e adicionar tratamento de erros

Function CheckQuery(nQuery As String)
    ' Declaração das variáveis
    Dim db As Database  ' Objeto de banco de dados
    Dim i As Integer    ' Contador para iterar sobre as consultas

    ' Verifica se o nome da consulta foi fornecido corretamente
    If Len(Trim(nQuery)) = 0 Then
        MsgBox "Nome da consulta não fornecido.", vbExclamation, "Erro"
        Exit Function
    End If

    ' Define o objeto de banco de dados como o banco de dados atual
    Set db = DBEngine.Workspaces(0).Databases(0)

    ' Atualiza a coleção de QueryDefs para garantir que estamos vendo as consultas mais recentes
    db.QueryDefs.Refresh

    ' Itera sobre todas as consultas no banco de dados
    For i = 0 To db.QueryDefs.Count - 1
        ' Verifica se a consulta existe comparando o nome
        If nQuery = db.QueryDefs(i).Name Then
            ' Se a consulta existir, deleta a consulta
            DoCmd.DeleteObject acQuery, nQuery
            MsgBox "Consulta '" & nQuery & "' foi deletada com sucesso.", vbInformation, "Sucesso"
            Exit Function  ' Sai da função após deletar a consulta
        End If
    Next i

    ' Caso a consulta não seja encontrada
    MsgBox "Consulta '" & nQuery & "' não encontrada.", vbExclamation, "Erro"

    ' Libera o objeto de banco de dados para evitar vazamentos de memória
    Set db = Nothing
End Function


 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 de Livros nut 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


 PUDIM PROJECT 

eBook - PT - PUDIM PROJECT 2024 - Python Volume 01 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 02 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 03 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 04 - Funções para Automatização - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 05 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 06 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 07 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 08 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 09 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 10 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 11 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias