bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Como criar tabelas pelo CREATE TABLE

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Como criar tabelas pelo CREATE TABLE

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

Com a instrução CREATE TABLE é possível definir uma nova tabela e seus campos.  Isto é particularmente útil para atualização de um back-end (já em uso) pelo front-end

a) para criar a tabela no próprio front-end, utilize o método Execute do Currentdb para executar a instrução.  Observe, com atenção, o código para criar a tabela tblProdutos no front-end.

Public Sub fncCriarTabela()
Dim strSql$
On Error GoTo trataErro
 
strSql = "CREATE TABLE tblProdutos (" & _ 
"idProduto AUTOINCREMENT," & _
"NomeProduto CHAR," & _
"DataLançamento DATE," & _
"QuantidadeEstoque INTEGER," & _
"ValorUnitário CURRENCY," & _
"Observação MEMO," & _
"Descontinuado YESNO)"

'-----------------------------------------------
'Executa a consulta e cria a tabela no front-end
'-----------------------------------------------
CurrentDb.Execute strSql
'-------------------------------------------
'Caixa de mensagem temporizada da dica 61
'-------------------------------------------
MsgBoxTimer 2, "Tabela tblProdutos criada...", vbOKOnly, "Aviso"
sair:
   Exit Sub
trataErro:
   '-------------------------------------------------------------
   'Informa que a tabela já existe.  Caixa de mensagem da dica 61
   '--------------------------------------------------------------
   If Err.Number = 3010 Then MsgBoxTimer 2, "A tabela já existe ...", _ 
   vbSystemModal, "Aviso"
   Resume sair:
End Sub

Veja, na tabela, os nomes que identificam os Tipos de Dados:

Tipos de Dados  Identificação SQL
Texto  TEXT, ALPHANUMERIC, CHAR, CHARACTER, STRING ou VARCHAR
Memorando  LONGTEXT, MEMO, LONGCHAR ou NOTE
Byte  BYTE ou INTEGER1
Inteiro  SHORT, INTEGER2 ou SMALLINT
Inteiro Long  COUNTER, INTEGER, INT ou AUTOINCREMENT
Simples  SINGLE, FLOAT4 ou REAL
Duplo  DOUBLE, FLOAT ou NUMBER
Data/Hora  DATETIME, DATE, TIME ou TIMESTAMP
Moeda  CURRENCY ou MONEY
Auto Numeração  AUTOINCREMENT ou COUNTER
Sim/Não  YESNO, BIT, LOGICAL, LOGICAL1 ou BOOLEAN
Objeto OLE  LONGBINARY, OLEOBJECT ou GENERAL

 

Não existe um comando para criar campo do tipo ANEXO pelo CREATE TABLE.  Uma alternativa é a de usar o TableDefs do DAO.  Veja as partes em vermelho, acrescentadas ao código:

Public Sub fncCriarTabela()
Dim tbl As dao.TableDef
Dim bd As dao.Database
Dim strSql$
On Error GoTo trataErro
 
'------------------------------------------------------------------
'O CreateField só funciona se o Currentdb for passado para variável
'------------------------------------------------------------------
Set bd = CurrentDb
 
strSql = "CREATE TABLE tblProdutos (" & _ 
"idProduto AUTOINCREMENT," & _
"NomeProduto CHAR," & _
"DataLançamento DATE," & _
"QuantidadeEstoque INTEGER," & _
"ValorUnitário CURRENCY," & _
"Observação MEMO," & _
"Descontinuado YESNO)"

'-------------------------------------
'Executa a consulta, criando a tabela
'-------------------------------------
bd.Execute strSql
 
'---------------------------------------------------------
'A variável tbl assume as definições da tabela tblProdutos
'----------------------------------------------------------
Set tbl = bd.TableDefs!tblProdutos
'------------------------------------------------
'Cria o campo do tipo Anexo na tabela tblProdutos
'------------------------------------------------
tbl.Fields.Append tbl.CreateField("Foto", dbAttachment)
'------------------------------------------
'Esvazia as variáveis, limpando a memória
'------------------------------------------
Set tbl = Nothing
set bd = Nothing
'----------------------------------------------
'Usa a caixa de mensagem temporizada da dica 61
'----------------------------------------------
MsgBoxTimer 2, "Tabela tblProdutos criada...", vbOKOnly, "Aviso"
sair:
   Exit Sub
trataErro:
   '-------------------------------------------------------------
   'Informa que a tabela já existe.  Caixa de mensagem da dica 61
   '--------------------------------------------------------------
   If Err.Number = 3010 Then MsgBoxTimer 2, "A tabela já existe ..", _ 
   vbSystemModal, "Aviso"
   Resume sair:
End Sub

b) Para criar a tabela no back-end pelo front-end, utilize o método Execute do OpenDatabase para executar a instrução.  Observe, com atenção, o código para criar a tabela tblProdutos no back-end.

Public Sub fncCriarTabela3()
Dim tbl As dao.TableDef
Dim bd As dao.Database
Dim strSql$
On Error GoTo trataErro
 
'-------------------------------------------
'Abre o back-end pelo comando OpenDatabase
'-------------------------------------------  
Set bd = OpenDatabase("c:\MinhaPasta\Back-end.accdb", False, False,";PWD=123")
 
strSql = "CREATE TABLE tblProdutos (" & _ 
"idProduto AUTOINCREMENT," & _
"NomeProduto CHAR," & _
"DataLançamento DATE," & _
"QuantidadeEstoque INTEGER," & _
"ValorUnitário CURRENCY," & _
"Observação MEMO," & _
"Descontinuado YESNO)"
'-------------------------------------------------
'Executa a consulta, criando a tabela no back-end
'-------------------------------------------------
bd.Execute strSql
 
'---------------------------------------------------------
'A variável tbl assume as definições da tabela tblProdutos
'---------------------------------------------------------
Set tbl = bd.TableDefs!tblProdutos
'------------------------------------------------
'Cria o campo do tipo Anexo na tabela tblProdutos
'------------------------------------------------
tbl.Fields.Append tbl.CreateField("Foto", dbAttachment)
'-----------------------------------------
'Esvazia as variáveis, limpando a memória
'-----------------------------------------
Set tbl = Nothing
set bd = Nothing
'----------------------------------------------
'Usa a caixa de mensagem temporizada da dica 61
'----------------------------------------------
MsgBoxTimer 2, "Tabela tblProdutos criada...", vbOKOnly, "Aviso"
sair:
   Exit Sub
trataErro:
   '-------------------------------------------------------------
   'Informa que a tabela já existe.  Caixa de mensagem da dica 61
   '--------------------------------------------------------------
   If Err.Number = 3010 Then MsgBoxTimer 2, "A tabela já existe ..", _ 
   vbSystemModal, "Aviso"
   Resume sair:
End Sub

Nota:  Veja neste meu artigo como proceder de forma mais segura, com a senha do back-end no OpenDatabase.

Para excluir uma tabela utilize o DROP TABLE.

CurrentDb.execute "DROP TABLE tblProdutos;"

Bom estudo!


 

 


4 comentário(s)

Marcelo David   25/04/2018 15:38:30

Muito bom! Obrigado por compartilhar!

Fabio Matos   22/11/2018 16:24:55

Mestre Avelino, boa noite.
Estudei por quase toda a internet por vários dias e não consegui encontrar uma solução para o meu problema. Estou parado nisso para atualizar o BackEnd dos meus clientes...
Como eu posso criar um Relacionamento com Integridade referencial via VBA?? =(
Parei em:
docmd.runSQL "ALTER TABLE tbl_cad_listProdVenda ADD CONSTRAINT CodVenda FOREIGN KEY (codVenda) REFERENCES tbl_venda (codVenda) ON DELETE CASCADE;"

Neste exemplo é um simples relacionamento entre a Tabela de Vendas (tbl_venda) PK> codVenda e a tabela onde armazena os produtos da Venda (tbl_cad_listProdVenda) FK> codVenda.

O erro que aparece é:
'3289'
Erro de síntese na cláusula CONSTRAINT.

Me ajude, please!!

Avelino Sampaio   23/11/2018 00:22:18

Fabio,

veja neste meu outro artigo:

http://www.usandoaccess.com.br/dicas/criar-relacionamentos-tabelas-constraint-vba.asp

Sucesso!

Fabio Matos   23/11/2018 04:26:27

Mestre Avelino, eu estava tão frustrado e cansado que não havia encontrado esta super joia.
Já testei e já funcionou de cara.
Tu é realmente o cara e me salvou mais uma vez.
MUITO OBRIGADO!!!!


Envie seu comentário: