CRIANDO UM BANCO DE DADOS E SUAS TABELAS VIA DAO


Rotina para criar uma base de dados e tabelas usando DAO. Iremos criar as tabelas: agendamentos e enderecos com a seguinte estrutura:
 
A rotina abaixo cria o banco de dados agenda.mdb e a seguir cria as tabelas descritas acima. O código deve estar em um módulo.

Você poderia chamar a rotina na abertura de seu programa após verificar se a base de dados existe.Seu código seria algo como o código abaixo:(No exemplo criamos o banco de dados agenda.mdb)
 
Sub Main 

'verifica se o banco de dados existe 
'If Len(Dir("C\caminho\seu_mdb.mdb")) = 0 Then 
call cria_basedados 
'End If 
'define area ativa e abre arquivo de dados 
end sub

 
 
Public Sub cria_basedados() 

On Error GoTo cria_erro 

'usa o metodo createdatabase do objeto workspace para criar a base de dados 
'dblanggeneral => define a base para os idiomas : ingles,alemao,frances,portugues,italiano e espanhol 
'dbversion30 => cria a base na versao 3.0 do MsJet mas compativel com a versao 3.5 - só 32 bits 

Set area = DBEngine.Workspaces(0) 
Set db = area.CreateDatabase("c:\agenda\agenda.mdb", dbLangGeneral, dbVersion30) 

'bem agora vamos criar as tabelas 
'tabela agendamentos 
Set tbl = db.CreateTableDef("agendamentos") 'cria tabela no banco de dados recem criado 

'vamos criar os campos da tabela agendamentos : 
'campo codigoagenda : tipo numerico - inteiro longo 
Set cpo = tbl.CreateField("codigoagenda", dbLong) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'campo hora : tipo date/time 
Set cpo = tbl.CreateField("hora", dbDate) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'campo evento : tipo texto , 150 posições 
Set cpo = tbl.CreateField("evento", dbText, 150) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'campo data : tipo date/time 
Set cpo = tbl.CreateField("data", dbDate) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'campo detalhe : tipo texto , 200 posições 
Set cpo = tbl.CreateField("detalhe", dbText, 200) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'agora vamos inserir o objeto tabela a colecao 
db.TableDefs.Append tbl 

'Agora podemos criar os índices da nossa tabela agendamentos 
'ela possui o codigoagenda como chave primaria 
Set tbl = db.TableDefs("agendamentos") 
Set idx = tbl.CreateIndex("PrimaryKey") 'cria indice com o nome primarykey 
Set cpo = idx.CreateField("codigoagenda") 
idx.Fields.Append cpo 
idx.Primary = True 'define o indice como chave primaria 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

'criacao do indice hora para o campo hora 
Set tbl = db.TableDefs("agendamentos") 
Set idx = tbl.CreateIndex("hora") 'cria indice com o nome hora 
Set cpo = idx.CreateField("hora") 
idx.Fields.Append cpo 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

'criacao do indice data para o campo data 
Set tbl = db.TableDefs("agendamentos") 
Set idx = tbl.CreateIndex("data") 'cria indice com o nome data 
Set cpo = idx.CreateField("data") 
idx.Fields.Append cpo 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

'================================================================ 
'vamos criar a tabela enderecos e os seus campos 
Set tbl = db.CreateTableDef("enderecos") 'cria tabela no banco de dados recem criado 

Set cpo = tbl.CreateField("codigocadastro", dbLong) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("sobrenome", dbText, 50) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("nome", dbText, 50) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 
 

Set cpo = tbl.CreateField("endereco", dbText, 50) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("cidade", dbText, 50) 'define campo : nome e tipo de dado
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("estado", dbText, 2) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo ''insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("cep", dbText, 20) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("telefone", dbText, 20) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("celular", dbText, 20) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("nascimento", dbDate) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo ' 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("observacao", dbText, 150) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

Set cpo = tbl.CreateField("email", dbText, 150) 'define campo : nome e tipo de dados 
tbl.Fields.Append cpo 'insere o novo objeto (campo/coluna) a colecao 

'vamos inserir a tabela enderecos na colecao 
db.TableDefs.Append tbl 

'e criar seus indices 
Set tbl = db.TableDefs("enderecos") 
Set idx = tbl.CreateIndex("PrimaryKey") 'cria indice com o nome primarykey 
Set cpo = idx.CreateField("codigocadastro") 
idx.Fields.Append cpo 
idx.Primary = True 'define o indice como chave primaria 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

Set tbl = db.TableDefs("enderecos") 
Set idx = tbl.CreateIndex("sobrenome") 'cria indice com o nome sobrenome 
Set cpo = idx.CreateField("sobrenome") 
idx.Fields.Append cpo 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

Set tbl = db.TableDefs("enderecos") 
Set idx = tbl.CreateIndex("nome") 'cria indice com o nome nome 
Set cpo = idx.CreateField("nome") 
idx.Fields.Append cpo 
tbl.Indexes.Append idx 'insere o indice criado a colecao 

Exit Sub 

cria_erro: 
MsgBox "Erro numero " & Err.Number & " -> " & Err.Description 
End 
End Sub

Um tanto trabalhoso não !!!!!

Vamos lembrar a estrutura de classes do DAO.(estrutura simplificada). O DAO obedece uma hierarquia na construção de objetos, assim, você não pode criar um objeto TableDef sem antes criar um objeto DataBase. Desta forma para criar uma tabela devemos seguir os seguintes passos:

  1. Criar ou abrir um objeto Database e fazer uma referência ao objeto.
  2. Criar um objeto TableDef que representará a tabela a ser criada.
  3. Criar os objetos Field que representam os campos da tabela.
  4. Anexar cada objeto Field á coleção TableDefs.(Append)
  5. Anexar o objeto TableDef criado á coleção Databases.
O objeto DBEngine é o topo da hierarquia DAO e representa o próprio Microsoft Jet Engine de acesso aos dados.
 
DAO- Estrutura simplificada DAO -Detalhamento da coleção TableDefs
Vejamos os principais métodos relacionados com a definição de Banco de dados, tabelas e indices: Obs.: Note que quando um arquivo é aberto ou criado , devemos especificar uma área de trabalho. Se não definirmos nenhuma o próprio Visual Basic abre o arquivo na área de trabalho padrão (default) , identificado pelo índice (0) da coleção Workspaces do objeto DBEngine.

retorna