ACC: Como localizar se existe um objeto em um banco de dados

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 90989
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Moderado: Requer básica de macro, codificação e interoperabilidade habilidades.
Sumário
Este artigo mostra como criar uma função definida pelo usuário de exemplo para verificar se existe um objeto no banco de dados atual antes de criar um novo objeto (como uma tabela, formulário ou relatório) no banco de dados.

Este artigo presume que você esteja familiarizado com Visual Basic for Applications e com a criação de aplicativos do Microsoft Access usando as ferramentas de programação fornecidas com o Microsoft Access. Para obter mais informações sobre o Visual Basic for Applications, consulte sua versão do manual "Criando aplicativos com o Microsoft Access".

Observação: o Visual Basic for Applications é denominado Access Basic no Microsoft Access versões 1.x e 2.0. Para obter mais informações sobre o Access Basic, consulte o manual "Introdução à programação" no Microsoft Access versão 1.x ou no manual "Building Applications" no Microsoft Access versão 2.0
Mais Informações
Para criar a função, abra um novo módulo e digite o código apropriado para sua versão do Microsoft Access.

Observação: No exemplo de código a seguir, um sublinhado (_) no final de uma linha é usado como um caractere de continuação de linha. Remova o sublinhado do final da linha quando recriar esse código no Access Basic.

Microsoft Access versões 2.0, 7.0 e 97

 '********************************************************************   'Declarations section of the module  '********************************************************************   Option Explicit  '********************************************************************   ' FUNCTION: ObjectExists_20()   '   ' PURPOSE:   '    Determines whether the specified object exists in the   '    current database.   '   ' ARGUMENTS:   '    ObjectType - A string representing the object whose names are to   '                 be retrieved. ObjectType can be one of the   '                 following:   '   '                 Tables, Queries, Forms, Reports, Macros, Modules   '   '    ObjectName - A string representing the name of the specified   '                 ObjectType.   '   ' RETURNS:   '    True (-1), if the object exists.   '    False (0), if the object does not exist.   '   ' NOTES:   '    This function uses data access objects (DAO) to determine if   '    the specified object exists in the current database.   '  '********************************************************************   Function ObjectExists_20% (ObjectType$, ObjectName$)   On Error Resume Next   Dim Found_Object%, Find_Object As String, ObjectNum As Integer   Dim DB As Database, T As TableDef   Dim Q As QueryDef, C  As Container   Dim Msg As String   Found_Object% = -1   Set DB = dbengine(0)(0)   Select Case ObjectType$   Case "Tables"       Find_Object = DB.TableDefs(ObjectName$).Name   Case "Queries"       Find_Object = DB.QueryDefs(ObjectName$).Name   Case Else       If ObjectType$ = "Forms" Then           ObjectNum = 1       ElseIf ObjectType$ = "Modules" Then           ObjectNum = 2       ElseIf ObjectType$ = "Reports" Then           ObjectNum = 4       ElseIf ObjectType$ = "Macros" Then           ObjectNum = 5       Else            Msg = "Object Name """ & ObjectType & """ is an invalid"            Msg = Msg & " argument to function ObjectExists_20!"            MsgBox Msg, 16, "ObjectExists_20"            Exit Function       End If       Set C = DB.Containers(ObjectNum)       Find_Object = C.Documents(ObjectName$).Name   End Select   If Err = 3265 Or Find_Object = "" Then       Found_Object% = 0   End If   ObjectExists_20% = Found_Object%   End Function				

Microsoft Access versão 1.x

Observação: No exemplo de código a seguir, um sublinhado (_) no final de uma linha é usado como um caractere de continuação de linha. Remova o sublinhado do final da linha quando recriar esse código no Access Basic.
  '********************************************************************   'Declarations section of the module '********************************************************************   Option Explicit '********************************************************************   ' FUNCTION: ObjectExists_1x()   '   ' PURPOSE:   '    Determines whether the specified object exists in the   '    current database.   '   ' ARGUMENTS:   '    ObjectType - A string representing the object whose names are to   '                 be retrieved. ObjectType can be one of the   '                 following:   '   '                 Tables, Queries, Forms, Reports, Macros, Modules   '   '    ObjectName - A string representing the name of the specified   '                 ObjectType.   '   ' RETURNS:   '    True (-1), if the object exists.   '    False (0), if the object does not exist.   '   ' NOTES:   '    This function uses information stored in the MSysObjects   '    system table of the current database. The system tables   '    are undocumented and are subject to change in future versions of   '    Microsoft Access.   ' '********************************************************************   Function ObjectExists_1x% (ObjectType As String, ObjectName As String)      On Error Resume Next      Dim db As Database      Dim ss As Snapshot      Dim SQL      Dim Msg As String      SQL = "Select Name, Type from MSysObjects Where Type="      ObjectExists_1x% = 0      Select Case ObjectType         Case "Tables"            SQL = SQL & "1 And [Name] = '" & ObjectName & "'Order By _                Name;"      Case "Queries"         SQL = SQL & "5 And [Name] = '" & ObjectName & "'Order By Name;"      Case "Forms"         SQL = SQL & "-32768 And [Name] = '" & ObjectName & "' Order By _         Name;"      Case "Reports"         SQL = SQL & "-32764 And [Name] = '" & ObjectName & "' Order By _         Name;"      Case "Macros"         SQL = SQL & "-32766 And [Name] = '" & ObjectName & "' Order By _         Name;"      Case "Modules"         SQL = SQL & "-32761 And [Name] = '" & ObjectName & "' Order By _         Name;"      Case Else         Msg = "Object Name """ & ObjectType & """ is an invalid"         Msg = Msg & " argument to function ObjectExists_1x!"         MsgBox Msg, 16, "ObjectExists_1x"         Exit Function      End Select      Set db = CurrentDB()      Set ss = db.CreateSnapshot(SQL)      ss.MoveLast      If ss.RecordCount > 0 Then         ObjectExists_1x% = -1      End If   End Function				

Como usar a função

  1. Abra o módulo que contém a função no modo de design e no menu Exibir, clique em janela Depurar (ou janela imediata na versão 2.0 ou anterior).
  2. Se você estiver usando o Microsoft Access versão 1.x, digite a seguinte linha na janela Verificação imediata e, em seguida, pressione ENTER:
    ? ObjectExists_1x("Tables","Employees")
    Se você estiver usando o Microsoft Access versões 2.0, 7.0 ou 97, digite a seguinte linha na depuração janela, (ou na janela Verificação imediata) e, em seguida, pressione ENTER:
    ? ObjectExists_20("Tables","Employees")
Se existe uma tabela chamada Employees no banco de dados atual - 1 será retornado. Não se existir nenhuma tabela chamada Employees, 0 será retornado.

Propriedades

ID do Artigo: 90989 - Última Revisão: 12/04/2015 09:19:38 - Revisão: 2.3

Microsoft Access 1.0 Standard Edition, Microsoft Access 1.1 Standard Edition, Microsoft Access 2.0 Standard Edition, Microsoft Access 95 Standard Edition, Microsoft Access 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbprogramming KB90989 KbMtpt
Comentários