CHECAR SE UM CAMPO EXISTE NO ACCESS
                    Pessoal
Tenho um sistema instalado em várias empresas, quando faço uma alteração no banco para alguém, os demais ficam sem essa alteração.
Preciso de uma função que teste o banco de dados (access) e verifique se os campos estão todos lá, senão, deve ser criado o campo.
Alguém me ajuda? é urgente...
                
            Tenho um sistema instalado em várias empresas, quando faço uma alteração no banco para alguém, os demais ficam sem essa alteração.
Preciso de uma função que teste o banco de dados (access) e verifique se os campos estão todos lá, senão, deve ser criado o campo.
Alguém me ajuda? é urgente...
                    Você utiliza DAO ou ADO?
Para você criar uma base de dados Access devemos usar a ADOX .
Você deve fazer referência ao Microsoft ADO Ext. 2.X for DDL and Security (menu Project | References).
Para criar uma tabela com ADOX, faça assim:
Os nomes dos tipos de dados para as colunas são diferentes das usadas na DAO.
Tipos de Dados ADO :
Bem, aqui você aprendeu como criar uma base de dados, tabelas e campos. Já pode te dar um norte. Não me lembro exatamente como testar a existencia de um campo especÃfico. Mais tarde eu tento descobrir.
Mas para você ir tentando: tente capturar o erro, e, assim, criar o campo... sei lá. Vai pensando aÃ.
            Para você criar uma base de dados Access devemos usar a ADOX .
Public Function CreateDB(Path As String) As Boolean
       On Error Resume Next
       Dim Catalog As New ADOX.Catalog
       Catalog.Create [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & Path
       CreateDB = Err.Number = 0
End FunctionVocê deve fazer referência ao Microsoft ADO Ext. 2.X for DDL and Security (menu Project | References).
Para criar uma tabela com ADOX, faça assim:
Function CreateTbl() as Boolean
	 Dim Catalogo As New ADOX.Catalog 
	 Dim tbl As New ADOX.Table 
	 Catalogo.ActiveConnection = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & [Ô]Data Source=C:
wind.mdb;[Ô] 
	 With tbl 
	      .Name = [Ô]Contatos[Ô]  
	      .Columns.Append [Ô]Nome[Ô], adVarWChar 
	      .Columns.Append [Ô]Endereco[Ô], adVarWChar 
	      .Columns.Append [Ô]Telefone[Ô], adVarWChar 
	      .Columns([Ô]Telefone[Ô]).Attributes = adColNullable 
	 End With 
	 Catalogo.Tables.Append tbl 
	 Set Catalogo = Nothing 
End FunctionOs nomes dos tipos de dados para as colunas são diferentes das usadas na DAO.
Tipos de Dados ADO :
adBinary  
adBoolean  
adUnsignedTinyInt  
adCurrency  
adDate  
adNumeric  
adDouble  
adGUID  
adSmallInt  
adInteger  
adLongVarBinary  
adLongVarWChar  
adSingle  
adVarWChar  Bem, aqui você aprendeu como criar uma base de dados, tabelas e campos. Já pode te dar um norte. Não me lembro exatamente como testar a existencia de um campo especÃfico. Mais tarde eu tento descobrir.
Mas para você ir tentando: tente capturar o erro, e, assim, criar o campo... sei lá. Vai pensando aÃ.
                    Legal, eu já consigo criar os campos, mas preciso checar se os mesmo já existem.
Agora esse é o problema.
            Agora esse é o problema.
                    assim colega uma função que pode ser adaptada para isto
o código abaixo irá listar as tabelas em um listbox todas tabelas e campos de um banco de dados, basta vc fazer as comparaçoes
para usar
call ListarTabelasADO
                
            o código abaixo irá listar as tabelas em um listbox todas tabelas e campos de um banco de dados, basta vc fazer as comparaçoes
Sub ListarTabelasADO()
    Dim Conn As New ADODB.Connection
    Dim TablesSchema As ADODB.Recordset
    Dim ColumnsSchema As ADODB.Recordset
    Conn.Provider = [Ô]MSDASQL[Ô]
    Conn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
           [Ô]Data Source=[Ô] & App.Path &[Ô]\SeuBD.MDB;Jet [Ô] & _
           [Ô]OLEDB:Database Password=senha;[Ô]
    Set TablesSchema = Conn.OpenSchema(adSchemaTables)
    Do While Not TablesSchema.EOF
        DoEvents
        Set ColumnsSchema = Conn.OpenSchema(adSchemaColumns, _
                                            Array(Empty, Empty, [Ô][Ô] & TablesSchema([Ô]TABLE_NAME[Ô])))
        Do While Not ColumnsSchema.EOF
            DoEvents
            List1.AddItem TablesSchema([Ô]TABLE_NAME[Ô]) & [Ô], [Ô] & _
                        ColumnsSchema([Ô]COLUMN_NAME[Ô])
            ColumnsSchema.MoveNext
        Loop
        TablesSchema.MoveNext
    Loop
End Subpara usar
call ListarTabelasADO
                    ou se preferir pode usar um projetinho como este:
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=6861
            http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=6861
                    Tente isso e veja se da certo:
Onde rs é o seu RecordSet, e Campo o campo que você deseja verificar.
            If (Not rs([Ô]Campo[Ô]) Is Nothing) Then
   [ô]o campo existe
Else
   [ô]o campo não existe
End IfOnde rs é o seu RecordSet, e Campo o campo que você deseja verificar.
                    Aliás, esqueça o código acima. Tente isso:
Essa função explora o erro gerado ao tentar acessar um campo que não existe.
            Function VerificaTabela() as Boolean
         
         On Error Goto Erro
         Dim tb As New ADODB.Recordset
         tb.Open [Ô]SELECT * FROM usuarios[Ô], Conn, adOpenForwardOnly, adLockOptimistic
         If Not tb.Fields([Ô]E2[Ô]) Is Nothing Then
            MsgBox [Ô]porra[Ô]
         End If
	 Exit FUnction
Erro:
	 Select Case Err
	        Case 3265 [ô]O campo não existe
                     [ô]Criar o campo com o código do post 1
		     Resume Next 	
                Case Else
                     [ô]Outro tipo de erro
         End Select
End FunctionEssa função explora o erro gerado ao tentar acessar um campo que não existe.
                        Tópico encerrado , respostas não são mais permitidas
                    
                

