Delphi Banco de Dados

Introdução
Criando as tabelas em Paradox
Relacionando as tabelas
Criando chave secundária
Criando alias
Acesso ao Banco de Dados utilizando o DbNavigator
Tutorial passo a passo de um sistema em paradox
Tutorial passo a passo de um sistema em ADO
Tutorial passo a passo de um sistema em BDE, utilizando driver ODBC para Access
Consulta por data em SQL paradox
Consulta por data em SQL ADO
Ligando a tabela com a de detalhes
Dicas SQL
Dicas

Introdução

Desde a versão 2.0, o delphi possui componentes que facilitam o acesso ao banco de dados nativo que é o Paradox. Você pode utilizar para criar sistemas pequenos. Desde a versão 5.0, o ADO foi incorporado permitindo o acesso ao banco de dados Access, utilizando praticamente os mesmos procedimentos que o Visual Basic faz.

Criando as tabelas em Paradox1

Neste tutorial, vamos criar um sistema para controlar despesas. Para isso, crie uma pasta com o nome Despesa. Cada tabela, o paradox gera um arquivo para armazenar os dados, uma para a chave primária, outra para chave secundária, outra para relacionamento. Assim, crie dentro da pasta Despesa a pasta Dados, onde ficarão armazenados as tabelas. Utilizaremos duas tabelas: cliente e despesa.

Tipos de Dados

Tipo Símbolo Tamanho Descrição
Alpha
A
1-255
Aceita letras, números, símbolos especiais (; - @ $, etc.)
Number
N
-
Qualquer valor numérico, decimal ou não.
Money
$
-
Características igual ao number, porém inclui o símbolo de moeda
Short
S
-
Valores inteiros entre -32767 e 32767
Long Integer
I
-
Números inteiros entre -2147483648 a 2147483648
Date
D
-
Data
Time
T
-
Hora
Timestamp
@
-
Data e Hora na ordem: hh:mm:ss,dd/mm/aa.
Memo
M
1-240
Guarda em um arquivo .MB.
Formatted Memo
F
1-240
Igual ao acima, porém permite armazenar a formatação de fontes
Graphic
G
0-240 (opcional)
Armazenar imagens nos formatos: .bmp, .pcx, .ico. Guarda em um arq. memo
Logical
L
-
Para valores lógicos: True (Verdadeiro) e False (Falso). Chamado booleano
Auto-Increment
+
-
Armazenar valores inteiro longo. Será feita numeração automática.
Bynary
B
0-240 (opcional)
Para valores binários. Guarda em um arquivo .MB.
Bytes
Y
1-255
Para armazenar informações de códigos de barras.


Para criar as tabelas, não precisa entrar no Delphi. Clique no Menu Iniciar / Programas / Borlan Delphi / Database Desktop. Caso você já esteje com o Delphi carregado, vá até o o Menu Tools / Database Desktop. Clique no Menu File/New/Table. Pressione OK, pois será utilizada a última versão do Paradox. Coloque os campos de acordo com a figura abaixo.

Clique no botão Save As e salve-a como Cliente na pasta dados.

Clique no Menu File/New/Table para criar a tabela conforme figura abaixo:

Clique no botão Save As e salve-a como Despesa na pasta dados.

Para não precisar toda vez, localizar a pasta Despesa/Dados, vamos coloca-la como diretório de trabalho. Para isso, clique no Menu File/Working Directory. Clique no botão Browse e localize a pasta acima. Agora toda vez que for abrir a tabela, alterar a estrutura, o paradox abrirá na pasta acima.

Alterando a estrutura da tabela

Clique no Menu Tools/Utilities/Restructure. Abra a tabela desejada.

Criando Relacionamento

Clique no Menu Tools/Utilities/Restructure. Abra a tabela Despesa. Clique na opção Table properties e selecione Referential Integrity. Clique no botão Define. Será aberta a figura abaixo:

Dê um duplo clique no campo CodCliente na opção Fields.
Dê um duplo clique na tabela Cliente na opção Table. Deverá ficar como a figura acima, ou seja: Foi criado o relacionamento um para muitos. Um cliente pode ter várias despesas. Clique no botão OK e salve: ir_despesa_cliente.

Criando a Chave Secundária

A chave secundária será útil, quando for criada a consulta e o relatório em ordem alfabética pelo campo nome.

Clique no Menu Tools/Utilities/Restructure. Abra a tabela Cliente. Clique na opção Table properties e selecione Secondary Indexes. Clique no botão Define. Será aberta a figura abaixo:

Dê um duplo clique no campo Nome.
Index Options:
Unique: Marque se não desejar que o nome seja duplicado.
Maintained: Deixe marcado para que os índices sejam atualidados. Quando você alterar, excluir será atualizado todos o índice.
Case sensitive: Marque se desejar que o paradox distingua maiúsculo de minúsculo. Por exemplo: se você cadastrar: São Paulo será diferente de SÃO PAULO, caso esta opção seja marcada.
Descending: Marque se desejar que a ordem seja em ordem descrescente.

Clique no botão OK. Salve como: idx_Cliente_Nome.
Feche o Database Desktop e abra o Delphi.
Clique no Menu File / Save All. Localize a pasta Despesa e salve:
Unit: Menu
Projeto: ctrDespesa
Crie neste formulário, o menu com itens:

Caption Shortcut
&Cadastro  
C&liente Ctrl + L
-  
Sai&r Alt + F4
&Despesa  
L&ançamento Ctrl + A

Observação: O menu Despesa deverá ficar ao lado do Cadastro.

Acesso ao Banco de Dados utilizando o DbNavigator

O DbNavigator é a forma mais rápida para acessar a base de dados, já que é um componente que não necessita de nenhuma linha de código para incluir, editar, salvar, excluir dados na tabela.

Criando o formulário de Clientes

Clique no botão New Form. Salve-o como: Cliente.
Na guia Standard selecione o componente Panel e coloque no formulário, alterando as propriedades:
Name: pnlDados
Caption: deixe em branco
BevelInner: bvLowered

Selecione a Guia BDE. Coloque o componente Table e altere as propriedades:
Name: tbCliente
Databasename: Nesta propriedade você deveria digitar: C:\Despesa\Dados. Porém vamos utilizar um recurso no Delphi que é o Alias, que é o apelido que guarda o caminho onde estão as tabelas. O Alias tem a vantagem de, mesmo que a tabela mude de localização, é só atualiza-lo, caso contrário você terá que alterar em todas os componentes Table de cada formulário.

Criando Alias

- Entre no Menu Tools / Database Desktop.
- Clique no Menu Tools / Alias Manager.
- Clique no botão New. Digite no name: Despesa.
- Clique no botão Browse e localize a pasta Despesa/Dados.
- Confirme e responda Sim para atualiza-lo na lista já existente dos Alias.
Volte na propriedade Databasename e selecione o nome do aliás que você criou.
TableName: Selecione a tabela Cliente.

Selecione a Guia Data Access . Coloque o componente Data Source e altere as propriedades:
Name: dsCliente
DataSet: tbCliente

DbNavigator

Selecione a Guia Data Control . Coloque o componente DbNavigator e altere a propriedade:
DataSource: dsCliente.

Fields Editor

Clique com o botão direito no componente tbCliente que você colocou no formulário, e selecione: Fields Editor. Selecione Add Fields e confirme. Clique aqui para ter mais detalhes sobre o fields editor.
Arraste cada campo para dentro do painel. Automaticamente o delphi já configura as propriedades:
Data Source: dsCliente
Data Field: Nome do campo (no primeiro será código e assim suscessivamente).
Name: dbeCodigo.
O formulário deverá ficar como a imagem abaixo:

Abrindo a tabela

Dê um clique no formulário.
Vá até a guia Events e selecione o evento onShow.
Dê um duplo clique dentro da caixa ao lado. Na janela de código digite:
tbCliente.Open //Abre a tabela
selecione o evento onClose.
Dê um duplo clique dentro da caixa ao lado. Na janela de código digite:
tbCliente.Close //Fecha a tabela.
Salve o formulário novamente.
Pressione as teclas Shift + F12 e selecione o formulário Menu.
No menu cadastro / cliente, digite:
frmCliente.ShowModal
No menu cadastro / sair, digite:
Close;

Clique no botão New Form. Salve-o como: Despesa. Crie o formulário frmDespesa, de acordo com a imagem abaixo:


Pressione as teclas Shift + F12 e selecione o formulário Menu.
No Menu Despesa / Lançamento, digite:
frmDespesa.ShowModal

Dicas

Consulta por intervalo de data com a instrução Filter
Localizar um registro em paradox com o comando FindKey
Quando fechar o formulário será solicitado confirmação
Obtendo o conteúdo de uma coluna do dbGrid

Consulta por intervalo de data com a instrução Filter

dmDespesa.tbDespesa.IndexFieldNames :='Data'; //Ativa o índice secundário por Data
dmDespesa.tbDespesa.Filter := 'Data >=''' + mskDataInicial.Text + '''' +
'and Data <= ''' + mskDataFinal.Text + '''';
dmDespesa.tbDespesa.Filtered := True; //Ativa o filtro

Para Localizar um registro em paradox com o comando FindKey
if (not dmDespesa.tbCliente.FindKey([txtCodCliente.Text])) then
begin
MessageDlg('Cliente não cadastrado !',mtInformation,[mbOK],0);
end;

Quando fechar o formulário será solicitado confirmação

No evento onCloseQuery do formulário, coloque o código abaixo:
CanClose:=False;
if messagebox (handle, 'Deseja sair?', 'Aviso', mb_IconInformation +
mb_YesNo + mb_DefButton2)= idyes then
Canclose:= True;

Obtendo o conteúdo de uma coluna do dbGrid

Exemplo 1:
txtPreco.Text := grdDetalhes.Columns.Items[2].Field.Text; //Coloca o conteúdo da terceira coluna no edit

Exemplo 2:
dmOficina.tbPedido.Filter := 'Numero =' + grdDetalhes.Columns.Items[0].Field.Text; //Filtra a primeira coluna
dmOficina.tbPedido.Filtered := True; //Ativa o filtro

1