VERIFICAR SE EXISTE CAMPO EM TABELA E CRIAR

MARCELO.VB.PIRA 03/03/2005 09:51:43
#70902
Olá!!!

Eu de novo...

Bom, a dúvida é a seguinte:

Tenho um sistema instalado em diversas cidades, e agora eu tive que inserir mais um campo nos bancos de dados e fica inviável viajar para 4 estados diferentes para acertar o BD na unha. Tambem pensei na possibilidade de meus clientes me enviarem os BDÂÂÂ's via internet para eu consertar e depois mandar de volta, mas esta tática mostrou-se desastrosa da ultima vez que eu a utilizei. A utilização de "controle-remotos" (pcanyware por exemplo) depende MUITO do material humano do outro lado da conexao ( e isso dispensa maiores comentarios, não é???)

A melhor saída ao meu ver, seria implementar uma rotina de verificação no inicio do sistema e quando enviar a nova versão, junto já vai a solução para criar este novo campo no banco de dados já existente.

Conclusão:

Tenho um um arquivo denominado CLIENTES.MDB;
Dentro deste arquivo tenho várias tabelas e uma delas é denominada de CLIENTES
Preciso (Via código) verificar se existe dentro da tabela CLIENTES um campo doniminado EQUIPAMENTOS.
Se existir tudo bem, saia da rotina e continue normalmente.
Caso não exista, preciso criar este campo denominado EQUIPAMENTOS dentro da tabela CLIENTES que esta dentro do arquivo CLIENTES.MDB, este
campo será no formato TEXTO(Type=text) e terá tamanho(size) 10, Este campo aceitará valores nulos (AllowZeroLenght=TRUE), as propriedades fixedlenght, autoincrement e required serão FALSE e a propriedade variablelenghth será TRUE.

se houver alguma forma de na hora de criar o campo, já por um caractere válido nele ("." "_" "," etc) seria ótima, mas caso não seja possivel eu crio um loop para depois de criado o campo no Bd, eu preencho ele com caracteres válidos.

Obrigado. mais uma vez...


Obs. Notícias do Professor e do Joba???
THIAGO.CESAR 03/03/2005 11:57:40
#70932
Resposta escolhida
Marcelo, vou tentar te ajudar na medida que posso
Essa rotina verifica se o campo "Equipamentos" existe e depois atualiza todos os que estiverem am branco para "AAA"
Private Sub VerificarCampo()
Dim DB As DAO.Database, Campo As Field, rs As DAO.Recordset
Dim CampoExiste As Boolean

BancoDados = App.Path & "\Clientes.mdb"
Set DB = DBEngine.OpenDatabase(BancoDados)
Set rs = DB.OpenRecordset("CadClientes")
CampoExiste = False

For Each Campo In rs.Fields
If Campo.Name = "Equipamentos" Then
CampoExiste = True
End If
Next

If CampoExiste = True Then
Exit Sub
Else
'Criar campo (Vou pesquisar ainda)
End If

'Atualizar para "AAA" todos os equipamentos cujo valor é ""
DB.Execute ("Update Clientes Set Equipamentos = '---' where equipamentos =''")
End Sub


Para criar um campo, deve usar o rs.Fields.Append, mas ainda não sei a maneira correta.

Até mais
THIAGO.CESAR 03/03/2005 12:29:30
#70937
Marcelo, vai aí agora a rotina completa e testada...

Private Sub VerificarCampo()
Dim DB As DAO.Database, Campo As Field, rs As DAO.Recordset
Dim CampoExiste As Boolean, NovoCampo As New DAO.Field
Dim tb As DAO.TableDef

BancoDados = App.Path & "\Clientes.mdb"
Set DB = DBEngine.OpenDatabase(BancoDados)
Set rs = DB.OpenRecordset("Clientes")
CampoExiste = False

For Each Campo In rs.Fields
Debug.Print Campo.Size
If Campo.Name = "Equipamentos" Then
CampoExiste = True
End If
Next

rs.Close
Set rs = Nothing
If CampoExiste = True Then
Exit Sub
Else
NovoCampo.Name = "Equipamentos"
NovoCampo.Type = 10
NovoCampo.Size = 50
Set tb = DB.TableDefs("Clientes")
tb.Fields.Append NovoCampo
End If

DB.Close
Set tb = Nothing
Set DB = Nothing
'Atualizar para "AAA" todos os equipamentos cujo valor é ""

DB.Execute ("Update Clientes Set Equipamentos = '---' where equipamentos =''")
End Sub


Até logo... [S71]
MARCELO.VB.PIRA 03/03/2005 14:56:53
#70970
Desculpe a falta de QI, mas...

eu devo ignorar o primeiro exemplo e me ater apenas ao segundo???

e onde voce pos o AAA ???? (pergunto isso, pois vou querer por um pont (.) no lugar do AAA... seria o ÂÂÂ'---ÂÂÂ' ????

SOLUÇÃO!!!! teu nome é Thiago Cesar...

THIAGO.CESAR 03/03/2005 15:13:18
#70974
Ignore o primeiro (é que eu tinha colocado até onde eu sabia, depois eu pesquisei e postei na íntegra no segundo)

Onde eu coloquei "AAA" você substitua por qualquer coisa para não deixar os campos em branco, ou seja "." ou "---".
Na linha
NovoCampo.Size = 50
Coloque 10, eu coloquei 50 para os meus testes aqui, mas vi que quer 10.
Consulte também as outras propriedades do "NovoCampo", para personalizar ainda mais.

Quanto ao seu comentário final[S66]... Todo dia eu levo uma surra do VB, um dia ou outro posso ajudar alguém...[S20]
MARCELO.VB.PIRA 04/03/2005 09:24:04
#71065
THIAGO CESAR!!!!!!!

foi DEZ!!!!!!

valeu MESMO!!!!!!

Tópico encerrado , respostas não são mais permitidas