You are on page 1of 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-requisitos bsicos para o desenvolvimento desse contedo.
Modelo de Dados
essencial planejar o banco de dados antes de implementar. Um dos mtodos que voc pode utilizar o DER,
como no exemplo no normalizado mostrado logo abaixo.
CGC/CPF Estado Bairro CodCli
CodPed Data

Endereco
Vendedor
1 N
Nome Clientes Pedidos

1
CodCli

Tel Resid

Tel Comer Cidade


N
CodProd CodPed

Descrio Produtos Item CodProd


1 N

Preo Unitrio
Quantidade
Borland Database Engine
A BDE fornece a capacidade de acesso padronizado a banco de dados para Delphi, C++ Builder e outros
ambientes de programao da Borland, oferecendo um grande conjunto de funes para auxiliar no
desenvolvimento de aplicaes Desktop e Cliente/Servidor.
Os controladores da BDE podem ser usados para acessar bases de dados dBase, Paradox, Access, FoxPro,
Interbase, Oracle, Sybase e MS-SQL Server, DB2, Informix, alm de um controlador de acesso a arquivos texto.
Voc tambm pode utilizar fontes de dados ODBC, podendo acessar qualquer base de dados compatvel.
As funes que compe uma API da BDE so usadas internamente pelos componentes de acesso a dados do
Delphi e muito raramente voc teria que us-las diretamente, mas isso totalmente possvel. A referncia
completa das funes da BDE, com exemplos em Delphi, est no BDE API Help na pasta do Delphi no Menu
Iniciar.
Arquitetura de Acesso
O acesso e manipulao de um banco de dados por um programa Delphi realizado como mostrado abaixo, note
que a aplicao no acessa os dados diretamente, mas usa sempre a BDE.

Assim, para uma aplicao de bancos de dados funcionar, preciso que a BDE esteja instalada na mquina, no
bastando apenas o arquivo executvel.
Criao do Banco de Dados
Para criar um banco de dados novo, normalmente, necessrio dispor de alguma ferramenta do prprio banco de
dados, como o Access, mas se a base de dados for Paradox, ou dBase, voc pode usar o Database Desktop, um
utilitrio que vem com o Delphi e permite a criao desses tipos de bancos de dados.
Database Desktop
Fornece uma interface simples e completa para configurao, definio e manipulao de tabelas de bancos de
dados Paradox e dBase. Alm disso na Opo Tools/Alias Manager voc pode configurar seu banco de dados,
como ser lembrado logo adiante.
Tabelas Paradox
Para criar tabelas Paradox, siga os passos abaixo. Voc deve salvar as tabelas de um mesmo banco de dados na
mesma pasta, pois o Paradox trata a pasta onde esto as tabelas como sendo o banco de dados.
1 Clique em File/New/Table
2 Escolha o tipo da nova tabela, Paradox 7
3 Aparece uma janela para que voc defina a estrutura de campos, ndices e demais opes necessrias na
criao da tabela
4 Em Field Name, voc escolhe o nome do campo, com at 25 caracteres
5 Em Type, o Tipo do campo, com a barra de espao ou o boto direito do mouse voc pode escolher o tipo a
partir de uma lista
6 Size o tamanho do campo, usado somente em alguns tipos de campos
7 Key especifica os campos que faro parte da chave primria, que no pode se repetir e deve ser composta
pelos primeiros campos da tabela
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.
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
Configurao
Para configurar o acesso a um banco de dados, voc tem vrias opes, criar um Alias, usar o componente
TDatabase ou os dois juntos.
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.
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.
TDatabase
Esse componente permite a manipulao de um banco de dados, atravs de um Alias da BDE ou a criao de um
Alias local, somente visvel dentro da aplicao, esse componente tambm permite o gerenciamento de
transaes, garantindo uma integridade maior no projeto. Por essas e outras razes o uso do componente
Database altamente recomendado como opo para criao de Aliases.
Propriedades Descrio
AliasName Nome do Alias do banco de dados, usado quando voc criar um Alias da BDE
Connected Define se a conexo com o banco de dados est ativa
DatabaseName Nome do Alias local a ser usado pelos outros componentes do Delphi
DataSetCount Nmero de DataSets (Tabelas) abertos no banco de dados
DataSets Lista com os DataSets abertos
DriverName Driver usado para criar um Alias local, automaticamente cancela a propriedade AliasName
InTransaction Define se o Database est em transao
KeepConnection Define se a conexo com o banco de dados ser mantida, mesmo sem DataSets abertos
LoginPrompt Define se ser mostrado o quadro de login padro da BDE
Params Parmetros do banco de dados, com itens semelhantes seo Definition do Database Explorer
TransIsolation Nvel de isolamento da transao, define como uma transao ir enxergar outra
Mtodos Descrio
Close Encerra a conexo com o banco de dados, todos os DataSets sero fechados
CloseDataSets Fecha todos os DataSets abertos, mas a conexo no encerrada
Commit Grava alteraes feitas durante a transao
Open Abre a conexo com o banco de dados
Rollback Anula todas as alteraes feitas durante a transao
StartTransaction Inicia uma transao
Eventos Descrio
OnLogin Evento usado quando voc quiser escrever seu prprio mtodo de conexo com o banco de dados
Para acessar uma base de dados Access, voc poderia usar os valores mostrados na descrio textual a seguir.
AliasName = 'Northwind'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
Params.Strings = (
'DATABASE NAME=C:\Meus Documentos\NorthWind.mdb'
'USER NAME=paulo'
'OPEN MODE=READ/WRITE'
'LANGDRIVER=intl850'
'PASSWORD=elvis')
Para ajudar a preencher os parmetros de um Database, clique duas vezes sobre o componente e clique em
Defaults, todos os parmetros defaults sero apresentados.
Para acessar uma base Paradox, use as propriedades abaixo, note que para o Paradox, a nica informao
realmente significante o Path, a pasta onde esto as tabelas.
AliasName = 'DBDEMOS'
DatabaseName = 'Dados'
LoginPrompt = False
KeepConnection = True
Params.Strings = (
'PATH=d:\Borland\Delphi 3\Demos\Data'
'ENABLE BCD=FALSE'
'DEFAULT DRIVER=PARADOX')
Aps a criao do Alias da BDE ou do Alias local, usando o componente TDatabase, o banco de dados est
configurado e pronto para ser usado.
Database Form Wizard
Aps a configurao do banco de dados, a maneira mais rpida, de se fazer uma janela de manuteno de dados
atravs do Form Wizard no menu Database. Ao chegar no Wizard so feitas uma srie de perguntas que podem
resultar em uma janela simples ou Mestre/Detalhe. O acesso ao banco de dados pode ser feito atravs de
componentes TTable ou atravs de SQL, com o componente TQuery, usaremos o componente TTable. Todos os
campos selecionados aparecem na janela permitindo entrada de dados atravs de componentes do tipo TDBEdit.
Cada DBEdit recebe um Label baseado no nome do campo na tabela selecionada. Na Janela includo tambm
um componente para permitir a navegao e a manuteno dos dados, um DBNavigator. O componente utilizado
para fazer a ligao entre os componentes visuais e o TTable um TDataSource. Geralmente os componentes
TTable e TDataSource so inseridos em DataModules, que so a base para a criao de classes de dados.
Sempre Aps usar o Wizard, lembre-se de mudar os nomes dos componentes, para que fiquem mais claros.
Form Passo a Passo
O diagrama abaixo mostra como o Wizard fez a ligao entre os componentes, onde os quadrados so
componentes e as elipses, propriedades.

TDatabase TTable DataSet TDBEdit


DB

DatabaseName DatabaseName TDataSource DataSource

Para concluir, acompanhe abaixo os passos realizados pelo Wizard e tente voc mesmo criar seu prprio Form.
8 Inclua um novo DataModule
9 Adicione ao DataModule um Table e um DataSource
10 No Table Coloque em DatabaseName o nome do Alias criado pela propriedade DatabaseName do Database e
em TableName, o nome da tabela
11 No evento OnCreate do DataModule, chame o mtodo Open do componente Table
12 No DataSource coloque em DataSet o nome do componente TTable
13 No Form, para definir a interface com o usurio, use os componentes de controle de dados que esto na
pgina DataControls, basicamente DBEdit e DBNavigator
14 Para poder acessar os dados, coloque a Unit onde est o DataModule no uses da Unit do Form
15 Em todos os componentes DataControls, escolha na propriedade DataSource, o componente DataSource
criado no DataModule
16 Em alguns controles, como no DBEdit, deve ser especificado tambm o campo da tabela, na propriedade
DataField
Seguindo esses passos, o Form estar pronto para usar. Mais adiante, veremos uma forma mais rpida de se
criar um Form de manuteno, mas o mais importante compreender os passos mostrados acima, com todos os
componentes e propriedades envolvidas. Vamos detalhar agora cada um dos componentes envolvidos nesse
processo, para compreendermos melhor o que est acontecendo.
TDataModule
Um DataModule como se fosse um Form invisvel, onde iremos inserir os componentes de acesso a dados,
como o Table e o Datasource. Por serem tambm classes, os DataModules permitem a fcil implementao de
modelos de objetos, permitindo herana, criao de mtodos, dentre outros aspectos. Para inserir um
DataModule em um projeto, escolha New DataModule do menu File. Os DataModules 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. Esse componente o mais importante
quando acessamos bases de dados Desktop. Muitas dos itens mostrados abaixo esto definidos na classe
TDataSet, ancestral do TTable.
Propriedades Descrio
Active Define se a tabela esta aberta ou fechada
BOF Informa se est no incio da tabela
CanModify Define se a aplicao pode inserir, deletar ou alterar registros
DatabaseName Nome do banco de dados onde est a tabela, deve ser escolhido um Alias, que pode ser local
EOF Informa se est no fim da tabela
Exclusive Define se a tabela pode ser compartilhada por outro usurio
FieldCount Nmero de campos da tabela
FieldDefs Lista com a Definio dos campos da tabela
Fields Lista de objetos do tipo TField, que representam os campos da tabela
Filter String com uma condio de filtragem
Filtered Define se a tabela filtrada
IndexFieldNames Nome dos campo de ndice, usados para ordenar os registros da tabela
IndexName Nome do ndice atual, vazia quando o ndice for a chave primria
IndexDefs Lista com a definio dos ndices
MasterFields Campos usados no relacionamento com a tabela mestre
MasterSource DataSource da tabela mestre em uma relao Mestre/Detalhe
Modified Define se o registro atual foi modificado
ReadOnly Define se a tabela somente para leitura
RecNo Nmero do registro atual
RecordCount Nmero de registros
State Estado da tabela
TableName Nome da tabela
TableType Tipo da tabela
Mtodo Descrio
AddIndex Cria um novo ndice, a tabela deve ser exclusiva
Append Entra em modo de insero e, ao gravar, o registro ser colocado no fim do arquivo
AppendRecord Insere um registro no final do arquivo atravs de cdigo
Cancel Cancela as alteraes feitas no registro atual
Close Fecha a tabela
CreateTable Cria uma tabela, depende de FieldDefs e IndexDefs
Delete Exclui o registro corrente
DeleteIndex Exclui um ndice
DeleteTable Exclui a tabela
DisableControls Desabilita a atualizao dos controles visuais
Edit Permite a alterao dos campos do registro atual
EmptyTable Apaga todos os registro da tabela, para isso a tabela no pode esta sendo compartilhada
EnableControls Habilita os controles visuais
FieldByName Acessa um campo, do tipo TField, pelo nome
FindKey Procura o registro com os valores exatos aos dos parmetros nos campos do ndice atual
FindNearest Procura o registro com os valores mais aproximados aos dos parmetros nos ndices
First Move para o primeiro registro
Insert Entra em modo de insero de um novo registro na posio atual
InsertRecord Adiciona um novo registro, j com os dados, na posio atual
IsEmpty Define se a tabela est vazia
Last Move para o ltimo registro
Locate Procura um registro, usando ou no ndices, de acordo com a disponibilidade
LockTable Trava a tabela
Lookup Procura um registro e retorna valores dos campos deste
MoveBy Move um nmero especfico de registros
Next Move para o prximo registro
Open Abre a tabela
Post Grava as alteraes no registro atual
Prior Move para o primeiro registro
Refresh Atualiza a tabela com os dados j gravados
RenameTable Renomeia a tabela
UnlockTable Destrava a tabela
Evento Descrio
AfterCancel Aps do mtodo Cancel
AfterClose Aps o fechamento da tabela
AfterDelete Aps do mtodo Delete
AfterEdit Aps do mtodo Edit
AfterInsert Aps do mtodo Insert
AfterOpen Aps do mtodo Open
AfterPost Aps do mtodo Post
AfterScroll Aps mudar de registro
BeforeCancel Antes do mtodo Cancel
BeforeClose Antes do fechamento da tabela
BeforeDelete Antes do mtodo Delete
BeforeEdit Antes do mtodo Edit
BeforeInsert Antes do mtodo Insert
BeforeOpen Antes do mtodo Open
BeforePost Antes do mtodo Post
BeforeScroll Antes de mudar o registro
OnCalcFields Evento usado para calcular os valores dos campos calculados
OnDeleteError Quando ocorre um erro ao chamar o mtodo Delete
OnEditError Quando ocorre um erro ao chamar o mtodo Edit
OnFilterRecord Evento usado com filtragem varivel
OnNewRecord Quando a tabela entra em modo de insero, no deixa Modified igual a True
OnPostError Quando ocorre um erro ao chamar o mtodo Post
Filtros
Usando o Filter, voc pode filtrar os registro de uma tabela usando uma expresso lgica, como nos exemplos
abaixo. Para tornar um filtro ativo, basta colocar Filtered igual a True.
Data = '20/04/1998'
(Data = '20/04/1998') AND (Vendedor = 'Gilherme Augusto da Fonseca')
(Nome > 'A') AND (Nome < 'B')
Contudo, se a condio de filtragem for muito varivel, prefervel usar um cdigo como o mostrado abaixo no
evento OnFilterRecord da Table, para fazer uma filtragem dinmica, com a propriedade Filter vazia e Filtered
igual a True.
Accept := TblData.Value = Date;
Ao filtrar uma tabela, a propriedade RecordCount da Table, s mostra o nmero de registros que satisfazem ao
filtro, como se os outros registros nao existissem.
0Alterando Registros
Para alterar registros em cdigo, colocamos a tabela em modo de edio, alteramos o valor dos campos e
gravamos as alteraes, se for necessrio.
with DtmPedidos do;
begin
Tbl.Edit;
TblData.Value := Date;
TblHora.Value := Time;
Tbl.Post;
end;
Inserindo Registros
Para inserir registros em cdigo voc pode usar os mtodos AppendRecord e InsertRecord, caso voc no
precise de algum campo, mesmo assim ele deve ser informado com o valor Null.
DtmProd.Tbl.AppendRecord([Null, EdtDescricao.Text, EdtPreco.Text]);
Localizando Registros
Para localizar registros voc pode usar vrios mtodos, mas o melhor deles o Locate, no exemplo abaixo feita
uma pesquisa exata.
if not DtmCli.Tbl.Locate('CodCli', Edt.Text, []) then
ShowMessage('Cliente no encontrado.');
Voc tambm pode fazer uma pesquisa parcial e/ou sem sensitividade de caso usando o terceiro parmetro, que
um conjunto de opes.
DtmCli.Tbl.Locate('Nome', Edt.Text, [loPartialKey, loCaseInsensitive]);
Se voc precisar fazer uma pesquisa por mais de um campo, separe os nomes dos campos por ponto e vrgula e
use a funo VarArrayOf para criar um array com os valores que voc quer procurar.
if not DtmPed.Tbl.Locate('Vendedor;Data', VarArrayOf([EdtVendedor.Text, EdtData.Text]),
[loCaseInsensitive]) then
ShowMessage('O vendedor no realizou nenhuma venda nessa data');
Caso os campos pesquisados sejam indexados, a pesquisa ser muito mais eficiente, seno ser criado um filtro
temporrio da BDE para localizar os registros
Indexao
A indexao usada para ordenar os registros da tabela, para isso voc deve escolher os campos pelos quais
voc quer ordenar na propriedade IndexFieldNames, inclusive em cdigo, como mostrado abaixo, todos campos
devem ser indexados e separados por ponto e vrgula.
DtmCli.Tbl.IndexFieldNames := 'Nomcli';
DtmPed.Tbl.IndexFieldNames := 'Data, Vendedor';
Estados da Tabela
A propriedade State determina o estado das tabelas, os principais estados so demonstrados abaixo, veja como
os mtodos mudam o estado.
Post
Insert Cancel
Append Delete
dsInsert dsBrowse dsEdit

Post Edit
Cancel
Delete

Verificando Alteraes
Onde for necessrio a verificao de alteraes feitas em uma Tabela, por exemplo no evento OnClose de um
Form de manuteno, voc pode usar a propriedade Modified, como mostrado no exemplo abaixo.
if DtmCli.Tbl.Modified then
if Application.MessageBox('Gravar alteraes?', 'Dados Alterados', MB_ICONQUESTION
+ MB_YESNO) = IDYES then
DtmCli.Tbl.Post
else
DtmCli.Tbl.Cancel;
Valores Default
Caso voc queira especificar valores Default para os campos de uma tabela, use o evento OnNewRecord, pois
nesse evento o registro no marcado como modificado.
TblData.Value := Date;
Percorrendo uma Tabela
Utilize um cdigo semelhante ao mostrado abaixo para percorrer uma tabela do incio ao fim.
Tbl.DisableControls;
Total := 0;
Tbl.First;
while not Tbl.EOF do
begin
Total := Total + TblValor.Value;
Tbl.Next;
end;
Tbl.EnableControls;
Forms Modais de Incluso/Alterao
Para mostrar Forms Modais de incluso ou alterao de registros utilize comandos como os mostrados abaixo.
TblCli.Insert;
if FormInsCli.ShowModal = mrOk then
TblCli.Post
else
TblCli.Cancel;
Mestre/Detalhe
Nos relacionamentos de 1 para N, uma tabela pode estar ligada a outra em uma relao Mestre/Detalhe, nesse
tipo de relao os registros da tabela de ordem N so filtrados pelo campo de relacionamento com a tabela de
ordem 1. Por exemplo, se o relacionamento de Clientes com Pedidos for mestre/detalhe, s sero acessados em
pedidos, os registros cujo campo CodCli seja igual ao CodCli da tabela de Clientes.
Para fazer esse tipo de relacionamento, siga os passos abaixo.
17 No uses da Unit detalhe, Pedidos, inclua a Unit da tabela mestre, Clientes
18 Na Table detalhe, Pedidos, Coloque em MasterSource o DataSource da tabela mestre, Clientes
19 Em MasterFields, chame o Fields Links Designer e escolha os campos de ligao das tabelas, no caso,
CodCli para as duas tabelas
Fields Editor
Para criar objetos para os campos de uma tabela clique duas vezes no componente TTable 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 dos objetos TField esto listadas
na tabela 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.
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
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
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
Para acessar os campo de uma tabela, existem vrias abordagens, como mostrado abaixo..
20 Usando o objeto TField ligado ao campo.
TblDescricao.Value := TblVendedor.Value + ' em ' + TblData.AsString;
21 Usando a notao de colchetes. Se voc no especificar nenhuma propriedade, assumida a propriedade
Value por padro.
Tbl['Descricao'] := Tbl['Vendedor'] + ' em ' + Tbl['Data'].AsString;
22 Atravs do mtodo FieldByName
Tbl.FieldByName('Descricao').Value := Tbl.FieldByName('Vendedor').Value + ' em '
+ Tbl.FieldByName('Data').AsString;
23 Usando a lista Fields do TTable
Tbl.Fields[5].Value := Tbl.Fields[3].Value + ' em ' + Tbl.Fields[4].AsString;
Converso de Tipos
A converso de tipo de um campo pode ser feita atravs as propriedades tipo As..., como AsString.
DtmPed.TblData.AsString := EdtData.Text;
Validao
Para validar os valores de um campo, voc pode usar a propriedade CustomConstraint, por exemplo para
garantir que a quantidade de um item seja maior que zero, use em CustomConstraint Quantidade > 0, e em
CustomConstraint coloque a mensagem para o usurio caso a condio seja falsa. Outra forma, mais flexvel,
usando o evento OnValidate, com um cdigo como abaixo, onde gerada uma exceo para cancelar a
atribuio do valor ao campo.
if TblQuantidade.Value <= 0 then
raise Exception.Create('Quantidade deve ser maior que zero.');
Formatao Personalizada
Caso queira fazer uma formatao personalizada do campo, pode usar os eventos OnGetText e OnSetText. Por
exemplo, se tiver um campo Estado, e quiser que quando o valor do campo for C fosse mostrado Casado e S,
Solteiro, no evento OnGetText use um cdigo como o abaixo.
if TblEstado.Value = 'C' then
Text := 'Casado'
else if TblEstado.Value = 'S' then
Text := 'Solteiro';
Como controle visual para o usurio escolher o valor do campo, voc poderia usar o DBComboBox, com Solteiro
e Casado na propriedade Items, e no evento OnGetText do campo o cdigo mostrado abaixo.
if Text = 'Casado' then
TblEstado.Value := 'C'
else if Text := 'Solteiro' then
TblEstado.Value = 'S';
Campos Calculados
Para criar campos calculados, clique com o direito no Fields Editor e escolha New Field, no quadro NewField,
digite o nome do campo, o nome do objeto ser automaticamente informado, o tipo do campo, seu tamanho e
escolha Calculated em Field type.
Para colocar um valor nesse campo usaremos o evento OnCalcFields do componente TTable, em nenhuma outra
parte os valores desses campos podem ser alterados.
O cdigo do evento OnCalcFields deve ser enxuto, pois este chamado vrias vezes durante a edio de um
registro e um procedimento pesado pode comprometer a performance do sistema.
procedure TDtmAluno.TblCalcFields(DataSet: TDataSet);
begin
if TblFaltas.Value > DtmTurma.TblMaxFaltas.Value then
TblSituacao.Value := 'Evadido'
else if TblNota.Value >= 7 then
TblSituacao.Value := 'Aprovado'
else
TblSituacao.Value := 'Retido'
end;
Campos Lookup
Para fazer um relacionamento, s vezes precisamos criar um campo de descrio, por exemplo em uma
biblioteca, na tabela de emprstimos, temos o cdigo do Livro, mas gostaramos de mostrar o Ttulo, esses
campos so chamados de campos Lookup.
Para criar um campo Lookup, siga os passos abaixo, tomando como exemplo o caso do livro no emprstimo.
24 Abra o Fields Editor do Table desejado, Emprstimos
25 Clique com o direito e escolha New Field
26 No quadro New Field, escolha as propriedades do campo como descrito em campos calculados, mas em
Field type, escolha Lookup
27 Em Key Fields escolha o campo da tabela que faz parte do relacionamento, CodLivro
28 DataSet a tabela onde est a descrio, Livros
29 Em Lookup Keys, escolha o campo de DataSet que faz parte do relacionamento, CodLivro
30 Finalmente, escolha em Result field o campo de DataSet que vai ser mostrado para o usurio, Ttulo
Essas opes correspondem a algumas propriedades do objeto TField gerado, que podem ser alteradas no Object
Inspector, KeyFields, LookupDataSet, LookupKeyFields, LookupDataSet e LookupResultField.
Quando esses campo so exibidos em um DBGrid, por padro criado um boto de lookup que mostrar os
valores da outra tabela uma lista. Para colocar esses campos em um Form, devemos usar o
DBLookupComboBox, apenas com as propriedades padro, DataSource e DataField, onde deve ser escolhido o
campo Lookup, quando voc arrastar o campo para o Form isso ser feito automaticamente.
TDataSource
Componente usado para fazer a ligao entre um DataSet e os componentes visuais.
Propriedade Descrio
AutoEdit Define se a tabela entrar em modo de edio assim que o usurio digitar novos valores nos controles
DataSet DataSet ao qual o TDataSource faz referncia
Evento Descrio
OnDataChange Ocorre quando o DataSet alterado, ao mudar de registro ou mudar os valores dos campos
OnStateChange Ocorre quando o estado do DataSet alterado
OnUpdateData Ocorre antes de uma atualizao
1Botes de Navegao Personalizados
O DBNavigator tem os principais botes necessrios para a navegao por uma tabela, contudo se voc quiser
criar seus prprios botes de navegao, o que no recomendado, no evento OnClick desses botes deve ser
chamados os mtodos de navegao, como indicado abaixo.
DtmCli.Tbl.Next;
Para controlar a habilitao dos botes de navegao use o evento OnDataChange do DataSource
correspondente como indicado abaixo.
BtnProx.Enabled := not DtmCli.Tbl.EOF;
Para criar botes de controle, como incluso e excluso, use o evento OnStateChange do DataSource como
indicado abaixo para controlar a habilitao.
BtnAlterar.Enabled := DtmCli.Tbl.State = dsBrowse;
Data Controls
Controles usados na interface com o usurio. Todos esses componentes tem uma propriedade DataSource, que
deve ter o DataSource do Table ao qual esto ligados.
TDBNavigator
O DBNavigator permite que o usurio realize operaes padro de controle de dados. Cada um dos botes do
DBNavigator chama um mtodo do Componente Table ao qual est ligado.

Podemos personalizar o DBNavigator usando as suas propriedades e eventos, mas se quisermos mudar a figura
dos botes teremos que editar diretamente o arquivo LIB\DBCTRLS.RES, na pasta do Delphi.
Propriedades Descrio
VisibleButtons Define os botes que sero visveis
Hints Hints exibidos pelos botes
ConfirmDelete Define se ser solicitado uma confirmao antes da excluso
Eventos Descrio
BeforeAction Quando um boto do Navigator pressionado, antes da ao ser executada
OnClick Quando um boto do Navigator pressionado, depois da ao ser executada
TDBGrid
Mostra os registros de uma tabela em forma de grade, cada coluna um campo e cada registro, uma linha.
Propriedades Descrio
Columns Lista do tipo TDBGridColumns, com as colunas da Grid, cada item da lista do tipo TColumn
Fields Lista de objetos TField mostrados nas colunas
Options Set com as opes da Grid, como ConfirmDelete, MultiSelect, ColumnResize
SelectedField Campo da coluna selecionada
SelectedIndex ndice da coluna selecionada
SelectedRows Lista do tipo TBookmarkList, com os registros selecionados em uma Grid com MultiSelect
TitleFont Fonte do ttulo das colunas
FixedColor Cor Fixa, usada nas colunas e indicadores
Eventos Descrio
OnCellClick Ao clicar em uma clula da Grid
OnColEnter Quando uma clula de alguma coluna da Grid recebe o foco
OnColExit Quando uma clula de alguma coluna da Grid perde o foco
OnColumnMoved Quando o usurio mover uma coluna
OnDrawDataCell Evento usado para personalizar a forma de desenhar os dados que so apresentados na Grid
OnEditButtonClick Ao clicar no boto de edio de uma clula, mostrado pela propriedade ButtonStyle da coluna
OnTitleClick Ao clicar no ttulo das colunas
TColumn
Item de uma lista TDBGridColumns, usada na propriedade Columns da Grid, objetos desse tipo representam uma
coluna da Grid. s vezes as propriedades definidas para o campo sobrepem as propriedades
Propriedades Descrio
ButtonStyle Boto mostrado ao editar as clulas da coluna
Field Objeto TField ligado coluna
FieldName Nome do campo ligado coluna
PickList TStrings com os itens da lista DropDown usada nas clulas da coluna
Title Propriedade do tipo TColumnTitle com as opes do ttulo da coluna
TDBText, TDBEdit, TDBMemo, TDBListBox, TDBComboBox, TDBImage, TDBRichEdit
Controles genricos ligados a um campo de uma tabela.
Propriedades Descrio
DataField Campo ao qual o controle est ligado
TDBCheckBox
Usado em campos que podem receber apenas dois valores, como campos lgicos.
Propriedades Descrio
ValueChecked Valor a ser armazenado quando est selecionado
ValueUnchecked Valor a ser armazenado quando no est selecionado
TDBRadioGroup
Mostra algumas opes para o preenchimento de um campo.
Propriedades Descrio
Values Valor a ser armazenado para cada boto de rdio
TDBLookupListBox, TDBLookupComboBox
Preenche um campo com dados contidos em outra tabela. Se o campo mostrado nesses componentes for um
campo Lookup, voc no precisa especificar nenhuma das propriedades abaixo, apenas DataSource e DataField.
Propriedades Descrio
ListSource DataSource que contm os valores a serem exibidos na lista
ListField Campo de ListSource que ser exibido
KeyField Campo de ListSource usado no relacionamento
Exerccios
1. Crie uma aplicao que cadastre os Clientes de uma empresa e as Compras feitas por estes Clientes,
permita incluso, alterao, excluso e consulta aos dados cadastrados. Na janela principal fica o cadastro
de Clientes, com a grade de visualizao de suas Compras, crie tambm uma Janela para localizar Clientes
por Nome.
A tabela de clientes deve ter Nome, Endereo, Bairro, Cidade, Estado, CEP e Telefone, defina tambm
ndices para melhorar a localizao de clientes por Nome. Na tabela de Compras, deseja-se saber a Data,
Produtos e Valor, assuma que cada compra tem um Produto apenas. Como foi mencionado, as compras
sero cadastradas pelo cliente atual, crie a relao Mestre/Detalhe entre Clientes e Compras.
O Form de localizao de Clientes deve permitir pesquisa Nome, da mesma forma da questo anterior.
2. Uma academia de ginstica deseja manter um controle maior sobre seus Alunos, para isso ela organizou os
clientes em turmas. Os dados de uma Turma so Nmero de alunos, Horrio da aula, Durao da aula, Data
inicial, Data final e Instrutor. Deve ser feita tambm uma tabela de instrutores para evitar a digitao
repetitiva do Nome. Os dados dos Alunos so Matrcula, Data de Matrcula, Nome, Endereo, Bairro, Cidade,
Estado, Telefone, Data de nascimento, Altura e Peso. Crie um banco de dados, normalizado, para guardar
essas informaes.
No cadastro de Turmas, o Horrio de aulas deve ser entre 7:00 e 18:00, a Durao no pode ser maior que 2
horas e a Data Final tem que ser, no mnimo 5 dias aps a Inicial. Esse cadastro deve ser ordenado primeiro
pela Data Final, em ordem decrescente e depois pelo Horrio, em ordem crescente. As turmas j encerradas
no devem ser mostradas no cadastro, mas crie um arquivo morto com as turmas j encerradas, onde os
dados no possam ser alterados. Deve ser possvel tambm procurar o Instrutor pelo Nome, usando um
ComboBox, com os registros da tabela de Instrutores.
No cadastro de Alunos, a matrcula Auto-incremental, a Data de Matrcula deve ser, obrigatoriamente, a
Data do sistema e deve ser criado um campo calculado com o peso ideal do cliente, altura menos 1,15.