## 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 indices:

- CreateWorkspace() - Inicia um nova sessão e define uma nova área de trabalho.

- CreateDatabase() - cria um novo objeto Database , salva o banco de dados no disco e retorna uma referência ao objeto criado.Se o banco de dados já existir ocorrerá um erro.

- CreateTableDef() - Cria um objeto TableDef para representar uma nova tabela do banco de dados. Cada campo da tabela deverá ser representada pelo objeto Field criado pelo método CreateField()

- CreateField() -. Cria um objeto Field para representar um novo campo da tabela.

- CreateIndex() - Cria um objeto Index para representar um novo índice de uma tabela.

- CreateRelation() - Cria um novo objeto Relation que indica um relacionamento entre as tabelas

- Append - Adiciona um novo objeto de acesso a banco de dados a uma coleção.

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