Notifications
Clear all

Informar se o nome do Field já existe na Tabela - VBA

2 Posts
1 Usuários
0 Reactions
1,063 Visualizações
(@heittor)
Posts: 13
Active Member
Topic starter
 

Prezados, boa tarde.

Estou precisando de um código VBA que, na tabela selecionada, traga o nome dos campos da tabela e me retorne true caso já exista.

Estou usando o código abaixo, mas este só serve para verificar se a tabela existe. Queria que, quando passasse o field, ele me dissesse se existe ou não.

Segue o código que uso atualmente:

Function SeCampoExiste(ByVal fieldName As String, ByVal TableName As String) As Boolean
  
  ' Cria o Recordset
  Dim rsTabela As ADODB.Recordset
    
  ' Cria o Field
  Dim fld As ADODB.Field
      
  ' Solicita ao VBA o prosseguimento da execução, mesmo com erro
  ' O erro será tratado mais a frente
  On Error Resume Next
  
  With rsTabela
    Do While Not .EOF
      If .Fields("TABLE_TYPE") <> "VIEW" Then
        If .Fields("TABLE_NAME") = TableName Then
         ' *PRECISO DE UM IF AQUI QUE VALIDE O FIELD
          SeCampoExiste = True
          Exit Do
        
        End If
      End If
      .MoveNext
    Loop
  End With
            
End Function

Aguardo as respostas! :mrgreen: :mrgreen:

 
Postado : 19/02/2015 12:01 pm
(@heittor)
Posts: 13
Active Member
Topic starter
 

Pessoal, consegui resolver!

Segue abaixo a solução do problema para o pessoal que estiver com a mesma dúvida.

Function SeCampoExiste(ByVal fieldName As String, ByVal TableName As String) As Boolean
  
  ' Cria o Recordset
  Dim rsTabela As ADODB.Recordset
      
  ' Cria a variável para a coluna
  Dim column As ADODB.Recordset
  
  ' Solicita ao VBA o prosseguimento da execução, mesmo com erro
  ' O erro será tratado mais a frente
  On Error Resume Next
        
  Set column = oConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, TableName))
  
  ' Abre a tabela pesquisada
  Set rsTabela = oConn.OpenSchema(adSchemaTables)
  
  With rsTabela
    Do While Not .EOF
      If .Fields("TABLE_TYPE") <> "VIEW" Then
        If .Fields("TABLE_NAME") = TableName Then
          Do While Not column.EOF
            If column("COLUMN_NAME") = fieldName Then
              SeCampoExiste = True
              GoTo FIMM
            End If
            column.MoveNext
          Loop
        End If
      End If
    .MoveNext
    Loop
  End With
            
FIMM:

End Function
 
Postado : 20/02/2015 7:43 am