Criação de banco access vazio via código

Delphi

20/03/2005

Olá galera
O título do tópico já diz tudo. Alguém já fez isso?
Abraços


Tnaires

Tnaires

Curtidas 0

Respostas

Mario_n

Mario_n

20/03/2005

Quando se cria um sistema para ambientes desktop sempre surge a dúvida de qual base de dados usar. Geralmente são usados bancos DBase, Paradox ou MS Access. Destes, a base mais robusta e confiável é, sem dúvida, MS Access. Mas existe um grande problema para se criar a base de dados MS Access, pois faz-se necessário o uso do ambiente MS Access.

Algumas pessoas não têm este aplicativo instalado em sua máquina e então torna-se inviável o uso desta base de dados, impedindo, desta forma, um crescimento tecnológico do programador que fica preso a ferramentas obsoletas.

Neste tutorial você irá aprender como criar uma base de dados MS Access a partir do nada, usando puro código Delphi e a Tecnologia ADO Extensions que é distribuída pela Microsoft.

ADOX, faz parte dos componentes ADO, quer dizer, é uma extensão do ADO. O ADOX fornece ferramentas de acesso a estrutura, segurança, definições de tabelas e muitos outros.

Como dito anteriormente, ADOX é uma library distribuída pela Microsoft, o arquivo chama-se ´Msadox.dll´, sua definição é ´Microsoft ADO Ext. 2.x for DDL and Security´ e é este arquivo que iremos importar para nossa IDE no Delphi.

INSTALANDO
Para usar este objetos no Delphi basta seguir os seguintes passos:

1- Selecione PROJECT > IMPORT TYPE LIBRARY

2- Procure pela descrição: ´Microsoft ADO Ext. 2.x for DDL and Security (Version 2.x)´

2- Em CLASS NAMES, altere o nome dos objetos acrescentando ADOX após a letra T, exemplo: TTable mude para TADOXTable, TColumm mude para TADOXColumn. Repita este procedimento para todos objetos nesta lista.

3- Em PALETTE PAGE selecione ou digite um novo nome para a paleta onde os componentes ficarão, exemplo: ADOX.

4- Pressione INSTALL, logo depois pressione Ok confirmando o início da instalação.

5- Pressione YES confirmando que você quer instalar os componentes.

6- Pressione Ok na tela que indica os objetos instalados.

7- Selecione FILE > CLOSE ALL e pressione YES para salvar este package criado.

O motivo da troca do nome dos objetos é muito óbvio, estes nomes de classe como Ttable já existem, então iria gerar conflitos na compilação, por isso bastou trocar o nome da classe.

Pronto, os objetos estão instalados, agora sempre que você utilizar estes objetos será inserido na clausula USES a Unit ADOX_TLB pois este é o nome da unit criada a partir da importação da DLL.

Agora, mãos à obra.

DEFININDO A BASE DE DADOS E OBJETOS A SEREM USADOS
Vamos criar uma base onde serão armazenados informaçõe sobre animais de estimação (para sair um pouco da rotina de CLIENTES/PRODUTOS/PEDIDOS).

Para esta base serão criadas as seguintes tabelas:

> PROPRIETARIO

> PRO_ID

> PRO_NOME

>ANIMAL

> ANI_ID

> ANI_PROPRIETARIO

> ANI_NOME

> ANI_NASCIMENTO

Onde um proprietario pode ter mais de um animal formando assim um relacionamento UM PARA MUITOS.

No Delphi, crie uma nova aplicação. Será criado um novo Form, a este insira os seguintes componentes:

> 3 TButtons

Para lançar os procedimentos de criação da base de dados e das tabelas.

Altere as seguintes propriedades para cada TButtons respectivamente:

Caption: Criar base

Name: btnBase

Caption: Criar tabelas

Name: btnTabelas

Caption: Navegar

Name: btnNavegar

> 1 TEdit

Para armazenar o path da base de dados a ser criada.

Altere as seguintes propriedades:

Name: edtPath

Text: (deixe em branco)

> 1 TSaveDialog

Para navegar no disco e informar o path da base de dados.

Altere as seguintes propriedades:

Filter: Base MS Access|*.mdb

Title: Salvar como...

DefaultExt: .mdb

> 1 TADOConnection

Para fazer a conexão com a base criada.

Altere as seguintes propriedades:

Login prompt: False

> 1 TADOCommand

Para fazer a ligação e criação das tabelas.

Altere as seguintes propriedades:

Connection: Selecione o ADOConnection1

> 1 TADOXCatalog

Para criar a base de dados.

CRIANDO A BASE DE DADOS
Agora vamos ao código. Clique duas vezes no objeto btnNavegar e digite:

procedure TForm1.btnNavegarClick(Sender: TObject);
begin
if SaveDialog1.Execute then
edtPath.Text := SaveDialog1.FileName;
end;
Com isso informamos o nome que a base terá.

Clique duas vezes no objeto btnBase e digite o seguinte procedimento:

procedure TForm1.btnBaseClick(Sender: TObject);
var
Base: String;
begin
if edtPath.Text = ´´ then
begin
ShowMessage(´Nome da base de dados não informada.´);
exit;
end;
Base := ´Provider=Microsoft.Jet.OLEDB.4.0´+
´;Data Source=´ + edtPath.Text +
´;Jet OLEDB:Engine Type=4´;
ADOXCatalog1.Create1(Base);
end;
Primeiro verificamos se há algum texto no objeto TEdit, em seguida atribuímos a string de conexão à variável BASE informando vários parâmetros, mas atente para a seguinte linha: ´...Engine Type=4...´, isto quer dizer que iremos criar uma base Access 97, para Access 2000 informe 5.

Em seguida é efetivamente criado a base de dados através do método Create1 do objeto ADOXCatalog, passando para este a string da BASE. Observe que o método é Create1 e não simplesmente Create, pois o método Create já existe e é da classe.

Pronto, criamos uma base de dados vazia, não existe nada nela, mas já é um arquivo comum ao MS Access e pode ser aberto normalmente.

CRIANDO TABELAS

Vamos começar a criar as tabelas, seus índices e integridade referencial. Para isso clique duas vezes no objeto btnTabelas e digite:

procedure TForm1.btnTabelasClick(Sender: TObject);
var
base, comando: string;
begin
{ definindo a base de dados }
base := ´Provider=Microsoft.Jet.OLEDB.4.0´ +
´;Data Source=´ + edtPath.Text +
´;Persist Security Info=False´;
ADOConnection1.ConnectionString := base;
{ Criando as tabelas... }
{>>> PROPRIETARIO <<<}
comando := ´CREATE TABLE PROPRIETARIO (´ +
´PRO_ID INT,´ +
´PRO_NOME TEXT(50))´;
ADOCommand1.CommandText := comando;
ADOCommand1.Execute;
{ ADICIONANDO INDICES }
comando := ´CREATE INDEX IDX_PRO_ID ´ +
´ON PROPRIETARIO (PRO_ID) WITH PRIMARY´;
ADOCommand1.CommandText := comando;
ADOCommand1.Execute;
{>>> ANIMAL <<<}
comando := ´CREATE TABLE ANIMAL (´ +
´ANI_ID INT,´ +
´ANI_PROPRIETARIO INT ´ +
´CONSTRAINT IDX_PRO_ID ´ +
´REFERENCES PROPRIETARIO (PRO_ID),´ +
´ANI_NOME TEXT (50),´ +
´ANI_NASCIMENTO DATETIME)´;
ADOCommand1.CommandText := comando;
ADOCommand1.Execute;
end;
CONCLUÍNDO
Pronto, tudo muito fácil e simples. Agora rode o programa e faça os testes. Clique em navegar, selecione um diretório e digite o nome que sua base terá, então clique em CRIAR BASE e veja que o programa criará a base, logo após isto clique em CRIAR TABELAS então as tabelas serão criadas.

Agora ficou fácil criar sistemas desktops usando uma base mais robusta sem a necessidade de se ter o MS Access instalado em sua máquina. É possível criar e acessar todos os recursos de tabelas da base de dados MS Access usando os objetos ADOX, aqui foi mostrado como criar utilizando linguagem DDL, ou seja, escrevemos diretamente para que o comando fosse executado, mas é possível ter acesso à estes recursos diretamente com os componentes distribuídos por esta library, mas este assunto ficará para outra ocasião.

Se você tiver o MS Access instalado em sua máquina pode abri-lo e verificar nossa base de dados, caso contrário crie uma simples aplicação com dois DBGrids para exibir os campos das tabelas, assim como inserir dados.


[]´s

Mario


GOSTEI 0
Tnaires

Tnaires

20/03/2005

Poxa cara! Muito obrigado, valeu mesmo.
Vc sabe o número do Engine Type pra criar uma base Access XP?
Abraços


GOSTEI 0
Silviogs

Silviogs

20/03/2005

Olá

por falar em banco de dados como já citei anteriormente em outras oportunindades, DBase, Paradox ou MS Access não são banco de dados são gerenciador de arquivos, que realmente um banco de dados use Iterbase, Firebird,Postgre,SQL Server etc, estes são verdadeiramente banco de dados.

Ex: DBase, Paradox ou MS Access tem stored procedures, trigers, views e gerenciamento de logins? se tiverem são banco de dados completos.

obs: já utilizei o MSSQL server, Interbase, Firebird, mas agora estou utilizando o postgre, entre eles particularmente falando o que mais gostei de trabalhar. O postgre suporta conceitos de orientação a objetos além de todas as características acima citadas. Suas storeds procedures podem ser escritas em diversas linguagens diferentes (C, java etc.).


Atencioasente

Silvio Guedes


GOSTEI 0
POSTAR