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
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.
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: |
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 |
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
Usando a DAO podemos criar banco de dados e tabelas de duas maneiras:
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:
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
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 |
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 índice , anexa as colunas ao índice, e então anexa o índice 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() |
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ó...
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ??
Chegou o
Super DVD C# com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
NET - LINQ a seu dispor - Sintaxe e Operadores - Macoratti ...