Criando Banco de Dados e tabelas


Um dia (um belo e ensolarado dia...) você vai precisar criar um banco de dados quer em tempo de execução em sua aplicação Visual Basic quer seja usando um utilitário para criação de banco de dados. Não vou entrar no mérito ou propósito que o levou a realizar tal tarefa. Apenas vou mostrar como fazer o serviço.

Existem diversas maneiras de você criar um banco de dados , tudo vai depender de qual banco de dados você quer criar ( Access, SQL Server, Oracle , Paradox , Dbase , ...) . Afim de não tornar este pequeno opúsculo em um imenso livro restringirei nosso enfoque ao Access e ao SQL Server .

Mesmo com esta restrição veremos que há diversas formas de resolver a questão. Abordaremos as principais. Vamos a elas..

Usando o Microsoft Access

Em se tratando de base de dados padrão mdb ( Access) , creio que a maneira mais fácil é utilizar o próprio Access pois o mesmo contém uma interface muito amigável , incluindo assistentes que guiarão o usuário para facilmente criar o seu banco de dados. Só tem um inconveniente : Você precisará do Access instalado...

É possível criar uma tabela com um Assistente de Tabela, mas se ele não oferecer o tipo de tabela desejada, pode-se criar a tabela sem ajuda. Mesmo que não se utilize o Assistente de Tabela pode-se usar o Construtor de Campos para selecionar campos individuais das tabelas de amostra do Assistente de Tabela.

Para continuar clique no link a seguir : Criando banco de dados e tabelas com o Access

Criando uma base de dados e tabelas usando o Visual Data Manager

Outra opção é usar um utilitário que vem junto com o Visual Basic - o VisData . Com ele você pode criar tabelas sem ter o Access instalado . É uma boa estratégia você conhecer este utilitário e não depender somente do Access.

Vamos agora mostrar como usar o assistente Visual Data Manager -  Visdata  - do Visual Basic para criar uma base de dados chamada clientes.mdb e a tabela clientes com a seguinte estrutura:
Nome do Campo

Tipo do Campo

Tamanho

Vamos supor que você não conheça nada de programação em Visual Basic.

Para continuar clique no link a seguir: 

Criando um Banco de dados com o VisData,

Codigo

Long

-

Nome

Text

40

Endereco

Text

40

Cidade

Text

30
Cep

Text

15

UF

Text

2

Telefone

Text

15

Nascimento

Date/Time

 
Observacao

Memo

 
Fig 1.0 - Estrutura da tabela clientes
Criando uma banco de dados e uma tabela no SQL Server com o  Enterprise Manager .

 Para criar um banco de dados e uma tabela no SQL Server 2000  podemos usar o Enterprise Manager. Clique no link a seguir para continuar : Criando banco de dados no SQL Server 2000

Criando Banco de dados e tabelas via Código
  1. Usando a DAO - Data Access Object

Usando a DAO podemos criar banco de dados e tabelas de duas maneiras:

  1. Os métodos CreateDatabase , CreateTabledef , CreateField e CreatendIndex
  2. Usar a Data Definition Language (DDL) - CREATE TABLE

A.) Vamos mostrar a seguir como criar um banco de dados , tabelas e índices usando os métodos Create da DAO.

Primeiro devemos definir os objetos que vamos usar na criação do banco de dados , tabelas e índices. Para isso devemos declará-los usando o a declaração DIM. Vamos precisar dos seguintes objetos

A sequência lógica é a seguinte:

  1. Criar o Banco de dados
  2. Criar a Tabela
  3. Criar os campos
  4. Definir as propriedades de cada campo
  5. Anexar todos os campos a coleção Table
  6. Criar os índices
  7. Definir as propriedades de cada índice
  8. Criar os campos necessários a cada índice
  9. Definir as propriedades dos campos
  10. Anexar os campos necessários a coleção field do índice
  11. Anexar todos os índices a coleção Table
  12. Anexar a tabela a coleção Tables do banco de dados

A seguir iremos criar a tabela Produtos cuja estrutura esta exibida abaixo:

Nome do Campo

Tipo do Campo

Tamanho

Codigo_ID

Long

-

Nome

Text

40

Tabela Produtos

1) Criando o banco de dados Teste_db - Usando o método CreateDatabase da DAO

Dim Teste As Database
Set teste = CreateDatabase("C:\teste\Teste.mdb", dbLangGeneral)

2) Criando a Tabela: Apenas criamos um novo objeto TableDef :

Dim testeTd As TableDef
Set TesteTd = teste.CreateTableDef("Teste")

3) e 4) Criando os campos (fields) e definindo as propriedades de cada campo:

Dim TesteFlds(1) As Field
Set TesteFlds(0) = TesteTd.CreateField("Codigo_ID", dbLong) 
TesteFlds(0).Attributes = dbAutoincrfield 'torna o campo autoincremental.
Set TesteFlds(1) = TesteTd.CreateField("Nome", dbText)
TesteFlds(1).Size = 40

5) Anexa todos os campos a coleção table

TesteTd.Fields.Append TesteFlds(0)
TesteTd.Fields.Append TesteFlds(1)

6) e 7) Cria um índice e define as propriedades para os campos .

Dim TesteIdx As Index
Set TesteIdx = TesteTd.CreateIndex("Au_ID")
TesteIdx.Primary = True
TesteIdx.Unique = True

8) e 9) Cria os campos necessários para o índice e define as propriedades.

Dim IdxFlds As Field
Set IdxFlds = TesteIdx.CreateField("Au_ID")

10) Anexa os campos a coleção fields do índice

TesteIdx.Fields.Append IdxFlds

11) Anexa todos os índices a coleção indexes da tabela

TesteTd.Indexes.Append TesteIdx

12) Anexa a tabela a coleção tables do banco de dados

Teste.TableDefs.Append TesteTd

Para ler mais sobre  este tópico clique no link a seguir : Criando arquivos via DAO

B) Agora iremos mostrar como criar um banco de dados  uma tabela usando as definições da DDL . Para isto usamos o comando CREATE TABLE e o método execute da DAO. Vamos criar o banco de dados  Teste.mdb e a tabela Autores que possui a seguinte estrutura:

Nome do Campo

Tipo do Campo

Tamanho

Codigo_ID

Long

-

Nome

Text

40

Nascimento

 Date

 

 

Dim teste As Database
Set teste = CreateDatabase( "C:\teste\teste.mdb", dbLangGeneral)
SQL = "CREATE TABLE Autores "
SQL = SQL & " (Codigo_ID  LONG, Nome TEXT (40) , Nascimento DATETIME);"
teste.Execute SQL
teste.Close

 

2-) Criando um banco de dados e uma tabela no SQL Server 2000 via código

 

Para criar uma banco de dados e uma tabela  no SQL Server via código usamos a sintaxe da
transact SQL que é um pouco parecida com a do Access. (Cuidado o SQL Server tem sua própria 
sintaxe ). 

 

Vejamos exemplos de como criar um banco de dados:

 

a-)Cria o banco de dados teste sem especificar o tamanho.

 

CREATE DATABASE teste

 

b-)Cria um banco de dados Produtos e especifica um arquivo único. O arquivo especificado
torna-se o arquivo primario , e um arquivo de transação de log de 1 MB é criado também.
O tamanho do arquivo (SIZE) é alocado em megabytes.

 

CREATE DATABASE Products ON ( NAME = prods_dat, FILENAME = 'c:\teste\prods.mdf',
                              SIZE = 4,
                              MAXSIZE = 10, 
                              FILEGROWTH = 1 ) 

Vamos mostrar agora exemplos de como cria tabela via código no SQL Server 2000:

Cria a tabela funcionários onde o campo Codigo_Id é Chave Primária e autoincremental (Identity)

CREATE TABLE funcionarios

(       Codigo_ID   Int Identity,

        constraint funcionarios_IDPK primary Key (Codigo_ID)

        Nome          varchar(50) not null,

        Endereco     varchar(50) not null,

        secao          int                  null,

        salario         money             null  )

Onde:

Constraints são uma maneira de garantir a integridade do banco de dados . As principais são:

NOT NULL  - define que uma coluna não pode aceitar um  valor nulo

PRIMARY KEY - cria a chave primária da tabela.

FOREIGN KEY - identifica a relação entre as tabelas. É um campo da tabela atual que indica um campo chave de outra tabela.

Para alterar e excluir uma tabela usamos os comandos ALTER TABLE e DROP TABLE .

ALTER TABLE : este comando altera a estrutura de uma determinada tabela. Você pode incluir um novo campo, aumentar ou diminuir o tamanho de um campo já existente, alterar o tipo de dados do mesmo e até mesmo acrescentar atributos de um campo, além de remover os mesmos.

 Estrutura do comando para inserir um novo campo na tabela:

 ALTER TABLE Nome_da_tabela ADD CAMPO TIPOCAMPO     Ex: ALTER TABLE Clientes ADD fone  varchar(12)

 A estrutura para se remover um campo da tabela é a que segue:

 ALTER TABLE Nome_da_tabela DROP CAMPO     Ex:  ALTER TABLE Clientes DROP nome

DROP TABLE :  este comando remove uma tabela do banco de dados em uso. Sua sintaxe básica é:

 DROP TABLE NOME_DA_TABELA.      Ex: DROP TABLE clientes

 Vale lembrar que o comando acima, além de remover a tabela, remove todos os índices e visões ligados a tabela excluída. 

Criando uma base de dados Access 2000 com ADO

Para criar uma base de dados Access 2000 usando ADO devemos usar a ADOX . O código é bem simples:

Public Function CreateDatabase(Caminho As String) As Boolean

 On Error Resume Next
 Dim oCatalog As New ADOX.Catalog
 
oCatalog.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Caminho

 CreateDatabase = Err.Number = 0
End Function

Para usar o código acima no seu projeto você deve referenciar Microsoft ADO Ext. 2.X for DDL and Security no menu Project | References

O único parâmetro que a função usa é o nome completo e a localização da base de dados que desejamos criar indicados na variável Caminho.

A função irá retornar True ou  False conforme o resultado.

Criando tabelas com ADOX

Abaixo o código que irá criar a tabela Contatos no banco de dados Nwind.mdb.

Dim cat As New ADOX.Catalog

Dim tbl As New ADOX.Table

'Abre o CATÁLOGO

cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\nwind.mdb;"

'Cria uma nova tabela

With tbl

  .Name = "Contatos"  

  ' Cria os campos e os anexa a nova tabela

  ' É preciso fazer isto antes de anexar o objeto Table

  ' a coleção Tables collection do  Catalog

  .Columns.Append "Nome", adVarWChar

  .Columns.Append "Endereco", adVarWChar

  .Columns.Append "Telefone", adVarWChar

  .Columns.Append "Notas", adLongVarWChar

  .Columns("Notas").Attributes = adColNullable

End With

'Inclui a nova tabela ao banco de dados

cat.Tables.Append tbl

Set cat = Nothing

End Sub

O processo de criação de uma tabela com ADOX é idêntico a DAO. Primeiro criamos o objeto - TableDef ou Table - depois anexamos as colunas ( objetos Field ou Column ) e finalmente anexamos a tabela a coleção.,

Com a ADOX não é necessário usar o método Create para criar a coluna antes de anexá-la a coleção. O método Append pode ser usado para criar e anexar a coluna.

Os nomes dos tipos de dados para as colunas são diferentes das usadas na DAO. Abaixo temos uma tabela que comparando os tipos usados na DAO e na ADO.

Tipos de Dados - DAO Tipos de dados - ADO 
dbBinary adBinary
dbBoolean adBoolean
dbByte adUnsignedTinyInt
dbCurrency adCurrency
dbDate adDate
dbDecimal adNumeric
dbDouble adDouble
dbGUID adGUID
dbInteger adSmallInt
dbLong adInteger
dbLongBinary adLongVarBinary
dbMemo adLongVarWChar
dbSingle adSingle
dbText adVarWChar

Não vamos entrar em detalhes , mas existem outros atributos de uma tabela ou coluna que podemos definir durante o processo de criação. Abaixo temos uma comparação entre a DAO e ADO desses atributos:

DAO TableDef Property Value ADOX Table Property Value
Atributos dbAttachExclusive Jet OLEDB:Exclusive Link True
Atributos dbAttachSavePWD Jet OLEDB:Cache Link Name/Password True
Atributos dbAttachedTable Type "LINK"
Atributos dbAttachedODBC Type "PASS-THROUGH"

 

DAO Field Property Value ADOX Column Property Value
Atributos dbAutoIncrField AutoIncrement True
Atributos dbFixedField ColumnAttributes adColFixed
Atributos dbHyperlinkField Jet OLEDB:Hyperlink True
Atributos dbSystemField    
Atributos dbUpdatableField    
Atributos dbVariableField ColumnAttributes Not adColFixed

Criando um índice com ADOX

Abaixo o código que irá criar o índice NomeIndex para o campo Nome na tabela Contatos no banco de dados Nwind.mdb.

Dim cat As New ADOX.Catalog

Dim tbl As ADOX.Table

Dim idx As New ADOX.Index

'Abre o Catálogo

cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\nwind.mdb;"

Set tbl = cat.Tables("Contatos")

'Cria um objeto Index object e anexa as colunas a ele

idx.Name = "NomeIndex"

idx.Columns.Append "Nome" 

'permite inclusão de NULL

idx.IndexNulls = adIndexNullsAllow

'Anexa o objeto Index a coleção Indexes da tabela

tbl.Indexes.Append idx 

Set cat = Nothing

End Sub

O processo é idêntico ao usando na DAO: Cria o indíce , anexa as colunas ao indíce, e então anexa o indíce a tabela. Há no entanto uma diferença.

Na DAO temos duas propriedades : Required e IgnoreNulls que juntas determinam se valores Null podem ser inseridos ou não para campos no índice e se as entradas do índice serão criadas ou não quando algum campo contiver um Null. Na DAO temos somente a propriedade IndexNull que realiza a mesma tarefa. O valor padrão de IndexNull é adIndexNullsDisallow e indica que os valores Null não são permitidos no índice.

A seguir temos uma tabela comparando as propriedades na DAO e na ADO.

DAO Required DAO IgnoreNulls ADOX IndexNulls Description
True False adIndexNullsDisallow Um valor Null não é permitido no índice; entrada no índice não permitida.
False True adIndexNullsIgnore Um valor Null  é permitido no índice; entrada no índice não permitida.
False False adIndexNullsAllow Um valor Null não é permitido no índice; entrada no índice permitida.

Juntando todas as Partes - Criando uma base de dados , uma tabela e inserindo dados

Para encerrar vamos juntar tudo em um projeto que irá criar um banco de dados , uma tabela e irá inserir dados nesta tabela.

Agora insira o seguinte código no formulário:

Option Explicit

Private Sub cmdCreate_Click()
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Dim con As ADODB.Connection

' Exclui o banco de dados se ele ja existir
On Error Resume Next
Kill txtDatabaseName.Text
On Error GoTo 0

' Criando um banco de dados
Set cat = New ADOX.Catalog
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & txtDatabaseName.Text & ";"

' Criando uma nova tabela
Set tbl = New ADOX.Table
tbl.Name = "TabelaTeste"
tbl.Columns.Append "Nome", adVarWChar, 40
tbl.Columns.Append "Endereco", adVarWChar, 40
cat.Tables.Append tbl

' Conectando ao banco de dadoss.
Set con = cat.ActiveConnection

' Inserindo um registro
con.Execute "INSERT INTO TabelaTeste VALUES ('Macoratti', 'Rua Projetda 100')"

Set con = Nothing
Set tbl = Nothing
Set cat = Nothing

MsgBox "Operacao realizada com sucesso !!", vbInformation, "Usando ADOX"
End Sub

Private Sub Form_Load()
  Dim file_name As String
  file_name = App.Path
   If Right$(file_name, 1) <> "\" Then file_name = file_name & "\"
       file_name = file_name & "teste.mdb"
       txtDatabaseName.Text = file_name
End Sub

Ao clicar no botão - Criar Banco de dados usando ADOX - o banco será criado , a tabela também e um registro será inserido na mesma.

E, por hoje é só...


José Carlos Macoratti