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
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.
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.
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.
- 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
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