CRIAR CAMPO NO BD EM RUN TIME

DREAMSOFT 11/04/2007 16:01:05
#211300
Boa Tarde pessoal!

Alguém tem idéia de como criar um campo em um BD Access em tempo de execução? Se possivel, antes verificiar a existencia do campo.
Andei pesquisando no fórum mas não obtive sucesso nos código que achei.

Vlw novament.
VBAPRENDE 11/04/2007 16:36:59
#211315
para adicionar um campo no bd você pode colocar assim no seu comando sql

"alter table nome_da_sua_tabela ,add column nome_do_campo_novo char (2) NULL after aqui_nome_do_após_o_campo_que_voce_quiser"

Vlw

HUGOSSOUZA 11/04/2007 16:55:39
#211331
Resposta escolhida
no access não tem virgula nem o comando after

cnn.execute "alter table [tabela] add column [nomecampo] [tipocampo]"
VBAPRENDE 11/04/2007 17:21:35
#211342
eu uso assim no mysql para ver se um campo existe
coloco no meu sql assim: "desc nome_tabela nome_campo" se o retorno contiver alguma coisa é porque o campo existe, se retornar nada é porque o campo não existe
DREAMSOFT 12/04/2007 08:20:20
#211406
HUGOSSOUZA como você faz pra saber se esse campo já existe?
DREAMSOFT 12/04/2007 08:25:03
#211407
  Cnn.Execute "alter table [TabVisitantes] add column [sdata] [text]" 


"Syntax error in field definition"
LUCASVA 12/04/2007 08:30:58
#211409
eu criei uma rotina pra fazer uma verificação e ela retorna true caso ache o campo em uma tabela e ainda pesquisa para ver se é de um tipo pré determinado;

se for ajuda ai me pontuando

Function CampoExisteTabela(ByRef NomeCampo As String, _
ByRef NomeTabela As String, _
Optional CamBd As String, _
Optional TipoNomeCampo As String, _
Optional TamCampoTipoText As Integer) As Boolean
On Error Resume Next
Dim Rst As Recordset
Dim BD As Database
Dim Vet(15) As String
If Trim(CamBd) = "" Then
Set BD = OpenDatabase(CaminhoBanco)
Else
If Dir(CamBd) = "" Then
Exit Function
End If

Set BD = OpenDatabase(CamBd)
End If

Set Rst = BD.OpenRecordset(NomeTabela)
If err.Number = 3078 Then
Exit Function
End If
CampoExisteTabela = False

For Each Campo In Rst.Fields
If (UCase(NomeCampo) = UCase(Campo.Name)) Then
If Trim(TipoNomeCampo = "") Then
CampoExisteTabela = True
Exit For
ElseIf Trim(TipoNomeCampo <> "") Then
Vet(1) = ("BOOLEAN")
Vet(2) = ("BYTE")
Vet(3) = ("INTEIRO")
Vet(4) = ("LONGO")
Vet(5) = ("MOEDA")
Vet(6) = ("SIMPLES")
Vet(7) = ("DUPLO")
Vet(8) = ("DATA")
Vet(10) = ("TEXTO")
Vet(12) = ("MEMO")
For Cont = 1 To 12
If (Campo.Type = Cont) Then
If Vet(Cont) = UCase(TipoNomeCampo) Then
If TipoNomeCampo = "TEXTO" And Val(TamCampoTipoText) > 0 Then
If Campo.Size = Val(TamCampoTipoText) Then
CampoExisteTabela = True
End If
ElseIf TipoNomeCampo = "TEXTO" And Val(TamCampoTipoText) = 0 Then
CampoExisteTabela = True
Else
CampoExisteTabela = True
End If
End If
Exit For
End If
Next
Exit For
End If
End If
Next

Rst.Close
Set Rst = Nothing
End Function




DREAMSOFT 12/04/2007 08:42:29
#211414
Lucas eu já vou testar seu código, obrigado pela contribuição! ;)

Hugo, assim deu certo:

          
Dim sql81 As String
sql81 = "ALTER TABLE TabVisitantes ADD sdata Text NULL"
cnn.Execute sql81


Mas criu um campo memorando ao invés de texto ¬¬
HUGOSSOUZA 12/04/2007 08:58:48
#211419
vc tem q definir o tamanho do campo texto

ex:
"ALTER TABLE TabVisitantes ADD sdata Text(10) NULL"


para saber se um campo existe acho q tem q fazer um loop pesquisando todos os campos da tabela...
vou ver se acho um exemplo e ja posto
HUGOSSOUZA 12/04/2007 09:03:59
#211422
ve se isso te ajuda:

   rs.Open [tabela], [conexao], adOpenDynamic, adLockOptimistic
For mFields = 0 To rs.Fields.Count - 1
if rs.Fields(mFields).Name = [NomeDoCampoQueDesejaSaberSeExiste] then
msgbox "campo ja existe"
else
' cria o campo
end if
Next
DREAMSOFT 12/04/2007 09:10:10
#211424
HUGOSSOUZA eu estou usando o procedimento que você me passou!
Quanto a verificação do campo, eu estou ignorando. Ele dá um erro quando já existe, mais nada do que um "On Error Resume Next" não resolva =]


Vlw novamente, fico grato a vcs!
Tópico encerrado , respostas não são mais permitidas