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 Function
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:
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 Function
Os 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 Sub
para 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 If
Onde 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 Function
Essa 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