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 Bairro CodCli CodPed Data Vendedor 1 Nome Clientes N Pedidos 1 CodCli Tel Resid Tel Comer CodProd Descrio Preo Unitrio Quantidade Produtos Cidade N CodPed CodProd

Endereco

Item N

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 10 308 32767 2147483648 Tamanho 1-255

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

DataSet TDataSource

TDBEdit

DatabaseName

DatabaseName

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 State TableName 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 Estado da tabela Nome da tabela

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

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.

Alterando 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.
Insert Append dsInsert Post Cancel Delete dsBrowse Edit Post Cancel Delete dsEdit

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 FieldKind FieldName FieldNo Index IsIndexField 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 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

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

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. Atravs do mtodo FieldByName Usando a lista Fields do TTable

Tbl['Descricao'] := Tbl['Vendedor'] + ' em ' + Tbl['Data'].AsString; Tbl.FieldByName('Descricao').Value := Tbl.FieldByName('Vendedor').Value + ' em ' + Tbl.FieldByName('Data').AsString; 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

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