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

CodCli

Bairro

CodPed

Data

Endereco

Vendedor
1

Clientes

Nome

Pedidos
1

CodCli
Tel Resid
Cidade

Tel Comer

CodProd
Descrio

Produtos

Item

CodPed
CodProd

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.
Clique em File/New/Table
Escolha o tipo da nova tabela, Paradox 7
Aparece uma janela para que voc defina a estrutura de campos, ndices e demais opes necessrias na
criao da tabela
Em Field Name, voc escolhe o nome do campo, com at 25 caracteres
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
Size o tamanho do campo, usado somente em alguns tipos de campos
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
Validity Checks
Table Lookup
Secondary Indexes
Referential Integrity
Password Security
Table Language
Dependent Tables

Descrio
Validaes para os campos, como obrigatoriedade, valor mnimo e mximo
Indica que o valor atribudo a um determinado campo tem que estar gravado em outra tabela
Cria ndices secundrios
Cria integridade referencial, geralmente utilizada em relacionamentos de 1 para N.
Permite a criao de senhas, protegendo a tabela de acesso no autorizado
Especificar o driver de lngua utilizado pela tabela, geralmente o Pdox ANSI Intl850
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
A
N
$
S
I
D
T
@
M
G
L
+

Descrio
Alfanumrico
Numrico
Monetrio
Short Integer
Long Integer
Data
Hora
Data e Hora de modificao
Memo
Grfico
Lgico
Autoincremental

Faixa

Tamanho
1-255

10 308
32767
2147483648

1-240*
1-240*
True/False
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
AliasName
Connected
DatabaseName
DataSetCount
DataSets
DriverName
InTransaction
KeepConnection
LoginPrompt
Params
TransIsolation
Mtodos
Close
CloseDataSets
Commit
Open
Rollback
StartTransaction
Eventos
OnLogin

Descrio
Nome do Alias do banco de dados, usado quando voc criar um Alias da BDE
Define se a conexo com o banco de dados est ativa
Nome do Alias local a ser usado pelos outros componentes do Delphi
Nmero de DataSets (Tabelas) abertos no banco de dados
Lista com os DataSets abertos
Driver usado para criar um Alias local, automaticamente cancela a propriedade AliasName
Define se o Database est em transao
Define se a conexo com o banco de dados ser mantida, mesmo sem DataSets abertos
Define se ser mostrado o quadro de login padro da BDE
Parmetros do banco de dados, com itens semelhantes seo Definition do Database Explorer
Nvel de isolamento da transao, define como uma transao ir enxergar outra
Descrio
Encerra a conexo com o banco de dados, todos os DataSets sero fechados
Fecha todos os DataSets abertos, mas a conexo no encerrada
Grava alteraes feitas durante a transao
Abre a conexo com o banco de dados
Anula todas as alteraes feitas durante a transao
Inicia uma transao
Descrio
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.

DB

TDatabase

TTable

DatabaseName

DatabaseName

DataSet
TDataSource

TDBEdit

DataSource

Para concluir, acompanhe abaixo os passos realizados pelo Wizard e tente voc mesmo criar seu prprio Form.
Inclua um novo DataModule
Adicione ao DataModule um Table e um DataSource
No Table Coloque em DatabaseName o nome do Alias criado pela propriedade DatabaseName do Database e
em TableName, o nome da tabela
No evento OnCreate do DataModule, chame o mtodo Open do componente Table
No DataSource coloque em DataSet o nome do componente TTable
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
Para poder acessar os dados, coloque a Unit onde est o DataModule no uses da Unit do Form
Em todos os componentes DataControls, escolha na propriedade DataSource, o componente DataSource
criado no DataModule
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
Active
BOF
CanModify
DatabaseName
EOF
Exclusive
FieldCount
FieldDefs
Fields
Filter
Filtered
IndexFieldNames
IndexName
IndexDefs
MasterFields
MasterSource
Modified
ReadOnly
RecNo
RecordCount

Descrio
Define se a tabela esta aberta ou fechada
Informa se est no incio da tabela
Define se a aplicao pode inserir, deletar ou alterar registros
Nome do banco de dados onde est a tabela, deve ser escolhido um Alias, que pode ser local
Informa se est no fim da tabela
Define se a tabela pode ser compartilhada por outro usurio
Nmero de campos da tabela
Lista com a Definio dos campos da tabela
Lista de objetos do tipo TField, que representam os campos da tabela
String com uma condio de filtragem
Define se a tabela filtrada
Nome dos campo de ndice, usados para ordenar os registros da tabela
Nome do ndice atual, vazia quando o ndice for a chave primria
Lista com a definio dos ndices
Campos usados no relacionamento com a tabela mestre
DataSource da tabela mestre em uma relao Mestre/Detalhe
Define se o registro atual foi modificado
Define se a tabela somente para leitura
Nmero do registro atual
Nmero de registros

State
TableName
TableType
Mtodo
AddIndex
Append
AppendRecord
Cancel
Close
CreateTable
Delete
DeleteIndex
DeleteTable
DisableControls
Edit
EmptyTable
EnableControls
FieldByName
FindKey
FindNearest
First
Insert
InsertRecord
IsEmpty
Last
Locate
LockTable
Lookup
MoveBy
Next
Open
Post
Prior
Refresh
RenameTable
UnlockTable
Evento
AfterCancel
AfterClose
AfterDelete
AfterEdit
AfterInsert
AfterOpen
AfterPost
AfterScroll
BeforeCancel
BeforeClose
BeforeDelete
BeforeEdit
BeforeInsert
BeforeOpen
BeforePost
BeforeScroll
OnCalcFields
OnDeleteError
OnEditError
OnFilterRecord
OnNewRecord
OnPostError

Estado da tabela
Nome da tabela
Tipo da tabela
Descrio
Cria um novo ndice, a tabela deve ser exclusiva
Entra em modo de insero e, ao gravar, o registro ser colocado no fim do arquivo
Insere um registro no final do arquivo atravs de cdigo
Cancela as alteraes feitas no registro atual
Fecha a tabela
Cria uma tabela, depende de FieldDefs e IndexDefs
Exclui o registro corrente
Exclui um ndice
Exclui a tabela
Desabilita a atualizao dos controles visuais
Permite a alterao dos campos do registro atual
Apaga todos os registro da tabela, para isso a tabela no pode esta sendo compartilhada
Habilita os controles visuais
Acessa um campo, do tipo TField, pelo nome
Procura o registro com os valores exatos aos dos parmetros nos campos do ndice atual
Procura o registro com os valores mais aproximados aos dos parmetros nos ndices
Move para o primeiro registro
Entra em modo de insero de um novo registro na posio atual
Adiciona um novo registro, j com os dados, na posio atual
Define se a tabela est vazia
Move para o ltimo registro
Procura um registro, usando ou no ndices, de acordo com a disponibilidade
Trava a tabela
Procura um registro e retorna valores dos campos deste
Move um nmero especfico de registros
Move para o prximo registro
Abre a tabela
Grava as alteraes no registro atual
Move para o primeiro registro
Atualiza a tabela com os dados j gravados
Renomeia a tabela
Destrava a tabela
Descrio
Aps do mtodo Cancel
Aps o fechamento da tabela
Aps do mtodo Delete
Aps do mtodo Edit
Aps do mtodo Insert
Aps do mtodo Open
Aps do mtodo Post
Aps mudar de registro
Antes do mtodo Cancel
Antes do fechamento da tabela
Antes do mtodo Delete
Antes do mtodo Edit
Antes do mtodo Insert
Antes do mtodo Open
Antes do mtodo Post
Antes de mudar o registro
Evento usado para calcular os valores dos campos calculados
Quando ocorre um erro ao chamar o mtodo Delete
Quando ocorre um erro ao chamar o mtodo Edit
Evento usado com filtragem varivel
Quando a tabela entra em modo de insero, no deixa Modified igual a True
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
Cancel
Delete

Insert
Append
dsInsert

dsBrowse
Post
Cancel
Delete

dsEdit
Edit

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.
No uses da Unit detalhe, Pedidos, inclua a Unit da tabela mestre, Clientes
Na Table detalhe, Pedidos, Coloque em MasterSource o DataSource da tabela mestre, Clientes
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
Alignment
AsBoolean
AsCurrency
AsDateTime
AsFloat
AsInteger
AsString
AsVariant
Calculated
CanModify
ConstraintErrorMessage
CustomConstraint
DataSet
DataSize
DataType
DefaultExpression
DisplayLabel
DisplayText
DisplayWidth
EditMask

Descrio
Alinhamento do texto do campo nos controles visuais
Valor do campo convertido para Boolean
Valor do campo convertido para Currency
Valor do campo convertido para DataTime
Valor do campo convertido para Double
Valor do campo convertido para Integer
Valor do campo convertido para string
Valor do campo convertido para Variant
Indica se o campo calculado em tempo de execuo
Indica se um campo pode ser modificado
Mensagem de erro se a condio de CustomConstraint no for satisfeita
Condio de validao do campo
DataSet onde est o campo
Tamanho do campo, em Bytes
Propriedade do tipo TFieldType, que indica o tipo do campo
Expresso com valor Default do campo para novos registros
Ttulo a ser exibido para o campo
Texto exibido nos controles visuais associados ao campo
Nmero de caracteres que deve ser usado para mostrar o campo no controles visuais
Mscara de edio do campo

FieldKind
FieldName
FieldNo
Index
IsIndexField
IsNull
KeyFields
Lookup
LookupCache
LookupDataSet
LookupKeyFields
LookupResultField
ReadOnly
Required
Size
Text
Value
Visible
Eventos
OnChange
OnSetText
OnGetText
OnValidate
Mtodo
Assign
FocusControl
Clear

Propriedade do tipo TFieldKind que indica o tipo do campo, como Calculado ou Lookup
Nome do campo na tabela
Posio fsica do campo na tabela
Posio do campo nos controles visuais
Indica se um campo vlido para ser usado como ndice
Indica se o campo est vazio
Campo chave da tabela no relacionamento com LookupDataSet, usado em campos Lookup
Indica se um campo Lookup
Define se ser usado cache para campos Lookup
DataSet onde est definido o valor do campo Lookup
Campo chave do relacionamento em LookupDataSet
Valor do campo, que ser mostrado nos controles visuais
Define se um campo somente para leitura
Define se o campo obrigatrio
Tamanho fsico do campo
Texto de edio do campo
Acesso direto ao valor do campo
Define se um campo visvel
Descrio
Chamado quando o valor do campo mudado
Chamado pelos controles visuais para atribuir o texto digitado pelo usurio ao campo
Chamado para formatar o texto de exibio do campo
Validao do valor atribudo ao campo, caso o valor no seja vlido, gere uma exceo
Descrio
Atribui um valor de um campo a outro, inclusive nulo
Seta o foco para o controle visual ligado ao campo nos Forms
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
TSmallintField
TFloatField
TCurrencyField
TBooleanField
TDateField

TBlobField
TIntegerField
TWordField
TAutoIncField
TBCDField
TDateTimeField

TTimeField
TBytesField
TVarBytesField
TGraphicField
TMemoField

Em alguns desses campos voc pode encontrar as propriedades mostradas abaixo, que no esto presentes em
TField.
Propriedades
MaxValue
MinValue
DisplayFormat
EditFormat
Currency
DisplayValues
Mtodos
LoadFromFile
SaveToFile

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

Para acessar os campo de uma tabela, existem vrias abordagens, como mostrado abaixo..
Usando o objeto TField ligado ao campo.
TblDescricao.Value := TblVendedor.Value + ' em ' + TblData.AsString;

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;

Atravs do mtodo FieldByName

Tbl.FieldByName('Descricao').Value := Tbl.FieldByName('Vendedor').Value + ' em '


+ Tbl.FieldByName('Data').AsString;

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.
Abra o Fields Editor do Table desejado, Emprstimos
Clique com o direito e escolha New Field
No quadro New Field, escolha as propriedades do campo como descrito em campos calculados, mas em
Field type, escolha Lookup
Em Key Fields escolha o campo da tabela que faz parte do relacionamento, CodLivro
DataSet a tabela onde est a descrio, Livros
Em Lookup Keys, escolha o campo de DataSet que faz parte do relacionamento, CodLivro
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
AutoEdit
DataSet
Evento
OnDataChange
OnStateChange
OnUpdateData

Descrio
Define se a tabela entrar em modo de edio assim que o usurio digitar novos valores nos controles
DataSet ao qual o TDataSource faz referncia
Descrio
Ocorre quando o DataSet alterado, ao mudar de registro ou mudar os valores dos campos
Ocorre quando o estado do DataSet alterado
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
VisibleButtons
Hints
ConfirmDelete
Eventos
BeforeAction
OnClick

Descrio
Define os botes que sero visveis
Hints exibidos pelos botes
Define se ser solicitado uma confirmao antes da excluso
Descrio
Quando um boto do Navigator pressionado, antes da ao ser executada
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
Columns
Fields
Options
SelectedField
SelectedIndex
SelectedRows
TitleFont
FixedColor
Eventos
OnCellClick
OnColEnter
OnColExit
OnColumnMoved
OnDrawDataCell
OnEditButtonClick
OnTitleClick

Descrio
Lista do tipo TDBGridColumns, com as colunas da Grid, cada item da lista do tipo TColumn
Lista de objetos TField mostrados nas colunas
Set com as opes da Grid, como ConfirmDelete, MultiSelect, ColumnResize
Campo da coluna selecionada
ndice da coluna selecionada
Lista do tipo TBookmarkList, com os registros selecionados em uma Grid com MultiSelect
Fonte do ttulo das colunas
Cor Fixa, usada nas colunas e indicadores
Descrio
Ao clicar em uma clula da Grid
Quando uma clula de alguma coluna da Grid recebe o foco
Quando uma clula de alguma coluna da Grid perde o foco
Quando o usurio mover uma coluna
Evento usado para personalizar a forma de desenhar os dados que so apresentados na Grid
Ao clicar no boto de edio de uma clula, mostrado pela propriedade ButtonStyle da coluna
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
ButtonStyle
Field
FieldName
PickList
Title

Descrio
Boto mostrado ao editar as clulas da coluna
Objeto TField ligado coluna
Nome do campo ligado coluna
TStrings com os itens da lista DropDown usada nas clulas da coluna
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
DataField

Descrio
Campo ao qual o controle est ligado

TDBCheckBox
Usado em campos que podem receber apenas dois valores, como campos lgicos.
Propriedades
ValueChecked
ValueUnchecked

Descrio
Valor a ser armazenado quando est selecionado
Valor a ser armazenado quando no est selecionado

TDBRadioGroup
Mostra algumas opes para o preenchimento de um campo.
Propriedades
Values

Descrio
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
ListSource
ListField
KeyField

Descrio
DataSource que contm os valores a serem exibidos na lista
Campo de ListSource que ser exibido
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.

Você também pode gostar