Como saber pelo VBA se uma tabela existe
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Existem duas formas simples para verificarmos a existência de tabela: uma, é tentarmos abrir a tabela pelo objeto Recordset e a outra, é consultarmos a tabela de sistema MSysObjects.
Objeto Recordset
Ao tentarmos abrir uma tabela não existente pelo Recordset, o VBA acusará um erro.
Dim rs As DAO.Recordset
'-------------------------------
'Abrindo a tabela pelo Recordset
'------------------------------- Set rs = CurrentDb.OpenRecordset("tblAlunos")
Veja o número(3078) e a mensagem informada pelo VBA , por não encontrar a tabela:
Com a linha On error Resume next no início do código, o VBA prossegue com a execução, mesmo havendo erro e nenhuma mensagem é exibida .
Logo após a execução da linha do Recordset, podemos consultar se o número 3078 foi registrado no objeto Err.
Veja o código completo abaixo e leia com atenção os comentários:
Faça o login aqui para ter acesso ao código.
Agora é só utilizar a função no seu código. Exemplo:
If fncTabelaExiste("tblAlunos") then
'Se a tabela existe, faço algo aqui
else
'Se a tabela NÃO existe, faço algo aqui
end if
Tabela MsysObject
Quando criamos ou vinculamos uma tabela, o Access armazena o nome (name) e o seu tipo (type) na tabela de sistema MSysObjects. Se a tabela criada for local, o campo type armazenará o valor 1 e se a tabela for vinculada, a type armazenará o valor 6.
Basta, então, usarmos a função Dcount() para contar a quantidade de registros existentes na tabela MSysObject, que contenha o nome da tabela pesquisada. Se a contagem for maior que zero a tabela pesquisada existe. Veja no código abaixo:
Faça o login aqui para ter acesso ao código.
Modificando um pouco a função acima, podemos ampliar a pesquisa para os objetos consulta, formulário e relatório:
Faça o login aqui para ter acesso ao código.
Para pesquisarmos se um formulário existe, basta utilizarmos a função da seguinte forma:
If fncObjetoExiste("frmAlunos", Formulario) then
'Formulário existe, faço algo aqui
else
'Formulário NÃO existe, faço algo aqui
end if
Para saber sobre enumeração (Enum), clique aqui e leia o meu artigo.
Existência de campo na tabela
Com esta linha de comando abaixo, conseguimos contar a quantidade de campos em uma tabela:
CurrentDb.TableDefs("NomeDaTabela").Fields.Count
Com esta linha abaixo, capturamos o nome do campo na tabela:
CurrentDb.TableDefs("NomeDaTabela").Fields(NúmeroIndice).Name
Através do FOR, conseguimos percorrer todos os campos da tabela e assim investigarmos o seu nome:
Faça o login aqui para ter acesso ao código.
Utilizando a função:
If fncCampoExiste("NomeAluno", "tblAlunos") then
'Campo existe, faço algo aqui
else
'Campo NÃO existe, faço algo aqui
end if
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
6 comentário(s) Selle 21/03/2022 16:58:13 Avelino, um pequeno adendo no seu código... Nesta linha --> Set rs = CurrentDb.OpenRecordset(Nometabela) <-- Voce nao digitou o "str" na frente de (Nometabela). Public Function fncTabelaExiste(strNomeTabela As String) As Boolean Dim rs As DAO.Recordset '--------------------------------------------------------------- 'Solicita ao VBA que prossiga com a execução do código, 'mesmo havendo erro e não mostre nenhuma mensagem. '--------------------------------------------------------------- On Error Resume Next '----------------------------------- 'Abre a tabela pesquisada '----------------------------------- Set rs = CurrentDb.OpenRecordset(Nometabela) '--------------------------------------------------------------- 'Se a tabela não existir, haverá erro e o valor(3078) será 'armazenado no objeto Err. Este valor poderá ser investigado 'através do comando Err.number '--------------------------------------------------------------- fncTabelaExiste = Not Err.Number = 3078 Set rs = Nothing End Function Joseny 09/09/2021 11:41:19 Prezado Avelino, Peguei a rotina acima para testar e realmente ele encontra a tabela quando existe, porém, quando não existe ele não inibe o erro mesmo estando com a linha "On Error Resume Next" conforme vc explicou. Será que tem algum parâmetro que preciso mexer? Obigado! Marcio Melo - RJ 01/09/2021 19:58:09 Nunca tive uma idéia de como poderia manipular tabela e campo no access, agora com esse método de abordagem. Era o que me faltava para incrementar novos campos quando preciso adicionar em uma tabela eu faço manualmente, agora se não existir posso fazer um create. Muito bacana as possibilidades... Avelino deixo essa idéia de um exemplo de form onde podemos criar novos campos X numa tabela X (vincula com senha) que determinarmos. Sou mais Brasil! Forte abraço! Eduardo Rubio 26/08/2021 17:33:11 Muito boa explicação, parabéns!!! Isso é muito útil nos aplicativos... Gilailson 26/08/2021 13:20:54 Avelino como faço para aprender a utilizar os Actvex - TreeView e ListView???? Procurei em vários sites e não encontro. E seu modo de ensinar é tudo de bom!!! Att...gilailsonpl@yahoo.com Vítor Perotto 13/02/2021 10:16:22 Excelente postagem. Utilizei a função "fncCampoExiste" e funcionou perfeitamente. Muito obrigado! |