Você está na página 1de 11

Bancos de Dados

Conceitos Importantes
O gerenciamento de bancos de dados essencial para o desenvolvimento comercial, e para criar um banco de
dados eficiente necessrio o conhecimento prvio de modelagem de bancos de dados relacionais. Conceitos
como banco de dados, tabelas, campos, registros, ndices, chaves, relacionamentos, normalizao, dentre outros
so pr-reuisitos bsicos para o desenvolvimento desse conte!do.
Modelo de Dados
" essencial plane#ar o banco de dados antes de implementar. $m dos mtodos ue voc% pode utilizar o &'(,
como no e)emplo no normalizado mostrado logo abai)o.
Clientes Pedidos
Produtos Item
CodCli
Cidade Tel Comer
Tel Resid
Nome
Endereco
Bairro Estado CGC/CPF
CodCli
CodPed Data
Vendedor
CodPed
CodProd
Quantidade
CodProd
Descrio
Preo Unitrio
* +
+
* +
*
Borland Database Engine
, -&' fornece a capacidade de acesso padronizado a banco de dados para &elphi, C.. -uilder e outros
ambientes de programao da -orland, oferecendo um grande con#unto de fun/es para au)iliar no
desenvolvimento de aplica/es &es0top e Cliente12ervidor.
Os controladores da -&' podem ser usados para acessar bases de dados d-ase, 3arado), ,ccess, 4o)3ro,
5nterbase, Oracle, 26base e 72-289 2erver, &-:, 5nformi), alm de um controlador de acesso a aruivos te)to.
;oc% tambm pode utilizar fontes de dados O&-C, podendo acessar ualuer base de dados compatvel.
,s fun/es ue comp/e uma ,35 da -&' so usadas internamente pelos componentes de acesso a dados do
&elphi e muito raramente voc% teria ue us-las diretamente, mas isso totalmente possvel. , refer%ncia
completa das fun/es da -&', com e)emplos em &elphi, est no -&' ,35 <elp na pasta do &elphi no 7enu
5niciar.
Arquitetura de Acesso
O acesso e manipulao de um banco de dados por um programa &elphi realizado como mostrado abai)o, note
ue a aplicao no acessa os dados diretamente, mas usa sempre a -&'.
,ssim, para uma aplicao de bancos de dados funcionar, preciso ue a -&' este#a instalada na muina, no
bastando apenas o aruivo e)ecutvel.
Criao do Banco de Dados
3ara criar um banco de dados novo, normalmente, necessrio dispor de alguma ferramenta do pr=prio banco de
dados, como o ,ccess, mas se a base de dados for 3arado), ou d-ase, voc% pode usar o &atabase &es0top, um
utilitrio ue vem com o &elphi e permite a criao desses tipos de bancos de dados.
Database Desktop
4ornece uma interface simples e completa para configurao, definio e manipulao de tabelas de bancos de
dados 3arado) e d-ase. ,lm disso na Opo Tools/Alias Manager voc% pode configurar seu banco de dados,
como ser lembrado logo adiante.
Tabelas Paradox
3ara criar tabelas 3arado), siga os passos abai)o. ;oc% deve salvar as tabelas de um mesmo banco de dados na
mesma pasta, pois o 3arado) trata a pasta onde esto as tabelas como sendo o banco de dados.
Cliue em File/New/Table
'scolha o tipo da nova tabela, Paradox 7
,parece uma #anela para ue voc% defina a estrutura de campos, ndices e demais op/es necessrias na
criao da tabela
'm Field Name, voc% escolhe o nome do campo, com at :> caracteres
'm Type, o ?ipo do campo, com a barra de espao ou o boto direito do mouse voc% pode escolher o tipo a
partir de uma lista
Size o tamanho do campo, usado somente em alguns tipos de campos
Key especifica os campos ue faro parte da chave primria, ue no pode se repetir e deve ser composta
pelos primeiros campos da tabela
Table Properties
'm ?able 3roperties voc% define os vrios aspectos de configurao da tabela. 7uitas dessas op/es podem ser
implementadas no &elphi e vrios programadores preferem no us-las no &atabase &es0top.
Opo Descrio
;alidit6 Chec0s ;alida/es para os campos, como obrigatoriedade, valor mnimo e m)imo
?able 9oo0up 5ndica ue o valor atribudo a um determinado campo tem ue estar gravado em outra tabela
2econdar6 5nde)es Cria ndices secundrios
(eferential 5ntegrit6 Cria integridade referencial, geralmente utilizada em relacionamentos de * para +.
3ass@ord 2ecurit6 3ermite a criao de senhas, protegendo a tabela de acesso no autorizado
?able 9anguage 'specificar o driver de lngua utilizado pela tabela, geralmente o Pdox ANSI Intl8!
&ependent ?ables 7ostra todas as tabela dependentes atravs da integridade referencial
Tipos de Campos
Os principais tipos de campos so mostrados abai)o, mas e)istem outros alm desses. Os tamanhos marcados
com asterisco indicam ue o campo pode guardar tamanhos maiores ue os informados, o ue ultrapassar o
tamanho ser guardado em um aruivo e)terno com a e)tenso 7-.
Tipo Descrio Faixa Tamanho
, ,lfanumrico *-:>>
+ +umrico A *B
CBD
E 7onetrio
2 2hort 5nteger A C:FGF
5 9ong 5nteger A :*HFHDCGHD
& &ata
? <ora
I &ata e <ora de modificao
7 7emo *-:HBJ
K Krfico *-:HBJ
9 9=gico ?rue14alse
. ,utoincremental *-:*HFHDCGHD
Configurao
3ara configurar o acesso a um banco de dados, voc% tem vrias op/es, criar um ,lias, usar o componente
?&atabase ou os dois #untos.
Aliases
$m ,lias um nome l=gico, um atalho para um banco de dados. ?odo o trabalho do &elphi com um banco de
dados pode ser feito baseado no ,lias, de forma ue para mudar de banco de dados, s= necessrio mudar o
,lias. 3ara criar um ,lias voc% pode usar "atabase #xplorer, o $"# Administrator ou o pr=prio "atabase
"es%top.
Database Explorer
3ode aparecer com os nomes "atabase #xplorer ou S&' #xplorer. +ele voc% pode manipular os ,liases, navegar
pelas estruturas dos bancos de dados, alterar os dados das tabelas e e)ecutar comandos 289.
3ara criar um ,lias selecione o item "atabases, cliue em (b)e*t/New, escolha o tipo do banco de dados, ou
Standard para d-ase, 3arado) e aruivos te)to, depois digite um nome do ,lias, esse nome ser usado pelo
&elphi uando voc% uiser acessar o banco de dados, finalmente defina as propriedades do banco de dados na
seo "e+inition, cada banco de dados ter suas pr=prias defini/es.
BDE Administrator
Com o -&' ,dministrator voc% pode alterar a configurao da -&', por e)emplo em ,on+ig-ration/System/Init
voc% tem a propriedade 'o*al S.are ue deve ser setada para ?rue, uando voc% uiser ue a base de dados
se#a compartilhada em uma rede. ,lm disso, voc% pode criar ,liases, como no "atabase #xplorer.
TDatabase
'sse componente permite a manipulao de um banco de dados, atravs de um ,lias da -&' ou a criao de
um ,lias local, somente visvel dentro da aplicao, esse componente tambm permite o gerenciamento de
transa/es, garantindo uma integridade maior no pro#eto. 3or essas e outras raz/es o uso do componente
&atabase altamente recomendado como opo para criao de ,liases.
Propriedades Descrio
,lias+ame +ome do ,lias do banco de dados, usado uando voc% criar um ,lias da -&'
Connected &efine se a cone)o com o banco de dados est ativa
&atabase+ame +ome do ,lias local a ser usado pelos outros componentes do &elphi
&ata2etCount +!mero de &ata2ets L?abelasM abertos no banco de dados
&ata2ets 9ista com os &ata2ets abertos
&river+ame &river usado para criar um ,lias local, automaticamente cancela a propriedade ,lias+ame
5n?ransaction &efine se o &atabase est em transao
NeepConnection &efine se a cone)o com o banco de dados ser mantida, mesmo sem &ata2ets abertos
9ogin3rompt &efine se ser mostrado o uadro de login padro da -&'
3arams 3arOmetros do banco de dados, com itens semelhantes P seo &efinition do &atabase ')plorer
?rans5solation +vel de isolamento da transao, define como uma transao ir en)ergar outra
Mtodos Descrio
Close 'ncerra a cone)o com o banco de dados, todos os &ata2ets sero fechados
Close&ata2ets 4echa todos os &ata2ets abertos, mas a cone)o no encerrada
Commit Krava altera/es feitas durante a transao
Open ,bre a cone)o com o banco de dados
(ollbac0 ,nula todas as altera/es feitas durante a transao
2tart?ransaction 5nicia uma transao
Eventos Descrio
On9ogin 'vento usado uando voc% uiser escrever seu pr=prio mtodo de cone)o com o banco de dados
3ara acessar uma base de dados ,ccess, voc% poderia usar os valores mostrados na descrio te)tual a seguir.
AliasName = 'Northwind'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
Params.trings = !
'DATA"A# NA$#=C%&$eus Documentos&North'ind.mdb'
'(#) NA$#=paulo'
'*P#N $*D#=)#AD+'),T#'
'LAN-D),.#)=intl/01'
'PA'*)D=el2is'3
3ara a#udar a preencher os parOmetros de um &atabase, cliue duas vezes sobre o componente e cliue em
&efaults, todos os parOmetros defaults sero apresentados.
3ara acessar uma base 3arado), use as propriedades abai)o, note ue para o 3arado), a !nica informao
realmente significante o 3ath, a pasta onde esto as tabelas.
AliasName = 'D"D#$*'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
Params.trings = !
'PAT4=d%&"orland&Delphi 5&Demos&Data'
'#NA"L# "CD=FAL#'
'D#FA(LT D),.#)=PA)AD*6'3
,p=s a criao do ,lias da -&' ou do ,lias local, usando o componente ?&atabase, o banco de dados est
configurado e pronto para ser usado.
Database Form i!ard
,p=s a configurao do banco de dados, a maneira mais rpida, de se fazer uma #anela de manuteno de dados
atravs do Form /izard no menu "atabase. ,o chegar no Qizard so feitas uma srie de perguntas ue podem
resultar em uma #anela simples ou 7estre1&etalhe. O acesso ao banco de dados pode ser feito atravs de
componentes ??able ou atravs de 289, com o componente ?8uer6, usaremos o componente ??able. ?odos os
campos selecionados aparecem na #anela permitindo entrada de dados atravs de componentes do tipo ?&-'dit.
Cada &-'dit recebe um 9abel baseado no nome do campo na tabela selecionada. +a Ranela includo tambm
um componente para permitir a navegao e a manuteno dos dados, um &-+avigator. O componente utilizado
para fazer a ligao entre os componentes visuais e o ??able um ?&ata2ource. Keralmente os componentes
??able e ?&ata2ource so inseridos em &ata7odules, ue so a base para a criao de classes de dados.
2empre ,p=s usar o Qizard, lembre-se de mudar os nomes dos componentes, para ue fiuem mais claros.
Form Passo a Passo
O diagrama abai)o mostra como o Qizard fez a ligao entre os componentes, onde os uadrados so
componentes e as elipses, propriedades.
&ata2et
&atabase+ame
?&atabase
?&ata2ource
??able
&atabase+ame
?&-'dit
&ata2ource
&-
3ara concluir, acompanhe abai)o os passos realizados pelo Qizard e tente voc% mesmo criar seu pr=prio 4orm.
5nclua um novo &ata7odule
,dicione ao &ata7odule um ?able e um &ata2ource
+o ?able Coloue em &atabase+ame o nome do ,lias criado pela propriedade &atabase+ame do &atabase
e em ?able+ame, o nome da tabela
+o evento OnCreate do &ata7odule, chame o mtodo Open do componente ?able
+o &ata2ource coloue em &ata2et o nome do componente ??able
+o 4orm, para definir a interface com o usurio, use os componentes de controle de dados ue esto na
pgina &ataControls, basicamente &-'dit e &-+avigator
3ara poder acessar os dados, coloue a $nit onde est o &ata7odule no uses da $nit do 4orm
'm todos os componentes &ataControls, escolha na propriedade &ata2ource, o componente &ata2ource
criado no &ata7odule
'm alguns controles, como no &-'dit, deve ser especificado tambm o campo da tabela, na propriedade
&ata4ield
2eguindo esses passos, o 4orm estar pronto para usar. 7ais adiante, veremos uma forma mais rpida de se
criar um 4orm de manuteno, mas o mais importante compreender os passos mostrados acima, com todos os
componentes e propriedades envolvidas. ;amos detalhar agora cada um dos componentes envolvidos nesse
processo, para compreendermos melhor o ue est acontecendo.
TDataModule
$m &ata7odule como se fosse um 4orm invisvel, onde iremos inserir os componentes de acesso a dados,
como o ?able e o &atasource. 3or serem tambm classes, os &ata7odules permitem a fcil implementao de
modelos de ob#etos, permitindo herana, criao de mtodos, dentre outros aspectos. 3ara inserir um
&ata7odule em um pro#eto, escolha +e@ &ata7odule do menu 4ile. Os &ata7odules no gastam recursos do
sistema, servem apenas para conter os componentes de acesso a dados e criar, assim, uma classe persistente.
TTable
Componente usado para acessar uma tabela em um banco de dados. 'sse componente o mais importante
uando acessamos bases de dados &es0top. 7uitas dos itens mostrados abai)o esto definidos na classe
?&ata2et, ancestral do ??able.
Propriedades Descrio
,ctive &efine se a tabela esta aberta ou fechada
-O4 5nforma se est no incio da tabela
Can7odif6 &efine se a aplicao pode inserir, deletar ou alterar registros
&atabase+ame +ome do banco de dados onde est a tabela, deve ser escolhido um ,lias, ue pode ser local
'O4 5nforma se est no fim da tabela
')clusive &efine se a tabela pode ser compartilhada por outro usurio
4ieldCount +!mero de campos da tabela
4ield&efs 9ista com a &efinio dos campos da tabela
4ields 9ista de ob#etos do tipo ?4ield, ue representam os campos da tabela
4ilter 2tring com uma condio de filtragem
4iltered &efine se a tabela filtrada
5nde)4ield+ames +ome dos campo de ndice, usados para ordenar os registros da tabela
5nde)+ame +ome do ndice atual, vazia uando o ndice for a chave primria
5nde)&efs 9ista com a definio dos ndices
7aster4ields Campos usados no relacionamento com a tabela mestre
7aster2ource &ata2ource da tabela mestre em uma relao 7estre1&etalhe
7odified &efine se o registro atual foi modificado
(eadOnl6 &efine se a tabela somente para leitura
(ec+o +!mero do registro atual
(ecordCount +!mero de registros
2tate 'stado da tabela
?able+ame +ome da tabela
?able?6pe ?ipo da tabela
Mtodo Descrio
,dd5nde) Cria um novo ndice, a tabela deve ser e)clusiva
,ppend 'ntra em modo de insero e, ao gravar, o registro ser colocado no fim do aruivo
,ppend(ecord 5nsere um registro no final do aruivo atravs de c=digo
Cancel Cancela as altera/es feitas no registro atual
Close 4echa a tabela
Create?able Cria uma tabela, depende de 4ield&efs e 5nde)&efs
&elete ')clui o registro corrente
&elete5nde) ')clui um ndice
&elete?able ')clui a tabela
&isableControls &esabilita a atualizao dos controles visuais
'dit 3ermite a alterao dos campos do registro atual
'mpt6?able ,paga todos os registro da tabela, para isso a tabela no pode esta sendo compartilhada
'nableControls <abilita os controles visuais
4ield-6+ame ,cessa um campo, do tipo ?4ield, pelo nome
4indNe6 3rocura o registro com os valores e)atos aos dos parOmetros nos campos do ndice atual
4ind+earest 3rocura o registro com os valores mais apro)imados aos dos parOmetros nos ndices
4irst 7ove para o primeiro registro
5nsert 'ntra em modo de insero de um novo registro na posio atual
5nsert(ecord ,diciona um novo registro, # com os dados, na posio atual
5s'mpt6 &efine se a tabela est vazia
9ast 7ove para o !ltimo registro
9ocate 3rocura um registro, usando ou no ndices, de acordo com a disponibilidade
9oc0?able ?rava a tabela
9oo0up 3rocura um registro e retorna valores dos campos deste
7ove-6 7ove um n!mero especfico de registros
+e)t 7ove para o pr=)imo registro
Open ,bre a tabela
3ost Krava as altera/es no registro atual
3rior 7ove para o primeiro registro
(efresh ,tualiza a tabela com os dados # gravados
(ename?able (enomeia a tabela
$nloc0?able &estrava a tabela
Evento Descrio
,fterCancel ,p=s do mtodo Cancel
,fterClose ,p=s o fechamento da tabela
,fter&elete ,p=s do mtodo &elete
,fter'dit ,p=s do mtodo 'dit
,fter5nsert ,p=s do mtodo 5nsert
,fterOpen ,p=s do mtodo Open
,fter3ost ,p=s do mtodo 3ost
,fter2croll ,p=s mudar de registro
-eforeCancel ,ntes do mtodo Cancel
-eforeClose ,ntes do fechamento da tabela
-efore&elete ,ntes do mtodo &elete
-efore'dit ,ntes do mtodo 'dit
-efore5nsert ,ntes do mtodo 5nsert
-eforeOpen ,ntes do mtodo Open
-efore3ost ,ntes do mtodo 3ost
-efore2croll ,ntes de mudar o registro
OnCalc4ields 'vento usado para calcular os valores dos campos calculados
On&elete'rror 8uando ocorre um erro ao chamar o mtodo &elete
On'dit'rror 8uando ocorre um erro ao chamar o mtodo 'dit
On4ilter(ecord 'vento usado com filtragem varivel
On+e@(ecord 8uando a tabela entra em modo de insero, no dei)a 7odified igual a ?rue
On3ost'rror 8uando ocorre um erro ao chamar o mtodo 3ost
Filtros
$sando o Filter, voc% pode filtrar os registro de uma tabela usando uma e)presso l=gica, como nos e)emplos
abai)o. 3ara tornar um filtro ativo, basta colocar Filtered igual a ?rue.
Data = '71+18+9::/'
!Data = '71+18+9::/'3 AND !.endedor = '-ilherme Augusto da Fonseca'3
!Nome ; 'A'3 AND !Nome < '"'3
Contudo, se a condio de filtragem for muito varivel, prefervel usar um c=digo como o mostrado abai)o no
evento On4ilter(ecord da ?able, para fazer uma filtragem dinOmica, com a propriedade 4ilter vazia e 4iltered
igual a ?rue.
Accept %= TblData..alue = Date=
,o filtrar uma tabela, a propriedade (ecordCount da ?able, s= mostra o n!mero de registros ue satisfazem ao
filtro, como se os outros registros nao e)istissem.
Alterando e!istros
3ara alterar registros em c=digo, colocamos a tabela em modo de edio, alteramos o valor dos campos e
gravamos as altera/es, se for necessrio.
with DtmPedidos do=
begin
Tbl.#dit=
TblData..alue %= Date=
Tbl4ora..alue %= Time=
Tbl.Post=
end=
"nserindo e!istros
3ara inserir registros em c=digo voc% pode usar os mtodos ,ppend(ecord e 5nsert(ecord, caso voc% no
precise de algum campo, mesmo assim ele deve ser informado com o valor N-ll.
DtmProd.Tbl.Append)ecord!>Null? #dtDescricao.Te@t? #dtPreco.Te@tA3=
#ocali$ando e!istros
3ara localizar registros voc% pode usar vrios mtodos, mas o melhor deles o 9ocate, no e)emplo abai)o feita
uma pesuisa e)ata.
iB not DtmCli.Tbl.Locate!'CodCli'? #dt.Te@t? >A3 then
how$essage!'Cliente nCo encontrado.'3=
;oc% tambm pode fazer uma pesuisa parcial e1ou sem sensitividade de caso usando o terceiro parOmetro, ue
um con#unto de op/es.
DtmCli.Tbl.Locate!'Nome'? #dt.Te@t? >loPartialKeD? loCase,nsensiti2eA3=
2e voc% precisar fazer uma pesuisa por mais de um campo, separe os nomes dos campos por ponto e vrgula e
use a funo ;ar,rra6Of para criar um arra6 com os valores ue voc% uer procurar.
iB not DtmPed.Tbl.Locate!'.endedor=Data'? .arArraD*B!>#dt.endedor.Te@t? #dtData.Te@tA3?
>loCase,nsensiti2eA3 then
how$essage!'* 2endedor nCo realiEou nenhuma 2enda nessa data'3=
Caso os campos pesuisados se#am inde)ados, a pesuisa ser muito mais eficiente, seno ser criado um filtro
temporrio da -&' para localizar os registros
"ndexao
, inde)ao usada para ordenar os registros da tabela, para isso voc% deve escolher os campos pelos uais
voc% uer ordenar na propriedade 5nde)4ield+ames, inclusive em c=digo, como mostrado abai)o, todos campos
devem ser inde)ados e separados por ponto e vrgula.
DtmCli.Tbl.,nde@FieldNames %= 'Nomcli'=
DtmPed.Tbl.,nde@FieldNames %= 'Data? .endedor'=
Estados da Tabela
, propriedade 2tate determina o estado das tabelas, os principais estados so demonstrados abai)o, ve#a como
os mtodos mudam o estado.
3ost
Cancel
&elete
3ost
Cancel
&elete
ds5nsert ds-ro@se ds'dit
5nsert
,ppend
'dit
%eri&icando Altera'es
Onde for necessrio a verificao de altera/es feitas em uma ?abela, por e)emplo no evento OnClose de um
4orm de manuteno, voc% pode usar a propriedade 7odified, como mostrado no e)emplo abai)o.
iB DtmCli.Tbl.$odiBied then
iB Application.$essage"o@!'-ra2ar alteraFGesH'? 'Dados Alterados'? $"I,C*NJ(#T,*N
K $"IL#N*3 = ,DL# then
DtmCli.Tbl.Post
else
DtmCli.Tbl.Cancel=
%alores De&a(lt
Caso voc% ueira especificar valores &efault para os campos de uma tabela, use o evento On+e@(ecord, pois
nesse evento o registro no marcado como modificado.
TblData..alue %= Date=
Percorrendo (ma Tabela
$tilize um c=digo semelhante ao mostrado abai)o para percorrer uma tabela do incio ao fim.
Tbl.DisableControls=
Total %= 1=
Tbl.First=
while not Tbl.#*F do
begin
Total %= Total K Tbl.alor..alue=
Tbl.Ne@t=
end=
Tbl.#nableControls=
Forms Modais de "ncl(so)Alterao
3ara mostrar 4orms 7odais de incluso ou alterao de registros utilize comandos como os mostrados abai)o.
TblCli.,nsert=
iB Form,nsCli.how$odal = mr*M then
TblCli.Post
else
TblCli.Cancel=
Mestre"Detal#e
+os relacionamentos de * para +, uma tabela pode estar ligada a outra em uma relao 7estre1&etalhe, nesse
tipo de relao os registros da tabela de ordem + so filtrados pelo campo de relacionamento com a tabela de
ordem *. 3or e)emplo, se o relacionamento de Clientes com 3edidos for mestre1detalhe, s= sero acessados em
pedidos, os registros cu#o campo CodCli se#a igual ao CodCli da tabela de Clientes.
3ara fazer esse tipo de relacionamento, siga os passos abai)o.
+o uses da $nit detalhe, 3edidos, inclua a $nit da tabela mestre, Clientes
+a ?able detalhe, 3edidos, Coloue em 7aster2ource o &ata2ource da tabela mestre, Clientes
'm 7aster4ields, chame o 4ields 9in0s &esigner e escolha os campos de ligao das tabelas, no caso,
CodCli para as duas tabelas
Fields Editor
3ara criar ob#etos para os campos de uma tabela cliue duas vezes no componente ??able ou escolha Fields
#ditor no seu menu de conte)to, na #anela do 4ields 'ditor, cliue com o boto direito do mouse e escolha ,dd,
na #anela ,dd 4ields, escolha os campos ue voc% vai uerer usar e cliue em O0.
+o 4ields 'ditor podemos tambm remover os campos criados, alterar sua ordem de apresentao e usar suas
propriedades e eventos no Ob#ect 5nspector. 3ara cada campo criado um ob#eto de um tipo descendente de
?4ield, como ?2tring4ield, ?5nteger4ield, ?4loat4ield. ,s principais propriedades dos ob#etos ?4ield esto
listadas na tabela abai)o.
2e voc% no criar nenhum ob#eto ?4ield, todos os campos da tabela estaro disponveis, mas caso voc% crie
algum, somente os campos ue voc% criar estaro disponveis.
2e voc% selecionar os campos no 4ields 'ditor e arrastar para o 4orm, sero criados os controles visuais para
esses campos, 9abel, &-'dit e outros, mas antes coloue a descrio dos campos na propriedade &ispla69abel.
TField
, classe ?4ield usada como ancestral para todos as classes dos campos. Keralmente iremos usar ob#etos de
classes descendentes de ?4ield, mas em todos eles podemos encontrar os itens mostrados abai)o.
Propriedades Descrio
,lignment ,linhamento do te)to do campo nos controles visuais
,s-oolean ;alor do campo convertido para -oolean
,sCurrenc6 ;alor do campo convertido para Currenc6
,s&ate?ime ;alor do campo convertido para &ata?ime
,s4loat ;alor do campo convertido para &ouble
,s5nteger ;alor do campo convertido para 5nteger
,s2tring ;alor do campo convertido para string
,s;ariant ;alor do campo convertido para ;ariant
Calculated 5ndica se o campo calculado em tempo de e)ecuo
Can7odif6 5ndica se um campo pode ser modificado
Constraint'rror7essage 7ensagem de erro se a condio de CustomConstraint no for satisfeita
CustomConstraint Condio de validao do campo
&ata2et &ata2et onde est o campo
&ata2ize ?amanho do campo, em -6tes
&ata?6pe 3ropriedade do tipo ?4ield?6pe, ue indica o tipo do campo
&efault')pression ')presso com valor &efault do campo para novos registros
&ispla69abel ?tulo a ser e)ibido para o campo
&ispla6?e)t ?e)to e)ibido nos controles visuais associados ao campo
&ispla6Qidth +!mero de caracteres ue deve ser usado para mostrar o campo no controles visuais
'dit7as0 7scara de edio do campo
4ieldNind 3ropriedade do tipo ?4ieldNind ue indica o tipo do campo, como Calculado ou 9oo0up
4ield+ame +ome do campo na tabela
4ield+o 3osio fsica do campo na tabela
5nde) 3osio do campo nos controles visuais
5s5nde)4ield 5ndica se um campo vlido para ser usado como ndice
5s+ull 5ndica se o campo est vazio
Ne64ields Campo chave da tabela no relacionamento com 9oo0up&ata2et, usado em campos 9oo0up
9oo0up 5ndica se um campo 9oo0up
9oo0upCache &efine se ser usado cache para campos 9oo0up
9oo0up&ata2et &ata2et onde est definido o valor do campo 9oo0up
9oo0upNe64ields Campo chave do relacionamento em 9oo0up&ata2et
9oo0up(esult4ield ;alor do campo, ue ser mostrado nos controles visuais
(eadOnl6 &efine se um campo somente para leitura
(euired &efine se o campo obrigat=rio
2ize ?amanho fsico do campo
?e)t ?e)to de edio do campo
;alue ,cesso direto ao valor do campo
;isible &efine se um campo visvel
Eventos Descrio
OnChange Chamado uando o valor do campo mudado
On2et?e)t Chamado pelos controles visuais para atribuir o te)to digitado pelo usurio ao campo
OnKet?e)t Chamado para formatar o te)to de e)ibio do campo
On;alidate ;alidao do valor atribudo ao campo, caso o valor no se#a vlido, gere uma e)ceo
Mtodo Descrio
,ssign ,tribui um valor de um campo a outro, inclusive nulo
4ocusControl 2eta o foco para o controle visual ligado ao campo nos 4orms
Clear 9impa o conte!do do campo
'sto listadas abai)o algumas classes ue realmente iremos manipular no tratamento dos campos de uma
tabela, so classes descendentes de ?4ield.
?2tring4ield ?-lob4ield ??ime4ield
?2mallint4ield ?5nteger4ield ?-6tes4ield
?4loat4ield ?Qord4ield ?;ar-6tes4ield
?Currenc64ield ?,uto5nc4ield ?Kraphic4ield
?-oolean4ield ?-C&4ield ?7emo4ield
?&ate4ield ?&ate?ime4ield
'm alguns desses campos voc% pode encontrar as propriedades mostradas abai)o, ue no esto presentes em
?4ield.
Propriedades Descrio
7a);alue ;alor m)imo para o campo
7in;alue ;alor mnimo para campo
&ispla64ormat 4ormato de apresentao do campo, como 0!1!!2 32 ou 0!1442 Km2
'dit4ormat 4ormato de edio do campo
Currenc6 &efine se um campo monetrio
&ispla6;alues $sado com campos -oolean, define o te)to para ?rue e 4alse, como Sim5N6o
Mtodos Descrio
9oad4rom4ile Carrega o conte!do do campo de um aruivo
2ave?o4ile 2alva o conte!do do campo para um aruivo
3ara acessar os campo de uma tabela, e)istem vrias abordagens, como mostrado abai)o..
$sando o ob#eto ?4ield ligado ao campo.
TblDescricao..alue %= Tbl.endedor..alue K ' em ' K TblData.Astring=
$sando a notao de colchetes. 2e voc% no especificar nenhuma propriedade, assumida a propriedade
;alue por padro.
Tbl>'Descricao'A %= Tbl>'.endedor'A K ' em ' K Tbl>'Data'A.Astring=
,travs do mtodo 4ield-6+ame
Tbl.Field"DName!'Descricao'3..alue %= Tbl.Field"DName!'.endedor'3..alue K ' em '
K Tbl.Field"DName!'Data'3.Astring=
$sando a lista 4ields do ??able
Tbl.Fields>0A..alue %= Tbl.Fields>5A..alue K ' em ' K Tbl.Fields>8A.Astring=
Converso de Tipos
, converso de tipo de um campo pode ser feita atravs as propriedades tipo As111, como ,s2tring.
DtmPed.TblData.Astring %= #dtData.Te@t=
%alidao
3ara validar os valores de um campo, voc% pode usar a propriedade CustomConstraint, por e)emplo para
garantir ue a uantidade de um item se#a maior ue zero, use em CustomConstraint &-antidade 7 !, e em
CustomConstraint coloue a mensagem para o usurio caso a condio se#a falsa. Outra forma, mais fle)vel,
usando o evento On;alidate, com um c=digo como abai)o, onde gerada uma e)ceo para cancelar a
atribuio do valor ao campo.
iB TblJuantidade..alue <= 1 then
raise #@ception.Create!'Juantidade de2e ser maior Nue Eero.'3=
Formatao Personali$ada
Caso ueira fazer uma formatao personalizada do campo, pode usar os eventos OnKet?e)t e On2et?e)t. 3or
e)emplo, se tiver um campo #stado, e uiser ue uando o valor do campo for , fosse mostrado ,asado e S,
Solteiro, no evento OnKet?e)t use um c=digo como o abai)o.
iB Tbl#stado..alue = 'C' then
Te@t %= 'Casado'
else iB Tbl#stado..alue = '' then
Te@t %= 'olteiro'=
Como controle visual para o usurio escolher o valor do campo, voc% poderia usar o &-Combo-o), com Solteiro
e ,asado na propriedade Items, e no evento OnKet?e)t do campo o c=digo mostrado abai)o.
iB Te@t = 'Casado' then
Tbl#stado..alue %= 'C'
else iB Te@t %= 'olteiro' then
Tbl#stado..alue = ''=
Campos Calc(lados
3ara criar campos calculados, cliue com o direito no 4ields 'ditor e escolha New Field, no uadro +e@4ield,
digite o nome do campo, o nome do ob#eto ser automaticamente informado, o tipo do campo, seu tamanho e
escolha Calculated em 4ield t6pe.
3ara colocar um valor nesse campo usaremos o evento OnCalc4ields do componente ??able, em nenhuma outra
parte os valores desses campos podem ser alterados.
O c=digo do evento OnCalc4ields deve ser en)uto, pois este chamado vrias vezes durante a edio de um
registro e um procedimento pesado pode comprometer a performance do sistema.
procedure TDtmAluno.TblCalcFields!Dataet% TDataet3=
begin
iB TblFaltas..alue ; DtmTurma.Tbl$a@Faltas..alue then
Tblituacao..alue %= '#2adido'
else iB TblNota..alue ;= O then
Tblituacao..alue %= 'Apro2ado'
else
Tblituacao..alue %= ')etido'
end=
Campos #oo*(p
3ara fazer um relacionamento, Ps vezes precisamos criar um campo de descrio, por e)emplo em uma
biblioteca, na tabela de emprstimos, temos o c=digo do 9ivro, mas gostaramos de mostrar o ?tulo, esses
campos so chamados de campos 9oo0up.
3ara criar um campo 9oo0up, siga os passos abai)o, tomando como e)emplo o caso do livro no emprstimo.
,bra o 4ields 'ditor do ?able dese#ado, 'mprstimos
Cliue com o direito e escolha +e@ 4ield
+o uadro +e@ 4ield, escolha as propriedades do campo como descrito em campos calculados, mas em
4ield t6pe, escolha 9oo0up
'm Ne6 4ields escolha o campo da tabela ue faz parte do relacionamento, Cod9ivro
&ata2et a tabela onde est a descrio, 9ivros
'm 9oo0up Ne6s, escolha o campo de &ata2et ue faz parte do relacionamento, Cod9ivro
4inalmente, escolha em (esult field o campo de &ata2et ue vai ser mostrado para o usurio, ?tulo
'ssas op/es correspondem a algumas propriedades do ob#eto ?4ield gerado, ue podem ser alteradas no Ob#ect
5nspector, Ne64ields, 9oo0up&ata2et, 9oo0upNe64ields, 9oo0up&ata2et e 9oo0up(esult4ield.
8uando esses campo so e)ibidos em um &-Krid, por padro criado um boto de loo0up ue mostrar os
valores da outra tabela uma lista. 3ara colocar esses campos em um 4orm, devemos usar o
&-9oo0upCombo-o), apenas com as propriedades padro, &ata2ource e &ata4ield, onde deve ser escolhido o
campo 9oo0up, uando voc% arrastar o campo para o 4orm isso ser feito automaticamente.
TData$ource
Componente usado para fazer a ligao entre um &ata2et e os componentes visuais.
Propriedade Descrio
,uto'dit &efine se a tabela entrar em modo de edio assim ue o usurio digitar novos valores nos controles
&ata2et &ata2et ao ual o ?&ata2ource faz refer%ncia
Evento Descrio
On&ataChange Ocorre uando o &ata2et alterado, ao mudar de registro ou mudar os valores dos campos
On2tateChange Ocorre uando o estado do &ata2et alterado
On$pdate&ata Ocorre antes de uma atualizao
Bot'es de +ave!ao Personali$ados
O &-+avigator tem os principais bot/es necessrios para a navegao por uma tabela, contudo se voc% uiser
criar seus pr=prios bot/es de navegao, o ue no recomendado, no evento OnClic0 desses bot/es deve ser
chamados os mtodos de navegao, como indicado abai)o.
DtmCli.Tbl.Ne@t=
3ara controlar a habilitao dos bot/es de navegao use o evento On&ataChange do &ata2ource
correspondente como indicado abai)o.
"tnPro@.#nabled %= not DtmCli.Tbl.#*F=
3ara criar bot/es de controle, como incluso e e)cluso, use o evento On2tateChange do &ata2ource como
indicado abai)o para controlar a habilitao.
"tnAlterar.#nabled %= DtmCli.Tbl.tate = ds"rowse=
Data Controls
Controles usados na interface com o usurio. ?odos esses componentes tem uma propriedade &ata2ource, ue
deve ter o &ata2ource do ?able ao ual esto ligados.
TDB%a&igator
O &-+avigator permite ue o usurio realize opera/es padro de controle de dados. Cada um dos bot/es do
&-+avigator chama um mtodo do Componente ?able ao ual est ligado.
3odemos personalizar o &-+avigator usando as suas propriedades e eventos, mas se uisermos mudar a figura
dos bot/es teremos ue editar diretamente o aruivo 95-S&-C?(92.('2, na pasta do &elphi.
Propriedades Descrio
;isible-uttons &efine os bot/es ue sero visveis
<ints <ints e)ibidos pelos bot/es
Confirm&elete &efine se ser solicitado uma confirmao antes da e)cluso
Eventos Descrio
-efore,ction 8uando um boto do +avigator pressionado, antes da ao ser e)ecutada
OnClic0 8uando um boto do +avigator pressionado, depois da ao ser e)ecutada
TDB'rid
7ostra os registros de uma tabela em forma de grade, cada coluna um campo e cada registro, uma linha.
Propriedades Descrio
Columns 9ista do tipo ?&-KridColumns, com as colunas da Krid, cada item da lista do tipo ?Column
4ields 9ista de ob#etos ?4ield mostrados nas colunas
Options 2et com as op/es da Krid, como Confirm&elete, 7ulti2elect, Column(esize
2elected4ield Campo da coluna selecionada
2elected5nde) Tndice da coluna selecionada
2elected(o@s 9ista do tipo ?-oo0mar09ist, com os registros selecionados em uma Krid com 7ulti2elect
?itle4ont 4onte do ttulo das colunas
4i)edColor Cor 4i)a, usada nas colunas e indicadores
Eventos Descrio
OnCellClic0 ,o clicar em uma clula da Krid
OnCol'nter 8uando uma clula de alguma coluna da Krid recebe o foco
OnCol')it 8uando uma clula de alguma coluna da Krid perde o foco
OnColumn7oved 8uando o usurio mover uma coluna
On&ra@&ataCell 'vento usado para personalizar a forma de desenhar os dados ue so apresentados na Krid
On'dit-uttonClic0 ,o clicar no boto de edio de uma clula, mostrado pela propriedade -utton2t6le da coluna
On?itleClic0 ,o clicar no ttulo das colunas
TCol(mn
5tem de uma lista T"$8rid,ol-mns, usada na propriedade ,ol-mns da Krid, ob#etos desse tipo representam uma
coluna da Krid. Us vezes as propriedades definidas para o campo sobrep/em as propriedades
Propriedades Descrio
-utton2t6le -oto mostrado ao editar as clulas da coluna
4ield Ob#eto ?4ield ligado P coluna
4ield+ame +ome do campo ligado P coluna
3ic09ist ?2trings com os itens da lista &rop&o@n usada nas clulas da coluna
?itle 3ropriedade do tipo ?Column?itle com as op/es do ttulo da coluna
TDBTe(t) TDBEdit) TDBMemo) TDB*istBo() TDBComboBo() TDBImage) TDB+ic#Edit
Controles genricos ligados a um campo de uma tabela.
Propriedades Descrio
&ata4ield Campo ao ual o controle est ligado
TDBC#eckBo(
$sado em campos ue podem receber apenas dois valores, como campos l=gicos.
Propriedades Descrio
;alueChec0ed ;alor a ser armazenado uando est selecionado
;alue$nchec0ed ;alor a ser armazenado uando no est selecionado
TDB+adio'roup
7ostra algumas op/es para o preenchimento de um campo.
Propriedades Descrio
;alues ;alor a ser armazenado para cada boto de rdio
TDB*ookup*istBo() TDB*ookupComboBo(
3reenche um campo com dados contidos em outra tabela. 2e o campo mostrado nesses componentes for um
campo 9oo0up, voc% no precisa especificar nenhuma das propriedades abai)o, apenas &ata2ource e &ata4ield.
Propriedades Descrio
9ist2ource &ata2ource ue contm os valores a serem e)ibidos na lista
9ist4ield Campo de 9ist2ource ue ser e)ibido
Ne64ield Campo de 9ist2ource usado no relacionamento
E(erc,cios
*. Crie uma aplicao ue cadastre os Clientes de uma empresa e as Compras feitas por estes Clientes,
permita incluso, alterao, e)cluso e consulta aos dados cadastrados. +a #anela principal fica o cadastro
de Clientes, com a grade de visualizao de suas Compras, crie tambm uma Ranela para localizar Clientes
por +ome.
, tabela de clientes deve ter +ome, 'ndereo, -airro, Cidade, 'stado, C'3 e ?elefone, defina tambm
ndices para melhorar a localizao de clientes por +ome. +a tabela de Compras, dese#a-se saber a &ata,
3rodutos e ;alor, assuma ue cada compra tem um 3roduto apenas. Como foi mencionado, as compras
sero cadastradas pelo cliente atual, crie a relao 7estre1&etalhe entre Clientes e Compras.
O 4orm de localizao de Clientes deve permitir pesuisa +ome, da mesma forma da uesto anterior.
:. $ma academia de ginstica dese#a manter um controle maior sobre seus ,lunos, para isso ela organizou os
clientes em turmas. Os dados de uma ?urma so +!mero de alunos, <orrio da aula, &urao da aula, &ata
inicial, &ata final e 5nstrutor. &eve ser feita tambm uma tabela de instrutores para evitar a digitao
repetitiva do +ome. Os dados dos ,lunos so 7atrcula, &ata de 7atrcula, +ome, 'ndereo, -airro, Cidade,
'stado, ?elefone, &ata de nascimento, ,ltura e 3eso. Crie um banco de dados, normalizado, para guardar
essas informa/es.
+o cadastro de ?urmas, o <orrio de aulas deve ser entre FVBB e *DVBB, a &urao no pode ser maior ue :
horas e a &ata 4inal tem ue ser, no mnimo > dias ap=s a 5nicial. 'sse cadastro deve ser ordenado primeiro
pela &ata 4inal, em ordem decrescente e depois pelo <orrio, em ordem crescente. ,s turmas # encerradas
no devem ser mostradas no cadastro, mas crie um aruivo morto com as turmas # encerradas, onde os
dados no possam ser alterados. &eve ser possvel tambm procurar o 5nstrutor pelo +ome, usando um
Combo-o), com os registros da tabela de 5nstrutores.
+o cadastro de ,lunos, a matrcula ,uto-incremental, a &ata de 7atrcula deve ser, obrigatoriamente, a
&ata do sistema e deve ser criado um campo calculado com o peso ideal do cliente, altura menos *,*>.

Você também pode gostar