CRIAR CAMPO NO BD EM RUN TIME
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.
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.
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
"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
no access não tem virgula nem o comando after
cnn.execute "alter table [tabela] add column [nomecampo] [tipocampo]"
cnn.execute "alter table [tabela] add column [nomecampo] [tipocampo]"
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
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
HUGOSSOUZA como você faz pra saber se esse campo já existe?
Cnn.Execute "alter table [TabVisitantes] add column [sdata] [text]"
"Syntax error in field definition"
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
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
Lucas eu já vou testar seu código, obrigado pela contribuição! ;)
Hugo, assim deu certo:
Mas criu um campo memorando ao invés de texto ¬¬
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 ¬¬
vc tem q definir o tamanho do campo texto
ex:
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
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
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
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!
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