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 dados
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 índices:

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.

E estamos conversados...


José Carlos Macoratti