CRIAR COLUNA ACCESS

LUISNET10 22/05/2011 20:42:07
#374710
Tenho uma base de dados em Access.. e preciso adicionar alguns colunas em tabelas ja existentes, queria fazer isso via codigo, utilizo o codigo abaixo, só que a propriedade requerido fica = true, e tenho q deixar ela como false....

Ja tentei de tudo e não consegui ainda, alguma solução, por favor.

On Error GoTo Erro_Importar

Set xCn = New ADODB.Connection
xCn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & sDadosReferencia & [Ô];Persist Security Info=False[Ô]

Dim xCn1 As ADODB.Connection
Set xCn1 = New ADODB.Connection
xCn1.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & sDadosAlterada & [Ô];Persist Security Info=False[Ô]

Dim tabela As String
Dim coluna As String
Dim tipo As String
Dim tamanho As String

Dim cNColuna As New ADOX.Column


[ô]Catalago da base referencia
Dim cBReferencia As New ADOX.Catalog
Dim tBReferencia As New ADOX.Table
Dim coBReferencia As New ADOX.Column

cBReferencia.ActiveConnection = xCn

[ô]Catalago da base a ser alterada
Dim cBAlterar As New ADOX.Catalog
Dim tBAlterar As New ADOX.Table
Dim coAlterar As New ADOX.Column

cBAlterar.ActiveConnection = xCn1

[ô]Verificar se a tabela ja existe
Dim dExisteTabela As Boolean
Dim dExisteColuna As Boolean
dExisteTabela = False
dExisteColuna = False

For Each tBReferencia In cBReferencia.Tables
strTableSys = Left(tBReferencia.Name, 4)
If tBReferencia.Type = [Ô]VIEW[Ô] Then
ElseIf strTableSys = [Ô]MSys[Ô] Then
Else

For Each tBAlterar In cBAlterar.Tables
If tBAlterar.Name = tBReferencia.Name Then dExisteTabela = True
Next

[ô]Se a tabela nao existe ele cria
If dExisteTabela = False Then
Call mdlDados.Importar(sDadosReferencia, sDadosAlterada, tBReferencia.Name)
frmAtualizarBase.lstAlterados.AddItem [Ô]Tab.[Ô] & tBReferencia.Name
Else
[ô]Se por acaso a tabela ja existir...vamos verificar se as colunas existem

For Each coBReferencia In tBReferencia.Columns
For Each coAlterar In cBAlterar.Tables(tBReferencia.Name).Columns
If (UCase(coBReferencia.Name) = UCase(coAlterar.Name)) Then dExisteColuna = True
Next

[ô]nao existe a coluna vamos criar
If dExisteColuna = False Then
coluna = coBReferencia.Name
tipo = coBReferencia.Type
tamanho = coBReferencia.DefinedSize
tabela = tBReferencia.Name

Call cBAlterar.Tables(tBReferencia.Name).Columns.Append(coluna, tipo, tamanho)

If tipo = 5 Then
cBAlterar.Tables(tBReferencia.Name).Columns(coluna).Properties([Ô]Default[Ô]).Value = 0
Else
cBAlterar.Tables(tBReferencia.Name).Columns(coluna).Properties([Ô]Default[Ô]).Value = [Ô][Ô]
End If

cBAlterar.Tables(tBReferencia.Name).Columns.Item(coluna).Attributes = adColNullable
cBAlterar.Tables(tBReferencia.Name).Columns(coluna).Properties([Ô]Jet OLEDB:Allow Zero Length[Ô]).Value = True
frmAtualizarBase.lstAlterados.AddItem tBReferencia.Name & [Ô]-[Ô] & coluna, 0
End If

[ô]existindo ou nao faz uma comparacao com a estrutura
dExisteColuna = False
Next

End If

End If

dExisteTabela = False
Next
LUISNET10 23/05/2011 18:41:52
#374797
Nesse Codigo acima eu comparo duas bases de dados e altero uma com o que não existe da outra...

Só preciso de um codigo para criar um campo em uma tabela que ja tem registro.. e esse campo tem que ficar com a propriedade requerido = false.

Alguma solução??
LLAIA 23/05/2011 18:46:22
#374798
Eu não tenho o VB aqui pra verificar, mas vc poderia listar todas as propriedades da coluna?

Tables(tBReferencia.Name).Columns(coluna).[txt-color=#e80000]Properties[/txt-color]


Eu acho que deve ser algo muito parecido essa aqui:
Tables(tBReferencia.Name).Columns(coluna).Properties([Ô][txt-color=#e80000]Jet OLEDB:Allow Zero Length[/txt-color][Ô]).Value = True
TECLA 26/05/2011 20:11:42
#375090
Resposta escolhida
Não sei se funciona com o ACCESS (tem que testar), mas segue uma instrução pra você executar direto com um objeto Connection.

con.Execute ([Ô]ALTER TABLE distribuidores ADD COLUMN endereco VARCHAR(30);[Ô])
MsgBox [Ô]O Access aceitou o comando... Ufa![Ô]
LLAIA 26/05/2011 21:05:06
#375092
Ele precisa algo como se fosse o NOT NULL (Requerido no Access) da DDL de um SGBD.
Tópico encerrado , respostas não são mais permitidas