Você está na página 1de 60

A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l

_______________________________________________________________________________









DELPHI





APLICAES PARA
BANCO DE DADOS LOCAL




Prof. Jos Geraldo Orlandi
FAVI Instituto de Ensino Superior
Verso 1.0 Maio 2004






1
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
NDICE

1. INTRODUO A BANCO DE DADOS........................................................................................ 3
BDE................................................................................................................................................................................................................. 3
BDE ADMINISTRATOR...................................................................................................................................................................................... 3
ARQUITETURA DO BANCO DE DADOS DO DELPHI............................................................................................................................................... 4
ARQUITETURA DOS COMPONENTES DE BANCO DE DADOS ................................................................................................................................. 4
DATABASE DESKTOP........................................................................................................................................................................................ 5
ALIASES ........................................................................................................................................................................................................... 7
DATABASE EXPLORER....................................................................................................................................................................................... 7
PALETA DE COMPONENTES DA PGINA DE ACESSO DE DADOS ........................................................................................................................... 7
PALETA DE COMPONENTES DA PGINA DE CONTROLE DE DADOS....................................................................................................................... 8
USANDO DATASETS.......................................................................................................................................................................................... 9
ESTADOS DO DATASET ..................................................................................................................................................................................... 9
UTILIZANDO O COMPONENTE E DATASOURCE................................................................................................................................................. 10
PROPRIEDADES DO OBJETO TDATASET........................................................................................................................................................... 12
MTODOS DO OBJETO TDATASET................................................................................................................................................................... 13
EVENTOS DO OBJETO TDATASET.................................................................................................................................................................... 14
UTILIZANDO O OBJETO TFIELDS ..................................................................................................................................................................... 15
COMPONENTE TABLE...................................................................................................................................................................................... 18
CRIANDO UMA APLICAO UTILIZANDO O COMPONENTE TABLE..................................................................................................................... 18
O COMPONENTE QUERY ................................................................................................................................................................................. 22
CRIANDO UMA APLICAO UTILIZANDO O COMPONENTE QUERY .................................................................................................................... 24
UTILIZANDO O COMPONENTE DATABASE GRID ............................................................................................................................................... 27
2. BANCOS DE DADOS RELACIONAIS........................................................................................ 30
CHAVES DE ACESSO........................................................................................................................................................................................ 30
CHAVES PRIMRIAS........................................................................................................................................................................................ 30
CHAVES SECUNDRIAS ................................................................................................................................................................................... 30
CHAVES ESTRANGEIRAS.................................................................................................................................................................................. 31
CONSISTNCIA E INTEGRIDADE DOS DADOS..................................................................................................................................................... 31
INTEGRIDADE REFERENCIAL ........................................................................................................................................................................... 31
3. FORM WIZARD.......................................................................................................................................................... 33
4. COMPONENTE DATABASE LOOKUP.................................................................................... 35
COMPONENTE DBLOOKUPLISTBOX ................................................................................................................................................................ 35
COMPONENTES DBLOOKUPCOMBOBOX ......................................................................................................................................................... 35
ADICIONANDO UM COMPONENTE DATABASE LOOKUP A UM FORM.................................................................................................................. 35
CRIANDO UMA APLICAO UTILIZANDO UM COMPONENTE DATABASE LOOKUP.............................................................................................. 36
5. CRIANDO UM APLICATIVO MASTER/DETAIL..................................................... 39
TABELA MASTER............................................................................................................................................................................................ 45
TABELA DETAIL.............................................................................................................................................................................................. 47
ALTERANDO AS PROPRIEDADES DE ALGUNS COMPONENTES DO FORMULRIO. .................................................................................................. 49
6. RELATRIOS................................................................................................................................................................ 57
CONSTRUO DE UM RELATRIO SIMPLES ...................................................................................................................................................... 58
CONSTRUO DE UM RELATRIO MASTER/DETAIL ......................................................................................................................................... 59


2
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

1. INTRODUO A BANCO DE DADOS
Os aplicativos de banco de dados do Delphi no tm acesso direto s fontes de dados que eles referenciam. O
Delphi faz interface com o Borland Database Engine (BDE) que tem acesso direto s diversas fontes de dados,
incluindo dBase, Paradox, etc. O BDE tambm pode fazer interface com SQL, permitindo acesso a diversos
servidores, remotos ou locais.

BDE
O Borland Database Engine o corao do Delphi em suas aplicaes com banco de dados principalmente
usando Paradox e dBase. O BDE uma coleo de DLLs que as aplicaes de banco de dados iro fazer
chamadas. Cada estao de trabalho que tiver a aplicao de banco de dados instalada dever ter tambm o
BDE instalado. O Delphi vem com a instalao do BDE para voc adicionar a sua aplicao.

O BDE permite a voc usar tabelas dBase, Paradox ou ODBC em modo multi-usurio. A verso Cliente/Servidor
do Delphi tambm vem com links para servidores de banco de dados como Oracle, Sybase, MS SQL Server,
Informix, e InterBase.

BDE Administrator
Com o BDE Administrator voc pode alterar a configurao da BDE, por exemplo em Configuration/System/Init
voc tem a propriedade Local Share que deve ser setada para True, quando voc quiser que a base de dados
seja compartilhada em uma rede. Alm disso, voc pode criar Aliases, como no Database Explorer.


O BDE Administrator

3
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Arquitetura do Banco de Dados do Delphi
As aplicaes em Delphi no acessam diretamente o banco de dados. O acesso feito atravs do BDE. Portanto
devido a este fato, elas so leves e padronizadas.


Arquitetura do Banco de Dados em Delphi
Arquitetura dos Componentes de Banco de Dados


Arquitetura de Acesso a DB em Delphi


4
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
DataBase Desktop
O DataBase Desktop uma ferramenta do DELPHI para manipulao de Banco de Dados. Ela til
principalmente para:

criao de banco de dados;
alterao das caractersticas dos campos.

EXEMPLO: criar uma tabela contendo os funcionrios de uma empresa.
Para ilustrar o funcionamento do DataBase Desktop ser criada uma tabela de produtos com os seguintes
campos: CDIGO, NOME DA PESSOA, IDADE, SEXO, ENDERECO, CIDADE, UF e SALRIO. Para isto devem ser
seguidos os passos abaixo:

PASSO 1
Clique na opo Tools no menu principal do DELPHI, e, em seguida, na opo Database Desktop. Neste
momento ser aberto o programa Database Desktop.

PASSO 2
No menu principal do Database Desktop selecione a opo File, seguida de New e, por fim, a opo Table
(Erro! A origem da referncia no foi encontrada.).

PASSO 3
O prximo dilogo permite que se selecione o tipo da tabela a ser criada. Selecione a opo Paradox 7 e clique
em OK. As tabelas Paradox tem extenso (DB) e oferecem mais recursos que as tabelas DBase (extenso
DBF).


Database Desktop: criando uma nova tabela.

PASSO 4
Neste instante devem ser definidos os atributos dos campos, como segue:
Field Name: define o nome do campo;
Type: define o tipo do campo. Clicando com o boto direito do mouse pode-se selecionar o tipo do
campo;
Size: define o tamanho do campo. S est disponvel para alguns tipos;
Key: define campos-chave para bancos de dados relacionais.

Ainda nesta tela pode-se definir:
Table properties: define caractersticas gerais dos campos da tabela;
Required Field: define se o campo tem um valor requerido;
Minimum Value: valor mnimo para o campo;
Maximum Value: valor mximo para o campo;
Default Value: valor default para o campo;
Picture: define o tipo de campos figura.


5
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

6

Database Desktop: definindo os atributos dos campos
PASSO 5
Clicando no boto Save As, deve aparecer uma caixa de dilogo para que se possa salvar a tabela em disco.
D um nome a tabela e clique no boto Save.
Verifique com ateno o diretrio onde est gravando a tabela.

Neste instante a tabela foi criada. Para verificar se ela foi criada corretamente pode-se selecionar File | Open |
Table no menu principal do Database Desktop, para poder abrir o arquivo gravado.

Table Properties
Em Table Properties voc define os vrios aspectos de configurao da tabela. Muitas dessas opes podem ser
implementadas no Delphi e vrios programadores preferem no us-las no Database Desktop.

Opo Descrio
Validity Checks Validaes para os campos, como obrigatoriedade, valor mnimo e mximo
Table Lookup Indica que o valor atribudo a um determinado campo tem que estar gravado em outra
tabela
Secondary
Indexes
Cria ndices secundrios
Referential
Integrity
Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N.
Password
Security
Permite a criao de senhas, protegendo a tabela de acesso no autorizado
Table Language Especificar o driver de lngua utilizado pela tabela, geralmente o Pdox ANSI Intl850
Dependent
Tables
Mostra todas as tabela dependentes atravs da integridade referencial
Tipos de Campos
Os principais tipos de campos so mostrados abaixo, mas existem outros alm desses. Os tamanhos marcados
com asterisco indicam que o campo pode guardar tamanhos maiores que os informados, o que ultrapassar o
tamanho ser guardado em um arquivo externo com a extenso MB.
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Tipo Descrio Faixa Tamanho
A Alfanumrico 1-255
N Numrico 10
308

$ Monetrio
S Short Integer 32767
I Long Integer 2147483648
D Data
T Hora
@ Data e Hora de modificao
M Memo 1-240*
G Grfico 1-240*
L Lgico True/False
+ Autoincremental 1-2147483648
Aliases
Um Alias um nome lgico, um atalho para um banco de dados. Todo o trabalho do Delphi com um banco de
dados pode ser feito baseado no Alias, de forma que para mudar de banco de dados, s necessrio mudar o
Alias. Para criar um Alias voc pode usar Database Explorer, o BDE Administrator ou o prprio Database
Desktop.

Database Explorer
Pode aparecer com os nomes Database Explorer ou SQL Explorer. Nele voc pode manipular os Aliases,
navegar pelas estruturas dos bancos de dados, alterar os dados das tabelas e executar comandos SQL.

Para criar um Alias selecione o item Databases, clique em Object/New, escolha o tipo do banco de dados, ou
Standard para dBase, Paradox e arquivos texto, depois digite um nome do Alias, esse nome ser usado pelo
Delphi quando voc quiser acessar o banco de dados, finalmente defina as propriedades do banco de dados na
seo Definition, cada banco de dados ter suas prprias definies. O assunto ser abordado com detalhes
posteriormente.

Paleta de Componentes da pgina de Acesso de Dados


Paleta Data Access


7
Componente Utilidade
TDataSource Atua como um conduto entre componentes TTable, TQuery, TStoredProc e componentes
de controle, como um TDBGrid
TTable Adquire dados de uma tabela de banco de dados via o BDE e fornece dados para um ou
mais componentes de controle de dados atravs do componente TDataSource. Envia
dados recebidos de um componente para um banco de dados via o BDE.
TQuery Usa estruturas em SQL para recuperar dados de uma tabela de banco de dados via o BDE,
e fornece dados para um ou mais componentes de controle de dados atravs de um
TDataSouce, ou usa estruturas em SQL para enviar dados de um componente para um
banco de dados via o BDE.
TStoreProc Habilita uma aplicao para acessar procedimentos armazenados em um servidor. Envia
dados recebidos de um componente para um banco de dados via o BDE.
TDataBase Instala uma conexo permanente com um banco de dados, especialmente um banco de
dados remoto requerendo um login do usurio e uma senha.
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
TBatchMove Copia a estrutura de uma tabela ou seus dados. Pode ser usado para mover tabelas
inteiras de uma formato de banco de dados para outro.
TSession Fornece gerenciamento global para um grupo de conexes a banco de dados dentro de
uma aplicao. Delphi cria automaticamente uma sesso default se no for criada pelo
usurio.
TUpdateSQL Aplica cached updates como agente de queries ou stored procedures que no podem ser
salvas diretamente no banco de dados.
TNestedTable um componente Dataset que encapsula uma tabela de banco de dados que est
aninhada como um campo dentro de uma outra tabela.

Paleta de Componentes da pgina de Controle de Dados


Paleta Data Controls

Componente Utilidade
TDBGrid Grade padro de controle de dados que possibilita visualizar e editar dados de forma
tabular, semelhante a uma planilha; faz uso extensivo das propriedades do TField
(estabelecidos no Editor de Campos Fields Editor) para determinar a visibilidade de
uma coluna, formato da visualizao, ordem, etc.
TDBNavigator Botes de navegao para controle de dados que move o apontador do registro
corrente de uma tabela para o posterior ou anterior, inicia insero ou modo de
edio; confirma novos ou modificaes de registros; cancela o modo de edio; e
refresca (refaz) a tela para recuperar dados atualizados.
TDBText Rtulo de controle de dados que pode mostrar um campo corrente do registro ativo.
TDBEdit Caixa de edio de controle de dados que pode mostrar ou editar um campo
corrente do registro ativo.
TDBCheckBox Caixa de verificao de controle de dados que pode mostrar ou editar dados lgico
de uma campo corrente do registro ativo.
TDBListBox Caixa de Lista de controle de dados que pode mostrar valores da coluna de uma
tabela.
TDBComboBox Caixa de Lista mvel de controle de dados que pode mostrar ou editar valores da
coluna de uma tabela.
TDBRadioGroup Grupos de radio de controle de dados com botes de rdio que pode mostrar ou
setar valores de colunas.
TDBMemo Caixa memo de controle de dados que pode mostrar ou editar dados textos do
registro corrente ativo.
TDBImage Caixa de Imagem de controle de dados que pode mostrar, cortar ou colar imagens
BLOB bitmaps do registro corrente ativo.
TDBLookupList Caixa de Lista de controle de dados que mostrar valores mapeados atravs de outra
tabela em tempo de compilao.
TDBLookupCombo Caixa de Combo de controle de dados que mostrar valores mapeados atravs de
outra tabela em tempo de compilao.
TDBRichEdit Representa um controle de edit multi-linhas que pode mostrar e editar um campo
memo em texto rico em um dataset..
TDBCtrlGrid Mostra registros de uma fonte de dados em um lay-out com tipo de formato livre.
TDBChart derivado do TChart e herda todas suas funcionalidades. Adquire a srie de dados
direto de um banco de dados.


8
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Usando DataSets

Para manipular e consultar bancos de dados, voc precisa entender o conceito de dataset. Um dataset no
Delphi um objeto que consiste de uma srie de registros, cada um contendo qualquer quantidade de campos
e um ponteiro para o registro atual. O dataset pode ter uma correspondncia direta, um-para-um, com uma
tabela fsica, ou, como um resultado de uma query, pode ser um subconjunto de uma tabela ou uma juno de
diversas tabelas. As classes de componentes

Um dataset no Delphi o tipo de objeto TDataSet e uma classe abstrata. Uma classe abstrata uma classe
de onde voc pode derivar outras classes, mas no pode criar uma varivel desta classe. Por exemplo, ambos
os componentes Query e Table classificam-se como componentes TDataSet porque cada um foi derivado do
objeto TDataSet. Note que voc no encontrar nenhum componente chamado TDataSet nas paletas. O
TDataSet contm as abstraes necessrias para manipular diretamente uma tabela. a ferramenta utilizada
para abrir uma tabela e navegar por suas colunas e linhas.

Os componentes neste captulo so referenciados pelo seu tipo de objeto (identificado no Delphi pelo seu nome
com o prefixo T). O termo componente DataSet utilizado para referenciar um componente Table, Query, ou
StoredProc. TTable, TQuery, e TStoredProc so descendentes de TDataSet, ou seja, eles herdam as
propriedades de TDataSet.


Datasets
Estados do DataSet

Estado Descrio
dsInactive O Dataset esta fechado.
dsBrowse Estado de Espera. O estado default quando um dataset aberto. Registros podem ser
visualizados mas no mudados ou inseridos.
dsEdit Habilita a linha corrente para ser editada.
dsInsert Habilita uma nova linha para ser inserida. Uma chamada para o Post inserir a nova linha.
dsSetKey Habilita FindKey, GotoKey, and GoToNearest para procurar valores nas tabelas do banco de
dados. Estes mtodos somente pertencem para o componente TTable. Para TQuery, a
procura feita com a syntax do SQL.
dsCalcFields Modo quando os OnCalcFields executado; previne qualquer mudana para outros campos
ou campos calculados. Raramente usado explicitamente.


9
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

10

Estados de um Dataset

Utilizando o Componente e DataSource

O componente DataSource atua como intermedirio entre o componente DataSet (TTable, TQuery, ou
TStoredProc) e os componentes Data Control. Dentre os componentes Data Control incluem DBGrid, e DBText
entre outros.

Um Componente DataSource gerencia o relacionamento entre uma tabela de banco de dados e a representao
deste dado em seu form. um intermedirio entre os componentes DataSet e DataControl. Componentes
DataSet gerenciam a comunicao com o Borland Database Engine (BDE), e o componente DataSource
gerencia a comunicao com componentes data-aware Data Control. Em uma tpica aplicao de banco de
dados, um componente DataSource associado com um componente DataSet (Table ou Query) e um ou mais
componentes Data Control (tais como DBGrid).

A figura a seguir mostra este relacionamento:

A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Funo do Componente DataSource

Utilizando Propriedades e Eventos DataSource
As propriedades e eventos chave do componente DataSource so:
Propriedade DataSet
Propriedade Enabled
Propriedade AutoEdit
Evento OnDataChange
Evento OnUpdateData
Evento OnStateChange

Utilizando a propriedade DataSet do Componente DataSource
A propriedade DataSet identifica o nome de um componente DataSet. Voc pode atribuir propriedade DataSet
atravs de programao ou utilizando o Object Inspector. O valor atribuido propriedade DataSet o nome de
um objeto TDataSet. Por exemplo, a linha de cdigo a seguir atribui um nome ou objeto TQuery propriedade
DataSet de um componente ou objeto DataSource.

DataSource1.DataSet : = Query1

Voc pode inserir diversos componentes Query, Table, e StoredProc em um form a atribuir a propriedade
DataSet baseado em uma condio no programa. Voc tambm pode atribuir a propriedade DataSet a um
nome ou objeto TQuery, TTable, ou TStoredProc encontrado em outro form utilizando o identificador da unit do
form. Por exemplo, aps incluir a Unit1 na clusula uses, voc pode digitar o seguinte:

DataSource1.DataSet : = Unit1.Form1.Table1;

Utilizando a Propriedade Enable do Componente DataSource
A propriedade Enable inicia ou termina a comunicao entre os componentes TDataSource e DataControl. do
tipo booleano assumindo True ou False. Por exemplo, o cdigo a seguir desabilita o TDataSource, procura por
um valor coincidente de nmero do cliente, e depois habilita o TDataSource para que ou a linha do cliente ou a
ltima linha seja exibida.

DataSource1.Enabled : = False;
Table.First;
While not Table1.EOF do
begin
if Table1.FieldByName(NoCliente).AsString = LookupCust then
Break;
Table1.Next;
end;
DataSource1.Enabled : = True;

11
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Utilizando a propriedade Enable permite que voc desconecte temporariamente o componente visual Data
Control do TDataSource.
No exemplo anterior, se a tabela contiver 2000 linhas e o TDataSource estiver habilitado, o usurio de sua
aplicao veria 2000 linhas rolando na tela durante esta operao. Desabilitando TDataSource uma maneira
mais eficiente de se pesquisar em um grande nmero de linhas, pois o componente Data Control no atrasar a
procura exibindo cada linha conforme esta for sendo alterada.
Utilizando a Propriedade AutoEdit do Componente DataSource
A propriedade AutoEdit controla como a edio iniciada nos componentes Data Control.
Os valores das propriedades AutoEdit so:
True
O modo de edio iniciado sempre que o usurio comece a digitar dentro de um componente Data Control.
False
O modo de edio iniciado quando o mtodo Edit invocado, por exemplo, aps o usurio dar um clique
sobre o boto Edit do Navigator. Este parmetro controla a edio.

Dentro do seu cdigo, voc pode utilizar os seguintes mtodos para controlar as alteraes nos dados da tabela
quando AutoEdit estiver como False:
Edit
Post
Cancel

O cdigo a seguir um exemplo utilizando o mtodo Post:

DataSource1.DataSet.Edit; {Start edit mode}
DataSource1.DataSet.Fields [3] .AsString : = Hello;
DataSource1.DataSet.Post;
Utilizando o Evento OnDataChange do Componente DataSource
O evento OnDataChange ocorre sempre que:
A propriedade State do TDataSource mudar do estado dsInactive
Ocorrer uma alterao de campo, registro, tabela, query ou layout

Este evento associado com alteraes na exibio de dados, tais como rolar para um novo registro ou
ativando TDataSource. Este evento til para monitorar alteraes nos componentes Data Control.
Utilizando o Evento OnUpdateData do Componente DataSource
O evento OnUpdateData ocorre quando:
O registro atual no TDataSet estiver para ser atualizado
Uma alterao estiver para ser confirmada

Este evento til na monitorao de alteraes nos dados de uma tabela. Por exemplo, voc pode utilizar este
evento para criar auditor de alteraes nos dados em sua aplicao.

Utilizando o Evento OnStateChange do Componente DataSource
O evento OnStateChange ocorre sempre que a propriedade State de DataSource for alterada. Este evento til
para monitorao de alteraes na propriedade State. A propriedade State pode ter os seguintes valores:
dsInactive
dsBrowse
dsEdit
dsInsert
dsSetKey
dsCalcFields
Propriedades do Objeto TDataSet
A tabela a seguir descreve as propriedades mais importantes do objeto TDataSet:



12
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Propriedade Descrio
Active Abre ou fecha um componente DataSet. Abrir um componente DataSet estabelece a
conexo entre o componente e o banco de dados. Voc pode definir a propriedade Active
no Object Inspector durante o design ou diretamente em seu cdigo, como segue:

if DeActivate = true then
Table1.Active : = True
Else
Table1.Active : = False;

Os mtodos Open e Close tambm definem a propriedade Active de TDataSet.
EOF
(End of File)
BOF
(Beginning of
File)
Propriedades somente de leitura (read-only) com os seguintes valores:
EOF definido para True quando voc tenta mover para alm da ltima linha do
dataset
BOF definido para True quando o componente DataSet aberto ou quando o
ponteiro do DataSet para a linha atual estiver posicionado na primeira linha.
Fields Um array do objeto TField. Voc pode definir e ler dados dos campos da linha atual
utilizando esta propriedade. Por exemplo:

Table1.Fields[0]. AsString : =
Hello;
Table1.Fields[1] .AsString : =
World;
Mtodos do Objeto TDataSet
O objeto TDataSet fornece ao componente Table diversos mtodos.
Alguns dos mtodos mais importantes so mostrados na tabela a seguir:

Mtodo Descrio
Open
Close
Refresh
Operam nos datasets, como segue:
O mtodo Open equivalente a definir a propriedade Active para True.
O mtodo Close define a propriedade Active para False
O mtodo Refresh permite ler novamente o dataset do banco de dados . Se voc precisa
se assegurar que os dados so os mais atuais, contendo quaisquer alteraes feitas por
outros usurios, utilize o mtodo refresh. Um componente Table, Query, ou StoredProc
deve estar aberto com open quando Refresh for chamado.
Um exemplo destes mtodos :

Table1.Open;
Table1.Close;
Table1.Refresh;
First
Last
Next
Prior
MoveBy
Permite navegar ou alterar a linha atual do dataset. A seguir, um exemplo utilizando vrios
destes mtodos:

Table1.First
While not Table1.EOF do
begin
{Seu cdigo aqui}
Table1.Next;
end;

O mtodo MoveBy move um nmero especificado de linhas. Por exemplo:
Table1.MoveBy(3) move 3 linhas para baixo.
Table1.MoveBy(-2) move 2 linhas para cima.

Insert
Edit
Delete
Append
Permite modificar os dados em uma tabela de banco de dados, como segue:
O mtodo Insert permite adicionar uma linha tabela. Por exemplo:

Table2.Insert;

13
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Post
Cancel
Table2.Fields[0] .AsInteger : = 20;
Table2.Fields[1] .AsString : = News;
Table2.Fields[ 2] .AsString : = 5 Horas;
Table2.Post;

O mtodo Post faz com que a operao Insert Update ou Delete ocorra.
O mtodo Cancel faz com que uma operao Insert Delete, Edit ou Append no ocorrida
seja cancelada.
FieldByName Fornece uma maneira de acessar dados de uma coluna especificando no nome da coluna do
banco de dados. Como no exemplo a seguir:

s : = Table2.FieldByName (area) .AsString;
SetKey
GotoKey
Procura atravs dos datasets, como segue:
SetKey alterna a tabela para o modo de pesquisa (search). Enquanto neste modo, a
propriedade Fields tem uma utilizao especial.
GotoKey inicia a pesquisa por um valor coincidente com o valor encontrado em
Fields[n]. Fields[n] contm o valor a ser pesquisado por valores em outras colunas
definindo a coluna Fields correspondente.
O exemplo a seguir mostra um exemplo da utilizao de SetKey e GotoKey:

Table1.SetKey;
Table1.Fields[0] .AsString
Edit1.Text;
Table1.GotoKey;
SetRangeStart
SetRangeEnd
ApplyRange
Permite ser mais seletivo nos dados que sua aplicao seleciona ou utiliza na tabela.
Geralmente uma tabela grande e voc quer selecionar somente uma srie de valores da
tabela. O mtodo Range permite fazer tal seleo. Exemplo:

Table1.SetRangeStart
Table1.Fields[0] .AsString : =
Edit1.Text;
Table1.SetRangeEnd
Table.Fields[0] .AsString : =
Edit2.Text;
Table1.ApplyRange;

A primeira chamada SetRangeStart o coloca no modo range e a propriedade Fields toma
um significado especial. Utilize a propriedade Fields para especificar o valor de incio para a
srie. A chamada para SetRangeEnd inicia um modo onde os valores digitados na
propriedade Fields so utilizadas como o valor final da srie. ApplyRange faz com que o
comando seja processado. Um dataset criado contendo os valores entre os valores de
incio e final.
FreeBookmark
GeTBookMark
GotoBookmark
Permite criar um marcador de linha em uma tabela ou query e depois retornar esta linha
posteriormente. Os mtodos Bookmark utilizam um tipo de objeto chamado TBookMark.
Por exemplo:

Var
Marker : TBookMark;
begin
Marker : = Table2.GeTBookMark;
Table2.GotoBookmark(Marker);
Table2.FreeBookmark(Marker);

O mtodo GeTBookMark aloca um marcador para linha da tabela. O mtodo GotoBookmark
altera a localizao na tabela para a linha indicada pelo Bookmark alocado anteriormente.
Utilize o mtodo FreeBookmark para liberar o espao alocado para o marcador.
Eventos do Objeto TDataSet
O objeto TDataSet permite responder a um grande nmero de eventos. A tabela a seguir descreve diversos
deles:


14
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Evento Descrio
OnOpen

OnClose

OnNewRecord
BeforeInsert

AfterInsert

BeforeEdit

AfterEdit

BeforePost

AfterPost

OnCancel

OnDelete

Permite construir e controlar o comportamento de aplicaes de bancos de dados.
Exemplos de utilizao seguem:
Evento BeforePost para validar os campos de um registro antes de inser-lo ou
atualiz-los
Evento AfterPost para gravar um registro de auditoria quando necessrio
Evento OnDelete para gravar cdigo que efetue a deleo em cascata quando
apropriado
Utilizando o Objeto TFields
O objeto TField, como o objeto TDataSet, no encontrado nas paletas. uma propriedade do objeto TdataSet.
Algumas propriedades no Object Inspector so objetos com seu prprio conjunto de propriedades. TFields um
deles.
Propriedades Fields do Objeto TDataSet
Uma das propriedades do Objeto TDataSet (portanto, os componentes Table, Query, e StoredProc) a
propriedade Fields.
Como discutido anteriormente neste captulo, a propriedade Fields permite acessar os campos individuais do
dataset. A propriedade Fields um array dos objetos TFields. Este array ou lista gerada dinamicamente
durante a execuo ( e portanto, no aparece na lista de propriedades do Object Inspector). O array representa
cada uma das colunas no componente Table.
Objetos estticos TFields so visveis no Object Inspector. Sees posteriores deste captulo explicam como
criar uma lista esttica de objetos TField, mas primeiro, voc deve entender algumas das propriedades destes
objetos.

Fields Editor
Para criar objetos para os campos de uma tabela clique duas vezes no componente Dataset ou escolha Fields
Editor no seu menu de contexto, na janela do Fields Editor, clique com o boto direito do mouse e escolha Add,
na janela Add Fields, escolha os campos que voc vai querer usar e clique em Ok.
No Fields Editor podemos tambm remover os campos criados, alterar sua ordem de apresentao e usar suas
propriedades e eventos no Object Inspector. Para cada campo criado um objeto de um tipo descendente de
TField, como TStringField, TIntegerField, TFloatField. As principais propriedades, mtodos e eventos dos objetos
TField esto listadas nas tabelas abaixo.
Se voc no criar nenhum objeto TField, todos os campos da tabela estaro disponveis, mas caso voc crie
algum, somente os campos que voc criar estaro disponveis.
Se voc selecionar os campos no Fields Editor e arrastar para o Form, sero criados os controles visuais para
esses campos, Label, DBEdit e outros, mas antes coloque a descrio dos campos na propriedade DisplayLabel.
TField
A classe TField usada como ancestral para todos as classes dos campos. Geralmente iremos usar objetos de
classes descendentes de TField, mas em todos eles podemos encontrar os itens mostrados abaixo.


15
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Propriedades Descrio
Alignment Alinhamento do texto do campo nos controles visuais
AsBoolean Valor do campo convertido para Boolean
AsCurrency Valor do campo convertido para Currency
AsDateTime Valor do campo convertido para DataTime
AsFloat Valor do campo convertido para Double
AsInteger Valor do campo convertido para Integer
AsString Valor do campo convertido para string
AsVariant Valor do campo convertido para Variant
Calculated Indica se o campo calculado em tempo de execuo
CanModify Indica se um campo pode ser modificado
ConstraintErrorMessage Mensagem de erro se a condio de CustomConstraint no for satisfeita
CustomConstraint Condio de validao do campo
DataSet DataSet onde est o campo
DataSize Tamanho do campo, em Bytes
DataType Propriedade do tipo TFieldType, que indica o tipo do campo
DefaultExpression Expresso com valor Default do campo para novos registros
DisplayLabel Ttulo a ser exibido para o campo
DisplayText Texto exibido nos controles visuais associados ao campo
DisplayWidth Nmero de caracteres que deve ser usado para mostrar o campo no
controles visuais
EditMask Mscara de edio do campo
FieldKind Propriedade do tipo TFieldKind que indica o tipo do campo, como
Calculado ou Lookup
FieldName Nome do campo na tabela
FieldNo Posio fsica do campo na tabela
Index Posio do campo nos controles visuais
IsIndexField Indica se um campo vlido para ser usado como ndice
IsNull Indica se o campo est vazio
KeyFields Campo chave da tabela no relacionamento com LookupDataSet, usado
em campos Lookup
Lookup Indica se um campo Lookup
LookupCache Define se ser usado cache para campos Lookup
LookupDataSet DataSet onde est definido o valor do campo Lookup
LookupKeyFields Campo chave do relacionamento em LookupDataSet
LookupResultField Valor do campo, que ser mostrado nos controles visuais
ReadOnly Define se um campo somente para leitura
Required Define se o campo obrigatrio
Size Tamanho fsico do campo
Text Texto de edio do campo
Value Acesso direto ao valor do campo
Visible Define se um campo visvel
Eventos Descrio
OnChange Chamado quando o valor do campo mudado
OnSetText Chamado pelos controles visuais para atribuir o texto digitado pelo
usurio ao campo
OnGetText Chamado para formatar o texto de exibio do campo
OnValidate Validao do valor atribudo ao campo, caso o valor no seja vlido, gere
uma exceo

16
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Mtodo Descrio
Assign Atribui um valor de um campo a outro, inclusive nulo
FocusControl Seta o foco para o controle visual ligado ao campo nos Forms
Clear Limpa o contedo do campo

O cdigo a seguir mostra alguns exemplos para a utilizao das propriedades do TField:

Fields[0] .AsString : = sto uma string;
FieldByName ('Casado) .AsBoolean : = False;
SomaDespesas : = Fields[5] As.Float;
NoPedido ; = Fields[3] .AsInteger;

Esto listadas abaixo algumas classes que realmente iremos manipular no tratamento dos campos de uma
tabela, so classes descendentes de TField.
TStringField TBlobField TTimeField
TSmallintField TIntegerField TBytesField
TFloatField TWordField TVarBytesField
TCurrencyField TAutoIncField TGraphicField
TBooleanField TBCDField TMemoField
TDateField TDateTimeField

Em alguns desses campos voc pode encontrar as propriedades mostradas abaixo, que no esto presentes em
TField.

Propriedades Descrio
MaxValue Valor mximo para o campo
MinValue Valor mnimo para campo
DisplayFormat Formato de apresentao do campo, como ,0.00 % ou ,0.## Km
EditFormat Formato de edio do campo
Currency Define se um campo monetrio
DisplayValues Usado com campos Boolean, define o texto para True e False, como Sim;No
Mtodos Descrio
LoadFromFile Carrega o contedo do campo de um arquivo
SaveToFile Salva o contedo do campo para um arquivo


17
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Componente Table

O componente Table um componente TDataSet que comunica com uma tabela de banco de dados atravs do
BDE. A tabela do banco de dados pode ser tanto local ou em um servidor remoto.

TTable herda de TDataSet a capacidade de manipular datasets. Ele fornece mtodos, tais como Next, First,
Last, Edit, SetRange e Insert.

Propriedades do Componente Table
Como vimos, muito da funcionalidade do componente Table vem do objeto TDataSet. O componente Table
permite utilizar as propriedades, mtodos e eventos TDataSet, mas possui diversas propriedades prprias
relativas s tabelas de banco de dados. Por exemplo, o componente Table permite que voc:
Especifique ndices a serem utilizados
Crie um cursor Linkado

Cursores Linkados coordenam dois ou mais componentes DataSet para criar forms master-detail.
A tabela a seguir descreve as propriedades mais importantes do componente Table:

Propriedade Descrio
DatabaseName Especifica o seguinte:
O diretrio local de um banco de dados que contenha a tabela a ser visualizada
O alias de um banco de dados remoto
TableName Especifica o nome do banco de dados a ser visualizado
Exclusive Controla o acesso de usurio ao banco de dados. Os valores so:
True
Assegura que nenhum outro usurio acesse ou modifique a tabela enquanto voc a
mantiver aberta
False
Permite que outros usurios acessem ou modifiquem a tabela enquanto voc a mantiver
aberta. Este o default.

IndexName Identifica um ndice secundrio para Table.
Voc no pode alterar IndexName enquanto a tabela estiver ativa
MasterFields Especifica o nome dos campos ligados ou campos na
propriedade MasterFields para criar um cursor linkadoa uma tabela secundria
Para especificar diversos campos, voc deve separar os nomes de campos com uma
barra vertical (|) .
MasterSource Especifica o TDataSource de onde TTable obter os dados para a tabela mster
ReadOnly Pe a tabela em modo somente-leitura. Os valores so:
True
Previne o sistema de gravar alteraes ao banco de dados onde a tabela resida
False
Permite que o sistema grave alteraes ao banco de dados onde a tabela resida


Criando uma Aplicao Utilizando o Componente Table
Este processo um tutorial de exemplo. Voc construir uma aplicao de exemplo utilizando uma tabela
chamada COUNTRY.
Esta tabela exibe informao sobre pases do mundo inteiro. Ao invs de utilizar o DBNavigator, voc utilizar
botes padro e mtodos DataSet para fornecer a funcionalidade do DBNavigator.
Este tutorial mostra como utilizar:
Os mtodos First, Next, Prior e Last
Os mtodos BOF e EOF
Os mtodos Edit, Insert e Cancel

18
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________


Estgio Processos
1 Adicionar e definir propriedades para os componentes TDataSet
2 Adicionar e definir propriedades para componentes DBGrid e Button
3 Criar event handlers OnClick para componentes Button
4 Executar e testar a aplicao
Passos para o Estgio 1

Passo Ao
1 Abra um novo projeto e grave-o.
Quando solicitado, grave a unit como UDSEVENT.PAS e o projeto como PDSEVENT.DPR.
2 Utilizando a pgina Data Access, adicione o seguinte ao seu form:
Um componente Table
Um componente DataSource
3 Defina as propriedades para os componentes Table e DataSource como segue:

Nome do Componente Propriedade Valor
Table1 DatabaseName
TableName
Active
DBDEMOS
COUNTRY.DB
True
DataSource1 DataSet
AutoEdit
Table1
False

Passos para o Estgio 2

Passo Ao
1 Utilizando a pgina Data Control, adicione um componente DBGrid.
Arranje os componentes para que seu form esteja similar figura a seguir:


Usando o componente Table


19
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Passo Ao
2 Utilize a tabela a seguir para definir propriedades do DBGrid para que utilizem o componente
DataSource do form:

Nome do Componente Propriedade Valor
DBGrid1 DataSource DataSource1

Passo Ao
3 Adicione oito botes ao form, e arranje-os para que seu form esteja similar figura a seguir:



Montando o aplicativo usando Table

Passo Ao
4 Utilize o Object Inspector para definir as seguintes propriedades aos componentes Button:

Nome do Componente Propriedade Valor
Button1 Caption Primeiro
Button2 Caption ltimo
Button3 Caption Prximo
Button4 Caption Anterior
Button5 Caption Editar
Button6 Caption Post
Button7 Caption Cancelarr
Button8 Caption Inserir
Passos para o Estgio 3

Passo Ao
1 Digite o cdigo a seguir para os eventos OnClick nos botes apropriados.


20
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Nome do Componente Evento Cdigo
Button1 OnClick Table1.First;
Button2 OnClick Table1.Last;
Button3 OnClick if not Table1.EOF then
Table1.Next;
Button4 OnClick if not Table1.BOF then
Table1.Prior;
Button5 OnClick Table1.Edit;
Button6 OnClick if Table1.State in
[dsEdit, dsInsert] then
Table1.Post;
Button7 OnClick Table1.Cancel;
Button8 OnClick Table1.Insert;
Passos para o Estgio 4

Passo Ao
1 Compile e grave a aplicao.
Execute e teste cada boto para verificar se o mtodo funciona.
2 Quando tiver completado o teste, grave e feche o projeto.


21
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
O Componente Query
O componente Query permite utilizar comandos SQL para executar o seguinte:
Especificar ou criar datasets que possam ser exibidos
Inserir linhas
Editar a atualizar colunas
Deletar linhas

O componente Query gerencia a comunicao com o BDE e serve como interface entre o BDE e os componentes
DataSource (TDataSource) em seus forms

Como com o componente Table, um componente DataSource anexado ao componente Query para gerenciar a
comunicao entre o componente Data Control e o componente Query. Uma aplicao tpica possui um
componente DataSource para cada componente Query.
Propriedade do Componente Query
A tabela a seguir descreve diversas propriedades importantes do componente Query:

Propriedade Descrio
Active Abre ou fecha uma query. Os valores so:
True
Abre uma query, o que faz com que o comando SQL seja executado, como no exemplo:
{Abre a query}
Query1.Active : = True;
False
Fecha uma query, como segue:
{Fecha a query}
Query1.Active : = False;
Database
Name
Identifica o alias do banco de dados ou o drive e diretrio de um banco de dados local. A
propriedade DatabaseName pode ser definida somente quando a query no estiver ativa,
como no exemplo a seguir:
{Fecha o DBDataSet}
Query1.Active : = False;
Query1.DatabaseName : = Demos;
Query1.Active : = True;
Fields Suportam os campos no componente Query. uma propriedade somente durante execuo
e utilizada para examinar ou modificar um determinado campo, como no exemplo a
seguir:
Query1.Fields[3] .AsString : = K;
DataSource Fornece valores para queries parametrizadas. Uma query parametrizada uma onde um
ou mais valores na condio de seleo no conhecida
Params Guardam os parmetros para uma query parametrizada. Uma query parametrizada envolve
um ou mais valores na condio de seleo que no so conhecidas at a execuo, como
no exemplo a seguir:
Select * from Orders
Where CustNo = :SomeNo
Esta uma propriedade de somente-leitura, durante a execuo.
Consulte o Help Online para maiores informaes sobre queries parametrizadas.
SQL Guarda o texto do comando de query SQL
EOF
(End of File)
BOF (Beginning
of File)
Propriedade somente-leitura com valores a seguir:
EOF True quando voc tenta mover para alm da ltima linha do dataset.
BOF True quando o componente DataSet aberto, ou quando o ponteiro do TDataSet
da linha atual estiver na primeira linha.
Mtodos do Componente Query
A tabela a seguir descreve alguns mtodos do componente Query:


22
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Mtodo Descrio
ExecSQL Executa comando SQL atribuido propriedade SQL se o comando no retornar dados. Quando
estiver inserindo, atualizando ou deletando dados, voc deve utilizar este mtodo. Se estiver
executando um comando de seleo, utilize o mtodo Open. A seguir um exemplo da utilizao
do mtodo ExecSQL:
Query1.Close;
Query1.Clear;
Query1.SQL.Add ( Delete emp where empno = 1010);
Query1.ExecSQL;
Open Abre o componente Query. equivalente a definir a propriedade Active para True. A seguir um
exemplo utilizando o mtodo Open:
Query1.Open;
Close Fecha o componente Query fazendo com que quaisquer atualizaes pendentes sejam
efetuadas no banco de dados. Chamar Close equivalente a definir a propriedade Active para
False. A seguir mostramos um exemplo utilizando o mtodo Close:
Query1.Close;
Prepare Traduz a propriedade SQL para criar a propriedade Text para Submeter ao servidor. O mtodo
Prepare tambm envia a requisio ao servidor para propsito de otimizao, embora nenhum
valor parametrizado esteja incluido. A requisio inteira com parmetros no submetida at
que o mtodo Open ou ExecSQL sejam chamados. Se voc no chamar Prepare explicitamente,
o Delphi chama Prepare implicitamente quando utilizar o comando em ExecSQL. A seguir um
exemplo utilizando o mtodo Prepare:
Query1.Close;
Query1.SQL : =
Delete emp where empno = : empno;
Query1.Prepare;

Mtodos TQuery Herdados de TDataSet
O objeto TDataSet fornece ao componente Query uma grande variedade de mtodos. Alguns dos mais
importantes so mostrados na tabela a seguir:

Mtodo Descrio
First
Last
Next
Prior
MoveBy
Permite navegar ou alterar a linha atual do dataset. A seguir um exemplo utilizando
diversos destes mtodos:
Query1.First
While not Query1.EOF do
begin
{Seu cdigo aqui}
Table1.Next;
End;
O mtodo MoveBy move um nmero determinado de linhas. Por exemplo:
Query1.Moveby(3) move 3 linhas para baixo.
Query1.Moveby (-2)move 2 linhas para cima
Insert
Edit
Delete
Append
Post
Cancel
Permite modificar o conjunto resultante de uma query. O mtodo Insert permite adicionar
linhas tabela, como no exemplo a seguir:
Query2.Insert;
Query2.Fields [0] .AsInteger : = 20;
Query2.Fields [1] .AsString : = News;
Query2.Fields [2] .AsString : = 5 horas;
Query2.Post;
O mtodo Post faz com que as operaes Insert, Update, ou Delete ocorram.
O mtodo Cancel faz com que um Insert, Delete, Edit ou Append no completado seja
cancelado.
SetKey
GotoKey
Pesquisa atravs dos datasets, como segue:
O mtodo SetKey alterna o dataset para o modo de procura. Neste modo, a propriedade
Fields tem uso especial.
O mtodo GotoKey inicia uma procura por um valor que coincida com o valor

23
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
encontrado em Fields[n]. Fields[n] contm o valor que voc est procurando e que
ocorre na primeira coluna da tabela ou dataset. Voc pode procurar por valores em
outras colunas definindo a coluna correspondente.

O exemplo a seguir mostra a utilizao dos mtodos SetKey e GotoKey:
Query1.SetKey;
Query1.Fields [0] .AsString : = Edit1.Text;
Query1.GotoKey;
FreeBookmark
GeTBookMark
GotoBookmark
Permite criar um marcador em uma linha na tabela ou query e retornar posteriormente
para esta linha, como segue:
O mtodo FreeBookmark libera espao alocado para o marcador
O mtodo GeTBookMark aloca um marcador para a linha atual da tabela.
O mtodo GotoBookmark altera a localizao na tabela para a linha indicada por um
marcador alocado prviamente .

Os mtodos Bookmark utilizam o objeto tipo TBookMark, como no exemplo a seguir:
Var
Marker : TBookMark;
begin
Marker : = Query2.GeTBookMark;
Query2.GotoBookmark (Marker);
Query2.FreeBookmark (Marker);

Eventos do Componente Query Derivados de TDataSet
O componente Query responde aos eventos herdados do objeto TDataSet. A tabela a seguir descreve estes
eventos:


Eventos Descrio
OnOpen
OnClose
OnNewRecord
BeforeInsert
AfterInsert
BeforeInsert
AfterEdit
BeforePost
AfterPost
OnCancel
OnDelete
Permite construir e controlar o comportamento da aplicao de banco de dados. Por
exemplo:
O event handler BeforePost valida os campos de um registro antes de inserir ou
atualizar os dados
O evento AfterPost til para gravar um registro de auditoria quando necessrio.
O evento OnDelete til para escrever cdigo que efetue a deleo em cascata quando
apropriado.
Criando uma aplicao Utilizando o Componente Query
Esta seo fornece um aprendizado na utilizao do componente Query. O componente Query possui muitas
caractersticas avanadas. Entretanto, este exemplo focaliza as caractersticas bsicas deste componente.
Este exerccio demonstra como utilizar um componente Query para criar um dataset, e mtodos TDataSet para
executar operaes no dataset, envolvendo os seguintes estgios:

Estgio Processo
1 Construir uma aplicao e exibir os dados utilizando um comando SQL
2 Modificar uma aplicao para consultar um banco de dados, baseado no campo CustID
Passos para o Estgio 1
Execute os passos a seguir para construir uma aplicao de clientes e exibir dados do cliente utilizando um
comando SQL:


24
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Passo Ao
1 Abra um novo projeto e grave-o.
Quando solicitado, grave a unit como EX7SQL.PAS e o projeto como EX7P.DPR.
2 Utilizando a pgina Data Access page da Component Palette, adicione os seguintes ao seu form:
Um componente Query
Um componente DataSource
3 Defina as propriedades dos componentes Query e DataSource, como segue:

Nome do Componente Propriedade Valor
Query1 DatabaseName
RequestLive
DBDEMOS
True
DataSource1 DataSet Query1



Passo Ao
4 Utilizando a pgina Data Controls da Component Palette, adicione os seguintes ao seu form:
Um componente DBGrid
Um componente DBNavigator
5 Utilize a tabela a seguir para definir propriedades dos componentes DBNavigator e DBGrid para
que utilizem o componente DataSource do form:

Nome do
Componente
Propriedades Valor
DBGrid1 DataSource DataSource1
DBNavigator DataSource DataSource1


6 Crie um event handler OnActivate para o form utilizando o Object Inspector. Digite o cdigo abaixo no
handler OnActivate:
Query1.SQL.Add (Select * from customer);
Query1.Open;
Este cdigo adiciona uma instruo SQL propriedade SQL do componente Query. Voc pode definir
esta instruo SQL como uma propriedade utilizando o Object Inspector.
Aps adicionar a instruo SQL, seu event handler deve ser:
Query1.SQL.Add( Select * From Customer );
Query1.Open;
7 Quando sua aplicao for compilada satisfatoriamente. grave-a. Depois, execute sua aplicao e
teste-a utilizando o Navigator para atualizar e inserir linhas no dataset.
8 Quando tiver terminado, feche a aplicao.
Passos para o Estgio 2

Passo Ao
1 Utilizando a pgina Standard do Component Palette, adicione os seguintes ao form:
Dois componentes boto
Um componente Edit
Um componente Label


25
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
2 Utilize a informao da tabela a seguir para definir propriedades destes componentes:

Nome do Componente Propriedade Valor
Button1 Caption Query
Button2 Caption Exec Query
Edit1 Text
Visible
(Empty)
False
Label Caption
Visible
IdCliente
False

Passo Ao
3 Adicione o seguinte cdigo para o evento OnClick do Button1:
Edit1.Visible : = True;
Label1.Visible : = True;
4 Adicione o seguinte cdigo ao evento OnClick do Button2
Query1.Close;
Query1.SQL.Clear;
Query.SQL.Add
(Select * from customer where +CustNo = + Edit1.Text);
Query.Open;
Edit1.Visible : = False;
Label1.Visible : = False;



Passo Ao
5 Compile e grave sua aplicao.
Execute e teste-a atravs do seguinte:
Selecione um nmero de cliente da lista de clientes e d um clique em Query.
Digite o nmero e d um clique em Exec Query para exibir um nico cliente no grid.


26
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Utilizando o Componente Database Grid

Como voc j pode ter observado, o componente DBGrid fornece uma maneira conveniente de se exibir
diversas linhas de dados de um componente Table ou Query. Sua aplicao pode utilizar o DBGrid para inserir,
deletar, editar ou exibir dados de um banco de dados. Combinado com o DBNavigator, o DBGrid permite
protipar e exibir rapidamente dados do banco de dados.

At agora, voc tem visto exemplos utilizando o componente DBGrid. Uma lista completa das propriedades,
mtodos e eventos do DBGrid encontram-se no Help Online

Este tpico oferece sugestes para:
Definir a propriedade Options do Componente DBGrid
Definir caracteristicas de exibio de campo para o componente DBGrid
Propriedades de Options do DBGrid
A figura a seguir mostra um conjunto de propriedades que compem a propriedade Options do componente
DBGrid. O conjunto aparece quando voc clica o sinal (+) na frente da propriedade Options.


Opes do DBGrid
Descrio da Propriedade Options
Voc pode alterar a aparncia e comportamento de uma grade alterando valores da propriedade Options,
utilizando o Object ou escrevendo cdigo. A tabela a seguir descreve as definies de Options do componente
DBGrid:

Propriedade Options Descrio Quando Definido para True
DgEditing O usurio pode editar dados na grade.
Quando a propriedade ReadOnly do DataSet for True e dgEditing tambm for True,
os usurios podem utilizar a tecla Insert para inserir uma linha em branco, ou
pressionar a tecla de seta para baixo quando posicionado no final da grade para
adicionar uma linha em branco, embora no possam digitar texto na nova linha.
DgTitles Os ttulos das colunas so visveis.
DgIndicator Um pequeno ponteiro fica visvel para indicar a coluna atual.

27
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
dgColumnResize As colunas podem ser reajustadas.
DgColLines As linhas entre as colunas ficam visveis
DgRowLines As linhas entre as linhas ficam visveis.
DgTabs Os usurios podem pressionar a tecla Tab e Shift+ Tab para se moverem entre as
colunas da grade.
Propriedade Options como Tipo Set
A propriedade Options do componente DBGrid um tipo set. Voc pode modificar a propriedade Options
utilizando operadores set. As linhas a seguir so comandos Object Pascal vlidos:
DBGrid1.Options : = DBGrid1.Options + [dgTitles];
DBGrid1.Options : = DBGrid1.Options - [dgTitles, dgRowLines];
Definindo Caractersticas de Exibio de Campo para o Componente DBGrid
Geralmente no desenvolvimento de uma aplicao, voc precisa controlar o comportamento de campos no
componente DBGrid. O comportamento default do DBGrid determinar dinamicamente o tamanho do campo e
permitir ao usurio o uso do mouse para reajustar o tamanho do campo. A chave para obter o controle das
caractersticas de exibio do DBGrid ou outro componente data-aware criar uma lista esttica de
componentes Field. Uma vez criados componentes para cada um dos campos no dataset, voc pode definir o
seguinte:
Tamanho de exibio
Formato de exibio
Mscara de Edio
Rtulos de exibio
Passos para Definir Tamanho de Exibio
Execute os passos a seguir para criar campos de exibio de tamanho fixo no componente DBGrid:

Passo Ao
1 Abra o Fields Editor para o componente TDataSet que ser exibido no componente DBGrid.
2 Adicione cada um dos campos de banco de dados que voc queira no dataset.
Este passo cria componentes TFields estticos para os campos a serem exibidos no DBGrid.
3 Localize o componente DBGrid no Object Inspector, e defina a opo dgColumnReSize para
False.
Como alternativa, voc pode escrever comandos Object Pascal em sua aplicao para alterar
esta propriedade.
4 Altere o tamanho da coluna exibida de uma destas maneiras:
-Utilize o mouse para arrastar e reajustar o tamanho das colunas no DBGrid
-Defina a propriedade DisplayWidth para cada um dos componentes Field que o Fields Editor
adicionou.
Definindo a Propriedade DisplayLabel
Uma vez que voc utilizou o Fields Editor para gerar um conjunto de objetos TField para o dataset, voc pode
utilizar o Object Inspector para definir a propriedade DisplayLabel do componente Field. O componente
DisplayLabel do componente Field.
Definindo Propriedade DisplayMask
Campos, Float, Integer e Date possuem uma propriedade DisplayMask. Voc pode utilizar esta propriedade para
formatar a exibio em um DBGrid ou outro componente Data Control. Por exemplo, o formato de exibio
mm-dd-yy pode ser utilizado para exibir um campo data.
Definindo a Propriedade EditMask
Os componentes Field possuem uma propriedade EditMask que voc pode definir sempre que digitar dados em
um DBGrid ou outro componente Data Control. Para definir uma propriedade EditMask, localize o componente
Field no Object Inspector, e clique a propriedade EditMask. O quadro de dilogo Input Mask Editor exibido,
como segue:


28
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Para testar sua mscara de edio, digite um valor no campo Test Input.


Editor de Mscara



29
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

2. BANCOS DE DADOS RELACIONAIS

Existem situaes no projeto de um banco de dados, onde necessrio criar relaes entre tabelas, visando
principalmente evitar inconsistncia e duplicao de informaes. O modo mais comum de se realizar esta
tarefa atravs dos bancos de dados relacionais.

Os bancos de dados relacionais permitem o relacionamento entre as tabelas atravs da definio de chaves
de acesso.

Os bancos de dados tambm devem conter ndices que so utilizados principalmente para agilizar operaes
de pesquisa e classificao. Os bancos de dados que contm ndices para acesso aos dados nele armazenados
so denominados de bancos de dados indexados.

Os ndices em um banco de dados estabelecem uma ordem pr-definida de registros em determinados campos
de uma tabela. No Paradox e no DBase, os ndices so gerados automaticamente, a partir do momento que se
define um campo como chave (key).

VANTAGEM DOS BANCOS DE DADOS INDEXADOS:
os bancos de dados devem ser indexados para agilizar operaes de pesquisa e classificao sobre os
mesmos, a partir dos campos definidos como chave.

DESVANTAGEM DOS BANCOS DE DADOS INDEXADOS:
a indexao em um banco de dados torna as operaes de atualizao e insero mais lentas.
Chaves de Acesso

As chaves so campos do banco de dados para agilizar sua manipulao.

As chaves podem ser classificadas como:
chaves primrias: estabelecem as chaves principais de acesso aos campos de uma tabela;
chaves secundrias: estabelecem chaves auxiliares de acesso aos campos de uma tabela;
chaves estrangeiras: estabelecem chaves de acesso aos campos de outras tabelas.

Chaves Primrias
As chaves primrias so as principais chaves de acesso a um banco de dados. As principais
caractersticas das chaves primrias so:
definindo-se uma chave como primria garante-se que ela no estar duplicada dentro de um banco
de dados;
a definio de chaves primrias, em bancos de dados dBase e Paradox, cria automaticamente um
ndice para acesso aos dados das chaves;
a definio de chaves primrias faz com que o banco de dados seja automaticamente ordenado pelas
chaves;
para definir uma chave como primria em bancos de dados DBase e Paradox, basta colocar um * no
campo Key, utilizando o Database Desktop;

importante ressaltar que um banco de dados pode ter vrios campos definidos como chaves primrias.

Chaves Secundrias
As chaves secundrias estabelecem chaves auxiliares de acesso aos campos de uma tabela. Elas devem ser
utilizadas em campos onde se fazem pesquisas ou classificaes eventuais sobre uma tabela.

Para se definir uma chave secundria, atravs do Database Desktop, deve-se seguir os passos abaixo:
1. Abra o Database Desktop e a tabela onde se quer definir uma chave secundria.
2. Entre na opo Restructure Table.
3. Selecione, na caixa Table properties, a opo Secondary Indexes.
4. Selecione o boto Define.

30
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
5. Selecione o campo que quer utilizar como chave secundria, de modo que ele aparea na lista
Indexed Fields.
6. Clique em OK, d um nome a nova chave secundria e clique novamente em OK.
7. Salve a tabela utilizando o boto Save.

Os campos definidos como chaves secundrias tambm possuem ndices relacionados a eles.
Chaves Estrangeiras
As chaves estrangeiras permitem o acesso e validao a outros banco de dados. Suas principais caractersticas
so:
as chaves estrangeiras permitem que se faa o relacionamento entre os bancos de dados;
as chaves estrangeiras, em um banco de dados, armazenam chaves de outros bancos de dados;
as chaves estrangeiras devem ter o mesmo tipo de sua correspondente chave em um outro banco de
dados.

Para se definir uma chave estrangeira, atravs do Database Desktop, deve-se seguir os passos abaixo:
1. Abra o Database Desktop e a tabela onde se quer definir uma chave estrangeira.
2. Entre na opo Restructure Table.
3. Selecione, na caixa Table properties, a opo Referential Integrity.
4. Selecione o boto Define.
5. Selecione o campo que quer utilizar como chave estrangeira na coluna Fields e clique na seta para a
direita para definir o campo Child Fields.
6. Selecione a tabela com a qual quer estabelecer o relacionamento e clique na seta para a esquerda
para definir o campo Parents Key.
7. O relacionamento est estabelecido entre as chaves definidas em Child Fields e Parents Key, que
devem ter o mesmo tipo.
8. Clique em OK, d um nome a nova chave secundria e clique novamente em OK.
9. Salve a tabela utilizando o boto Save.

A restrio desta definio que o relacionamento pode ser definido apenas com o primeiro campo da outra
tabela.

Em tabelas Paradox para ser definida como chave estrangeira uma chave tem que ser definida como primria
ou secundria.
Consistncia e Integridade dos Dados
A maioria dos bancos de dados relacionais possue recursos para consistir e tornar ntegro os dados
armazenados em suas tabelas. Desta forma, qualquer ferramenta que o usurio utilizar para acess-lo
obrigada a respeitar as regras, mantendo a integridade dos dados. Os recursos de consistncia variam de banco
para banco, mas pode-se definir conceitualmente algumas categorias de integridade como: integridade
referencial, domnios e regras do negcio.
Integridade Referencial
Integridade referencial um conjunto de regras e de consistncias entre os registros de duas tabelas que se
relacionam. Como foi visto no modelo relacional, quando duas tabelas se relacionam, a chave primria de uma
copiada para a outra e se esses dados forem alterados ou excludos da tabela original necessrio verificar o
que ser feito com os dados e registros duplicados na outra tabela. Quando se define uma integridade
referencial, est se definindo o procedimento que ser tomado quando esses processos ocorrerem.
Sejam duas tabelas A e B que se relacionam atravs de uma coluna c que a chave primria de A e
portanto foi repetida em B para se fazer o relacionamento. Quando se define uma integridade referencial para
esse relacionamento, est se definindo que a coluna c da tabela B s pode conter valores j cadastrados na
coluna c da tabela A.


31
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

32

Tabela B
*a
b
c
Tabela A
d
e
.
.
*c

Integridade Referencial
Existem trs formas de se manter essa regra quando registros da tabela A so excludos:

Restrict: Define que se o valor da coluna c de A existir em algum registro de B, o registro no poder
ser excludo e uma mensagem de erro retornar para a aplicao;
Cascade: Define que se o valor da coluna c de A existir em algum registro de B, todos os registros que
possurem esse valor sero tambm excludos;
Set Null: Define que se o valor da coluna c de A existir em algum registro de B, os valores de c em
todos os registros sero transformados para Null;

Em todos os casos, se o usurio tentar inserir um registro em B com um valor de c que no exista na tabela
A, um erro ser reportado aplicao.
Alguns bancos, tambm permitem fazer o mesmo tratamento quando a chave da tabela for alterada, ao invs
de excluda. Entretanto, essa alterao de chaves no deve ser um processo comum nas aplicaes, sendo
normalmente proibidas.
Os bancos de dados possuem formas diferentes de disponibilizar esses servios. Alguns possuem at mais de
uma forma de fazer o mesmo processo. Mas de maneira geral existem duas possibilidades de implementao:

A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

3. FORM WIZARD
O Form Wizard uma ferramenta do DELPHI que permite criar um formulrio padro para a manipulao de
banco de dados. Sua principal vantagem est na automatizao do processo de criao de formulrio, o que
permite ganhar tempo no desenvolvimento da aplicao.

EXEMPLO: neste exemplo ser criado um formulrio para manipular os dados da tabela criada no exemplo
apresentado no Database Desktop.

PASSO 1
Inicie um novo projeto, clicando na opo File no menu principal do DELPHI, e, em seguida, na opo New
Application. Neste momento ser aberto um novo projeto.

PASSO 2
Clique na opo Database no menu principal do DELPHI, e, em seguida, na opo Form Wizard. Neste
momento ser aberto uma tela para iniciar o processo de criao do formulrio.

PASSO 3
Na tela inicial do Form Wizard deve-se selecionar o tipo do banco de dados e o tipo do conjunto de dados. Os
tipos de banco de dados so:
Simple: banco de dados simples, onde todos os dados esto armazenados em uma mesma tabela.
Master/Detail: banco de dados relacional
J o tipo de conjunto de dados pode ser:
TTable: quando os dados forem manipuladas diretamente na tabela.
TQuery: quando os dados forem manipulados a partir de uma consulta.
Para o exemplo apresentado selecione Simple Form, TTable e em seguida clique no boto Next.
Neste instante dever aparecer a tela para seleo do banco de dados.

PASSO 4
Esta tela permite que se selecione a tabela onde esto armazenados os dados. Selecione a tabela criada no
exemplo do Database Desktop e pressione o boto Next. Neste instante dever aparecer a tela de seleo dos
campos a serem editados.

PASSO 5
Esta tela permite selecionar os campos que podero ser editados. Todos os campos que estiverem na coluna
Ordered Selected Fields podero ser manipulados no formulrio. Selecione todos os campos (boto >>) e
clique em Next. Neste instante dever aparecer a tela de layout do formulrio.

PASSO 6
Esta tela permite selecionar a forma de apresentao dos dados, que poder ser na Vertical, Horizontal, ou em
linhas de grade. Selecione a opo Horizontal e clique em Next. Neste instante dever aparecer a tela final de
criao do formulrio.

PASSO 7
Na ltima tela da criao do formulrio deve-se definir se o formulrio o formulrio principal da aplicao e se
na gerao do formulrio deve ser criado ou no um Data Module. Ative a opo Generate main form e
selecione a opo Form and Data Module e clique no boto Finish. Neste instante deve aparecer na tela o
formulrio criado pelo Form Expert, de acordo com as definies selecionadas (Erro! A origem da referncia
no foi encontrada.).


33
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Formulrio criado com o Form Wizard.

34
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
4. Componente Database Lookup
Um database lookup, ou tabela de busca o processo de encontrar texto descritivo de um valor codificado.
Uma situao comum onde tabelas de busca seriam utilizadas, seria quando voc est editando o input de
usurio e quiser exibir uma informao mais significativa, e no valores codificados.

O Delphi fornece dois componentes para buscar valores em uma tabela de banco de dados, ou editar o input
contra um valor em uma tabela. Eles so os seguintes:

Componente DBLookuplistBox
Componente DBLookupComboBox

O termo lookup em cada nome de componente refere-se s tabelas de busca. O termo lookup tables refere-se
s tabelas que contm informao descritiva sobre um valor codificado. Esta seo discute a utilizao destes
componentes. Eles se encontram na pgina Data Controls da Component Palette.
Componente DBLookuplistBox
O componente DBLookuplistBox um componente ListBox data-aware projetado para buscar valores em uma
tabela baseado no valor de uma segunda tabela. O DBLookuplistBox contm um conjunto finito de dados, o
usurio deve selecionar uma das opes da lista. Um DBLookuplistBox permite exibir um conjunto de opes
baseado no valor em outra tabela. O componente DBLookuplistBox difere do componente DBListBox porque
permite coordenar o valor selecionado do DBLookuplistBox com a linha corrente de outra tabela do banco de
dados.
Componentes DBLookupComboBox
O componente DBLookupComboBox um componente ComboBox dataware similar ao BDLookupListBox, exceto
que um usurio pode selecionar um valor na lista ou digitar um novo valor. Um ComboBox de onde o
DBLookupComboBox derivado combina as capacidades de um ListBox com as capacidades de um componente
Edit.
Adicionando um Componente Database Lookup a um Form
Quando voc adiciona um componente DBLookuplistBox ou DBLookupComboBox ao seu form, assumimos que:

Voc possui uma aplicao de banco de dados
O form na aplicao possui pelo menos um DataSource e um componente derivado de TDataSet sendo
utilizado para exibir informaes do banco de dados

Adicionar um componente database lookup envolve o seguinte processo:

Estgio Processo
1 Adicionar o componente database lookup e lig-lo a um componente DataSource existente e
propriedade DataField
2 Adicionar um novo componente Query ou Table (TDataSet) e DataSource, e utilizar este
DataSource para buscar valores codificados no primeiro DataSource
Passos para o Estgio 1
Execute os passos a seguir para adicionar um componente DBLookuplistBox ou DBLookupComboBox a um data
source existente:

Passo Ao
1 Adicione um componente database lookup em seu form.
2 Defina a propriedade DataSource a um componente DataSource que exista no form e que
contenha o valor que voc esteja procurando.
3 Defina a propriedade DataField ao campo que necessite de busca.

35
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Passos para o Estgio 2
Execute os passos a seguir para anexar o componente DBLookuplistBox ou DBLookupComboBox tabela de
busca:

Passo Ao
1 Adicione um componente TDataSet utilizando um componente Table ou Query que corresponda
tabela de busca.
2 Defina a propriedade DatabaseName do novo componente TDataSet.
3 Execute um dos seguintes:
Defina a propriedade TableName do novo componente Table.
Entre com um query para a propriedade SQL do componente query.
4 Adicione um novo componente DataSource, e defina a propriedade DataSet ao novo
componente TDataSet.
5 Defina a propriedade ListSource de componente DBLookup ao novo componente DataSource.
6 Defina a propriedade KeyField ao valor chave da tabela de busca.
7 Defina a propriedade ListField ao campo que voc queira exibir no componente
DBLookuplistBox.
Criando uma Aplicao Utilizando um Componente Database Lookup
A melhor maneira de se aprender a utilizar um componente DBLookup atravs de um exemplo. Nesta seo,
voc utilizar um componente DBLookuplistBox para exibir um nome de empresa baseado no campo CustlD
encontrado na tabela Orders.
Passos
O processo do tutorial envolve os seguintes estgios:

Estgio Processo
1 Criar um form que exiba uma lista esttica dos campos de uma tabela de banco de dados
utilizando um componente Table, DataSource, DBGrid e DBNavigator
2 Adicionar e conectar um componente TDBLookuplistBox aplicao
3 Adicionar cdigo para coordenar aes do componente TDBLookuplistBox quando o sistema
insere ou atualiza uma linha
Passos para o Estgio 1
Execute os passos a seguir para criar um form que exiba campos selecionados da tabela Orders:

Passo Ao
1 Abra um novo projeto e grave-o
Quando solicitado, grave a unit como EX7CMAIN.PAS e o projeto como EXAMP7.DPR.
2 Utilizando a pgina Data Access da Component Palette, adicione um componente Table e
DataSource ao seu form.
3 Utilizando a pgina Data Controls, adicione os seguintes ao seu form:
Um componente DBGrid
Um componente DBNavigator

4 Defina as seguintes propriedades para cada componente, como mostrado na tabela:

Nome
do Componente
Propriedade Valor
Table1 Database Name
TableName
DBEMOS
ORDERS.DB

36
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Active True
DataSource1 DataSet
AutoEdit
Table1
False
DBGrid1 DataSource DataSource1
DBNavigator DataSource DataSource1

Passo Ao
5 Utilize o Fields Editor para adicionar os seguintes campos ao dataset Table1:
OrderNo
CustNo
SaleDate
ItemsTotal
AmountPaid
6 Arranje os campos no Fields Editor para que OrderNo seja o primeiro campo e CustNo seja o
segundo.
7 Compile e grave a aplicao.Execute e teste-a.
Passos para o Estgio 2
Execute os passos a seguir para adicionar um componente DBLookuplistBox aplicao:

Passo Ao
1 Utilizando a pgina Data Controls da Component Palette, adicione um componente
DBLookuplistBox ao seu form:

2 Utilize o Object Inspector para definir as seguintes propriedade do componente DBLookuplistBox:

Nome
do Componente
Propriedade Valor
DBLookuplistBox1 DataSource
DataField
DataSource1
CustNo

Passo Ao
3 Adicione um novo componente Table e DataSource ao seu form. Defina as propriedades para cada
componente, como mostrado na tabela a seguir:

Nome
do Componente
Propriedade Valor
Table2 DatabaseName
TableName
Active
DBDEMOS
CUSTOMER.DB
True
DataSource2 DataSet Table2


Passo Ao
4 Utilize o Fields Editor para adicionar os seguintes campos ao dataset Table2:
CustNo
Company
5 Conecte o componente DBLookuplistBox ao segundo DataSource utilizando a tabela a
seguir:

37
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Nome
do Componente
Propriedade Valor
DBLookuplistBox1 ListSource
KeyField
ListField
DataSource2
CustNo
Company

Passo Ao
6 Compile e grave a aplicao.
Execute e teste-a.
O componente DBLookuplistBox destaca a empresa que corresponde ao valor de CustNo na linha
do DBGrid.

Passos para o Estgio 3
Este cdigo de event handler permitir definir o valor de CustNo durante o modo de edio ou insero atravs
de um duplo-clique no componente DBLookuplistBox.
Execute os passos a seguir para adicionar um event handler para os eventos de DBLookuplistBox, OnDblClick,
ou OnClick:

Passo Ao
1 Adicione as instrues a seguir no evento OnDblClick do componente DBLookuplistBox:
if Table.State in [dsEdit, dsInsert] then
Table1CustNo.Value := Table2CustNo.Value;
2 Compile e grave sua aplicao.
Execute e teste-a alternando a aplicao entre o modo de edio e insero e utilizando o
DBLookuplistBox para definir o valor de CustNo na tabela Orders.

38
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
5. CRIANDO UM APLICATIVO MASTER/DETAIL

No grupo de programas do Delphi, encontramos o utilitrio Database Desktop, que permite a criao e
manipulao de banco de dados de diversos formatos.

O nosso exemplo gerenciar duas tabelas. Uma com o cadastro dos clientes e outra com as vendas realizadas
para estes clientes.

Execute o Database Desktop, selecionando a opo Database Desktop no menu Tools.




O Database Desktop

Crie uma nova tabela como mostra a figura a seguir.


Criando uma tabela


39
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Escolha o tipo Paradox 7. Aparecendo ento a janela Create Paradox 7 Table.


Tipo da Tabela Criada

Digite o nome para o primeiro campo (CODIGO) e mude para tipo de campo (Type) usando a tecla Tab. Com o
campo Type selecionado, de um clique com o boto direito do mouse nele, para ser exibido o menu pop-up com
todos os valores para o tipo de campo. As letras sublinhadas correspondem letra de atalho para cada tipo de
dado. O nosso campo CODIGO ser definido como tipo Alpha. Apesar de ser um campo com nmeros ns no
iremos realizar nenhum clculo matemtico com ele, por isso o definimos como Alpha.



Criando os campos da tabela

O campo CODIGO ser a nossa chave primria para a identificao dos clientes na tabela Clientes. Para definir
um campo como chave primria, pressione qualquer tecla quando o campo Key estiver selecionado, marcando
este campo com um * - asterisco.


40
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

41

Tornando o Campo CODIGO Chave primria

D continuidade entrando com outros campos, seguindo o modelo apresentado abaixo.


Criando os Demais Campos

A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Salve-a como Clientes.db.


Salvando a Tabela Paradox

Logo aps, abra uma nova tabela no mesmo formato, e construa-a como mostrado abaixo.


Criando a Tabela Vendas

Para que a tabela Vendas se relacione com a tabela Clientes, deveremos definir o campo CODIGO como ndice
secundrio na tabela Vendas.

No ComboBox Table properties, selecione a opo Secondary Indexes e clique no boto Define...,
aparecendo o quadro de dilogo Define Secondary Index.

Na janela Define Secondary Index, selecione o campo CODIGO e d um clique na seta para introduzi-lo como
campo ndice, e finalmente d um clique no boto OK para aceitar a opo.

Ser ento solicitado um nome para este ndice, digite INDCODIGO.

42
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________


Definindo ndices Secundrios


Salvando os ndices

Salve a tabela como Vendas.db. Saia do Database Desktop, atravs do menu File, opo Exit.

O Delphi possui o assistente Form Wizard para a construo de formulrios de acesso a Banco de Dados, ns
iremos utiliz-lo para construirmos o nosso projeto, que utiliza as tabelas de Clientes e Vendas construdas
anteriormente.

Volte ao Delphi, e exclua o formulrio Form1 que o Delphi cria junto com um novo projeto. No menu Project,
escolha a opo Remove from Project..., ou o boto ( ) na barra de ferramentas, e exclua Form1 no
salvando o arquivo. Pois o Form Wizard criar um novo formulrio automaticamente.


Removendo o form do projeto


43
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Excludo o formulrio, inicie o wizard escolhendo a opo Form Wizard do menu Database. O Database Form
Wizard o assistente para a criao de Formulrios envolvendo banco de dados. Este assistente ajudar na
definio dos campos a serem mostrados e o layout do formulrio, alm de incluir um componente
DBNavigator, que ser usado para a navegao entre os registros das tabelas.


DBNavigator


O nosso primeiro formulrio ter duas divises, uma para cada tabela. A primeira conter os dados relativos a
um cliente, e a segunda as compras realizadas por este cliente. Inicie o Form Wizard, seguindo as opes
mostradas nas figuras a seguir; pressionando o boto Next para continuar com o assistente.


Iniciando o Form Wizard


44
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Estas opes criam um formulrio com duas divises, usando componentes TTable. Um componente TTable
realiza a conexo entre o formulrio e uma tabela do banco de dados. Ele um componente visvel somente
em tempo de projeto - semelhante ao componente TTimer.

Tabela Master
Inclua a tabela Clientes.db, como sendo a master query. Ou seja, a tabela que ir comandar a apresentao
do dados.



Incluindo a tabela Clientes como Master Query

Selecione o boto >> para incluir todos os campos da tabela Clientes.db no formulrio.



Incluindo Todos os Campos


45
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
A opo Vertical posiciona os campos dentro do formulrio, um acima do outro.



Selecionando a Opo Vertical para Mostrar os Campos

Alinhamento Left, posiciona as legendas ao lado esquerdo dos quadros de Edit.


Escolhendo o Alinhamento Left (Esquerdo)


46
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Tabela Detail
Defina a tabela Vendas.db como a tabela de detalhes.


Definindo a Tabela Vendas Como Detalhe

Inclua todos os campos da tabela Vendas, e a seguir, escolha o formato Grid para a apresentao da tabela
Vendas.


Mostrando os Campos do Detalhe em Grid

Selecione os campos que faro a ligao entre as duas tabelas, escolhendo INDCODIGO como ndice. Em
Detail Fields e Master Fields, selecione o campo CODIGO como campo de juno em ambas as tabelas e
pressione Add. Como mostrado a seguir.


47
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

48

Fazendo a Ligao entre as Tabelas


Concluindo a Ligao entre Tabelas

Pressione Next e finalize o Form Wizard. O seu formulrio estar como a figura a seguir.

A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

49

Resultado do Form Wizard
Alterando as propriedades de alguns componentes do formulrio.

Comece alterando o tamanho do Panel3 referente aos dados dos clientes. E redesenhe o formulrio como a
figura abaixo.


Redesenhando o Formulrio Principal
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Para formatar a entrada de dados, ou seja, definir o formato do dado, para a tabela Clientes.db, d um clique
duplo em Table1 para acessar o editor de campos (Fields Editor). Selecione o campo CEP e no Object
Inspector, procure a propriedade Edit Mask. Esta propriedade abre o quadro de dilogo Input Mask Editor onde
poderemos escolher uma mscara para o campo CEP, escolha Long Zip Code e na caixa Input Mask elimine
um dgito 9, como mostra as figuras a seguir.



Configurando a Mscara do Campo CEP


Mascarando o Campo CEP

Faa o mesmo para o campo Telefone, escolhendo a mscara Phone. Feche a Input Mask Edit.

Selecione o campo CODIGO em Table2, e mude a propriedade Visible:=False, para no aparecer o cdigo do
cliente no componente DBGrid, pois ele j ser exibido por um componente Edit.

Selecione o EditEstado e altere a propriedade Charcase:=ecUpperCase, para que os caracteres neste TEdit
sejam apresentados em maiscula.

Insira um boto BitBtn no Formulrio com as seguintes definies de propriedades:

1 - Caption:=Sai&r; Kind:=bkCLose

A propriedade Kind do BitBtn determina qual desenho ser mostrado na face do boto. Esta propriedade
tambm implementa algumas funes ao boto eliminando linhas de cdigo, neste caso no ser necessrio
nenhuma linha de cdigo para fechar o formulrio.

Finalmente, mude a propriedade Active dos dois componentes TTable (Table1 Table2) de False para True. Isto
tornar o Table ativo tanto em tempo de projeto quanto em tempo de execuo. Ao ativarmos o Table, os
controles TEdit mudaro seu contedo, passando a exibir o primeiro registro da tabela a eles ligada.


50
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
D o nome de frmClientes ao Formulrio e salve como frmClientesUnt.pas.


O formClientes Aps as Mudanas

O prximo formulrio ser construdo manualmente, sem o uso do Form Wizard. No utilizaremos o Form
Wizard apenas por questes didticas, mas este novo Formulrio tambm poderia ser construdo utilizando este
assistente.

Este segundo formulrio servir para cadastrar vendas. O usurio selecionar um nome de cliente j
cadastrado, a partir de um quadro combo, digitar a data da venda e escolher um produto, atravs de botes
de opo, definindo tambm a quantidade de itens de um mesmo produto e o valor total da venda.

Insira um novo formulrio ao projeto escolhendo a opo New Form do menu File ou o boto ( ). Monte
este novo formulrio utilizando os componentes descritos na figura abaixo.


Fazendo o Formulrio de Vendas

Altere as propriedades, de alguns componentes, indicadas na tabela a seguir:




51
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Componente Propriedade Valor
Table1 DatabaseName C:\Curso Delphi 5
TableName Vendas.db
Name tblVendas
Active True
DataSource1 DataSet tblVendas
Name dsrVendas
Table2 DatabaseName C:\Curso Delphi 5
TableName Clientes.db
Name tblClientes
Active True
DataSource2 DataSet tblClientes
Name dsrClientes
DbNavigator DataSource dsrVendas
Name navVendas
ShowHint True


Selecione todos os TDBEdit, dando um clique em cada um enquanto pressiona a tecla Shift, e altere a
propriedade DataSource de todos ao mesmo tempo para dsrVendas. Depois selecione um por vez e altere a
propriedade DataField correspondente a cada TEdit.

D um clique duplo em tblVendas para editar o campo Data. Repare que a janela Fields Editor aparece vazia
sem nenhum campo listado. Clique com o boto direito do mouse no Fields Editor e escolha a opo Add
Fields..., selecione todos os campos e pressione Ok, para inserir todos os campos da tabela Vendas.db no
Fields Editor.


Adicionando os Campos da Tabela Vendas

Voltando ao Fields Editor, selecione o campo DATA e altere o formato da propriedade EditMask para Date.
Aps a insero de todos os campos da tabela Vendas no componente tblVendas, as propriedades destes
campos podem ser acessadas diretamente atravs do Object Inspector. Como ilustra a figura a seguir.


52
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

Acessando os Campos Diretamente do Object Inspector

O componente DBLookupComboBox, exibe os valores de um campo em uma lista, onde o usurio poder
escolher um valor para este campo. Os valores exibidos pertencem a uma tabela e quando o usurio fizer uma
escolha, o valor escolhido ser vinculado a uma outra tabela.

No formulrio que estamos projetando - Vendas, o nome dos clientes vir da tabela Clientes e quando
inserirmos a venda, o nome do cliente escolhido ser vinculado a esta venda na tabela Vendas atravs da
chave primria CODIGO.

Portanto o DBLookupComboBox trabalha com duas tabela simultaneamente, uma que fornece os dados para a
lista e outra que est associada ao DbLookupComboBox. A tabela abaixo explica as propriedades relativas a
esta vinculao.

Propriedade Uso
DataSource Indica qual tabela associada.
DataField Indica o campo associado.
ListSource Determina a tabela que fornecer os dados para a lista.
KeyField Indica qual o campo da tabela acima ser usado como
vnculo.
ListField Indica qual campo ser mostrado na lista do quadro
combo.


Siga a tabela abaixo para determinar as propriedades do nosso DBLookupComboBox.

Propriedade Valor
Data Source dsrVendas
Data Field CODIGO
ListSource dsrClientes
KeyField CODIGO
ListField NOME


A lista de clientes ser vinculada atravs do campo CODIGO mas estar exibindo ao usurio, o campo NOME.

O componente DBRadioGroup apresenta uma srie de opes pr-definidas a serem selecionadas pelo
usurio, contendo um boto para cada opo. Estas opo so determinadas pela propriedade Items. O valor
do campo na tabela associada ao DBRadioGroup, ser o mesmo valor do boto selecionado.

Selecione o DBRadioGroup e edite a propriedade Items, configurando trs opo para produtos vendidos,
seguindo o modelo a seguir.

53
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________


Configurando o DBRadioGroup com 3 RadioButtons

Altere outras propriedades conforme a tabela mostrada abaixo:

Propriedade Valor
DataSource dsrVendas
DataField PRODUTO
Columns 3
Caption vazia

Salve este Formulrio com o nome de frmVendasUnt.Pas. O Formulrio final mostrada abaixo.


O Formulrio frmVendas Finalizado

O prximo formulrio ser a abertura do programa. A partir dele sero chamados os dois formulrios
construdos anteriormente.

Acrescente um formulrio vazio File e New Form, e construa-o da seguinte forma:

54
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

55

O Formulrio de Apresentao frmControle

A propriedade Hint dos SpeedButtons, contm o texto que ser mostrado quando o mouse ficar parado por
alguns instantes sobre o boto. Define ShowHint:=True, para ativar esta funo.

Com isto conclumos a construo de nossa interface grfica com o usurio. Salve o formulrio com o nome
frmControleUnt.pas

Temos ento em nosso projeto trs formulrios - frmControle, frmClientes e frmVendas. Todos foram
salvos no disco com o mesmo nome da sua propriedade Name mais "Unt".

Comearemos o cdigo pelo frmControle.

implementation

uses frmVendaUnt, frmClientesUnt;

{$R *.DFM}

procedure TfrmControle.SpeedButton3Click(Sender: TObject);
begin
Close;
end;

procedure TfrmControle.SpeedButton2Click(Sender: TObject);
begin
frmVenda.Show;
end;

procedure TfrmControle.SpeedButton1Click(Sender: TObject);
begin
frmClientes.Show;
end;


Cdigo para frmVendas.
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________

procedure TfrmVenda.BitBtn1Click(Sender: TObject);
begin
frmVenda.Hide; {o mtodo Hide esconde o Formulrio, mas
no a elimine da memria, enquanto que Close retira
o Formulrio da memria }
end;

Antes de compilar o projeto, verifique se o formulrio inicial do programa mesmo o frmControle. No menu
Project do Delphi, escolha a opo Option..., e defina como o Main Form o formulrio frmControle.


Colocando o frmControle como o Formulrio Principal


Execute o programa pressionando F9.


56
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
6. RELATRIOS
Para a gerao de relatrios no Delphi usamos as ferramentas do QuickReport presentes na paleta QReport da
barra de ferramentas. Com estes controles poderemos construir relatrios que sero compilados diretamente
em nosso projeto sem a necessidade de carregar outras ferramentas de relatrio. Poderemos tambm incluir
cdigo a vrios eventos relatrios proporcionando uma grande flexibilidade em nossos projetos.

O Delphi nos proporciona alguns modelos de relatrios, tambm um assistente para a criao destes relatrios.

Selecione File | New | Form e observe que existem trs modelos de relatrios:



Modelos de Relatrios

QuickReportLabels - Utilizado na criao de etiquetas.
QuickReport List - Permite a criao de relatrios simples, a partir de dados de uma tabela ou query.
QuickReport Master/Detail - um modelo de relatrio que obtm dados a partir de duas tabelas.


Primeiro vamos criar um relatrio com as informaes clientes partindo da tabela Customer.db.

Na caixa de dilogo New Items, escolha QuickReport List.


QuickReport List


57
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
O Delphi nos apresenta um modelo de relatrio com alguns componentes j inseridos. Um dos tipos destes
componentes so as bandas, elas nos do funcionalidade como ttulos, cabealhos, rodaps, detalhes, e sub-
detalhes para dados do relatrio - representam o componente QRBand.

Outros componentes que iremos utilizar so o QRLabel e o QRDBTex. O primeiro exibe informaes estticas no
relatrio, enquanto o segundo exibe informaes dinmicas vindas do banco de dados, pois est ligado a um
campo de determinada tabela.

Construo de um Relatrio Simples
Repare que o formulrio aberto pelo Delphi do tipo TQRListForm, ou seja, um formulrio especfico para
relatrios de lista. Selecione o formulrio e mude as seguintes propriedades:

Name = ClientesRep
ReportTitle = Informaes de Clientes

O componente Table presente no relatrio, recebeu o nome de MasterTable e ele ser nossa fonte de
informaes do banco de dados. Altere suas propriedades:

DatabaseName = DBDemos
TableName = Customer.db

Na segunda faixa - ColumnHeader - coloque mais dois (j possui um) QRLabel e altere suas legendas para
Nome, Endereo e Telefone.

Na terciera faixa - Detail - posicione trs QRDBText em baixo das legendas da faixa anterior, definindo a
propriedade DataSet como MasterTable para as trs, e as propriedades DataField como Company, Addr1 e
Phone.

Posicione os controles de forma que seu formulrio de relatrio se parea com a figura a seguir.



O Relatrio Configurado

Este formulrio possui um pop-menu que nos d acesso a uma caixa de dilogo onde poderemos alm de
outras coisas, configurar a apresentao do nosso relatrio e tambm a opo de visualizao antes dele estar
vinculado ao aplicativo. As opes so: Report Settings e Preview.

Faa uma visualizao do relatrio e, se tudo estiver de acordo com o seu gosto, inclua um boto na pgina
Clientes do nosso projeto, com o seguinte cdigo para exibir o relatrio. No se esquecendo de incluir o nome
da unidade do relatrio na seo uses do formulrio principal.

procedure TForm1.RelatorioBtnClick(Sender: TObject);
begin
ClientesRep.Preview;
end;

58
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Construo de um Relatrio Master/Detail
Abra um novo relatrio, mas desta vez como Master/Detail.


Relatrio Master/Detail

Este novo formulrio possui a mais, duas tabelas, um DataSource e uma faixa de sub-detalhes em comparao
ao anterior. Ele tambm pertence a outro tipo de componente o TQRMDForm, sendo um formulrio especfico
para a construo de relatrios Master/Detalhe.

Altere as seguintes propriedades do formulrio:

Name = VendasRep
ReportTitle = Vendas

As duas tabelas esto nomeadas como MasterTable e DetailTable, e o DataSource como MasterDS. O
DataSource est presente apenas para criar uma vinculao entre as tabelas. Altere suas propriedades
associando-as s tabelas Customer.db e Orders.db, e tornando-as ativas.

V at a DetailTable e selecione a propriedade MasterFields para exibir a caixa de dilogo Field Link
Designer, vista anteriormente no curso, utilizada para a vinculao de tabelas. Vincule as duas tabelas pelo
ndice CustNo.



A tabela de Detalhe

Na banda Column Header, coloque dois componentes QRLabel com as legendas Nome do Cliente e Cdigo.

Na banda Detail, insira dois QRDBText associados aos campos Company e CustNo da MasterTable. Aumente a
largura desta faixa, e inclua mais dois QRLabel com as legendas Nmero do Pedido e Valor Pago.

Na quarta banda - SubDetail - coloque dois QRDBText, para os detalhes das compras, associados aos campos
OrderNo e AmountPaid da tabela Orders.db - DetailTable.


59
A Ap pl li ic ca a e es s p pa ar ra a B Ba an nc co o d de e D Da ad do os s L Lo oc ca al l
_______________________________________________________________________________
Altere a propriedade DataSet da banda SubDetail para DetailTable.

Ao final, o seu formulrio dever se parecer com o da figura a seguir:



Relatrio Master/Detail Final

Inclua mais um boto no formulrio principal para a exibio deste ltimo relatrio. E teste o seu programa.

Os relatrios construdos anteriormente tambm poderiam ser construdos partindo-se de um formulrio
comum, desde que inclussemos o componente QuickRep neste formulrio, dimensionando-o na rea de cliente
de acordo com as necessidades. E a partir da colocaramos os demais componentes existentes de modo
semelhante nos relatrios construdos como exerccios.



60

Você também pode gostar