Sei sulla pagina 1di 61

UNIVERSIDADE DE SO PAULO Instituto de Cincias Matemticas e de Computao

ISSN - 0103-2585

3URJUDPDomR'HOSKL omR' DSRLDQGRDFRQVWUXomRGH RDFR RGH DSOLFDWLYRVGH%DVHVGH'DGRV VGH% VGH' GRV

Enzo Seraphim Renata Pontin de Mattos Fortes

Notas Didticas n0 42

So Carlos, dezembro de 1999

Programao Delphi apoiando aplicativos de Bases de Dados

ndice
1 INTRODUO ............................................................................................................................................ 4 1.1 PRINCIPAIS CARACTERSTICAS DO DELPHI.................................................................................................. 4 1.2 CARACTERSTICAS DO DELPHI CLIENT/SERVER.......................................................................................... 5 2 O AMBIENTE DELPHI .............................................................................................................................. 5 2.1 2.2 2.3 2.4 2.5 3 COMO FORMADA UMA APLICAO EM DELPHI ........................................................................................ 5 CDIGO FONTE DO ARQUIVO PROJECT(.DPR)............................................................................................. 7 CDIGO FONTE DO ARQUIVO UNIT (.PAS) .................................................................................................. 7 ARQUIVOS GERADOS PELA COMPILAO ................................................................................................... 9 AMBIENTE DE PROGRAMAO.................................................................................................................... 9

FUNDAMENTOS DE OBJECT PASCAL............................................................................................... 11 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22 3.23 CONCEITOS DE PROGRAMAO ORIENTADA A OBJETOS .......................................................................... 11 VARIVEIS ................................................................................................................................................ 11 ATRIBUTOS ............................................................................................................................................... 12 ENCAPSULAMENTO ................................................................................................................................... 12 CLASSES ................................................................................................................................................... 12 OBJETOS ................................................................................................................................................... 13 LITERAIS ................................................................................................................................................... 13 CONSTANTES ............................................................................................................................................ 13 INSTRUES.............................................................................................................................................. 13 COMENTRIOS...................................................................................................................................... 14 TIPOS DE DADOS PADRO .................................................................................................................... 14 CONVERSES DE TIPO .......................................................................................................................... 17 EXPRESSES ......................................................................................................................................... 18 OPERADORES ........................................................................................................................................ 18 ESTRUTURAS DE DECISO .................................................................................................................... 19 ESTRUTURAS DE REPETIO ................................................................................................................ 19 TIPOS DEFINIDOS PELO USURIO.......................................................................................................... 20 PROCEDIMENTOS, FUNES E MTODOS.............................................................................................. 22 WITH .................................................................................................................................................... 23 SELF ..................................................................................................................................................... 23 CRIANDO E DESTRUINDO OBJETOS ...................................................................................................... 23 RTTI .................................................................................................................................................... 24 EXCEES ............................................................................................................................................ 24

BIBLIOTECA DE CLASSES.................................................................................................................... 28 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 NOMENCLATURA ...................................................................................................................................... 28 PROPRIEDADES ......................................................................................................................................... 28 EVENTOS................................................................................................................................................... 29 MTODOS ................................................................................................................................................. 30 JANELAS ................................................................................................................................................... 30 COMPONENTES PADRO ........................................................................................................................... 31 CAIXAS DE DILOGO ................................................................................................................................ 35 MENUS...................................................................................................................................................... 35 CLASSES NO VISUAIS ............................................................................................................................. 36

BANCOS DE DADOS ................................................................................................................................ 38 5.1 5.2 5.3 5.4 5.5 CONCEITOS IMPORTANTES ........................................................................................................................ 38 BORLAND DATABASE ENGINE .................................................................................................................. 38 ARQUITETURA DE ACESSO ........................................................................................................................ 38 DATA ACCESS ........................................................................................................................................... 39 DATA CONTROLS ...................................................................................................................................... 50

RELATRIOS ........................................................................................................................................... 54

Programao Delphi apoiando aplicativos de Bases de Dados

6.1 6.2 6.3 6.4 7

IMPRESSO DE TEXTO............................................................................................................................... 54 IMPRESSO GRFICA ................................................................................................................................ 54 IMPRESSO COM O REPORTSMITH ............................................................................................................ 55 IMPRESSO COM O QUICKREPORT ............................................................................................................ 55

CONCLUSO ............................................................................................................................................ 58

Programao Delphi apoiando aplicativos de Bases de Dados

INTRODUO

A disciplina de Laboratrio de Base de Dados ministrada aos alunos de cursos de Computao visa proporcionar o desenvolvimento de aplicaes prticas utilizando sistemas de gerenciamento de bases de dados relacionais e ferramentas de apoio. Alm disso, como disciplina optativa, ela proporciona a consolidao da teoria apresentada na disciplina de Banco de Dados que seu pr-requisito. Para tanto, aulas expositivas seguidas de demonstrao prtica em laboratrio tm sido adotadas como metodologia do ensino. Os exerccios so ento elaborados em aulas de laboratrio assistidas. Nesse contexto, este conjunto de notas didticas se destina a viabilizar um suporte para a utilizao de Delphi como ferramenta de apoio para as prticas necessrias de disciplinas que em seu contedo programtico, contam com o desenvolvimento de aplicativos de Bases de Dados tendo por front-end a programao em Delphi. Este material foi em grande parte coletado de informaes disponveis na World-Wide Web. Desde que a primeira verso do Delphi foi lanada, em 1995, tem se mostrado muito atrativo para o desenvolvimento em ambiente operacional Windows. Numa relao com outros ambientes de programao, podemos dizer que o Delphi possui muitos dos recursos poderosos do C++ e a facilidade do Visual Basic. A principal vantagem do Delphi est na linguagem usada, Object Pascal, que uma evoluo do Pascal padro. O Pascal surgiu no final dos anos 60 e, at hoje, usada como uma das primeiras linguagens de programao para estudantes de computao. Em 1984, a Borland lanou o Turbo Pascal, que se firmou como um bom compilador de Pascal para o mercado e, a partir de ento, passou a incluir novos recursos nesta linguagem, como Units e Objetos, at a ascenso do Windows, quando foi lanado o Turbo Pascal for Windows. Depois surgiu o Borland Pascal, cuja linguagem considerada a primeira verso da Object Pascal. Na sua verso atual, usada pelo Delphi, a Object Pascal uma linguagem slida e respeitada, sem perder sua peculiar facilidade. No Delphi, a criao de aplicativos comea com a montagem de componentes em janelas, como se fosse um programa grfico, o usurio tambm pode utilizar de componentes desenvolvidos por terceiros ou criar seus prprios componentes. O Delphi vem com todas as ferramentas necessrias para a criao de bancos de dados dBase e Paradox, alm de uma verso do Interbase, permitindo a criao de aplicativos com banco de dados sem a necessidade de aquisio de outro programa. O Delphi tambm tem acesso a bases de dados como Foxpro, Access, Informix, SYBASE, Oracle, SQL Server e DB2, alm de qualquer outro banco de dados para Windows compatvel com ODBC. Atualmente, podem ser encontradas as seguintes verses de Delphi: S Delphi Standard para estudantes, sem classes para armazenamento de estruturas de dados. S Delphi Professional com classes para armazenamento de estruturas de dados, mas sem suporte a arquitetura cliente/servidor. S Delphi Client/Server Suite verso completa com fontes dos componentes. 1.1 Principais Caractersticas do Delphi Construtor Visual de Interface com o Usurio - o IDE (Interface Development Environment) permite criar visualmente aplicaes Client/Server de forma rpida atravs da seleo de componentes na paleta. Arquitetura Baseada em Componentes - os componentes asseguram que as aplicaes Delphi sejam robustas, reutilizveis e de fcil manuteno. Com facilidade de criao de componentes nativos, alm de controles ActiveX, inclusive com disponibilidade do cdigo fonte dos componentes padro Compilador de Cdigo Nativo de Alta Performance - compilador/otimizador de cdigo mais rpido do mercado, gerando executveis rpidos e puros, sem run-time 4

Programao Delphi apoiando aplicativos de Bases de Dados

Tow-Way Tools - a capacidade de alternar entre um form e seu cdigo permite aos desenvolvedores trabalhar tanto na edio de texto como no modo de design visual atravs de total sincronizao do cdigo fonte com a representao visual. Biblioteca de Componentes Visuais - a biblioteca de componentes visuais (VCL-Visual Component Library) consiste de objetos reutilizveis incluindo objetos padro de interface com o usurio, gerenciamento de dados, grficos e multimidia, gerenciamento de arquivos e quadros de dialogo padro. A Client/Server edition inclui o cdigo fonte do Visual Component Library. Arquitetura Aberta - a arquitetura do IDE permite adicionar componentes e ferramentas personalizadas e de terceiros. Linguagem Orientada a Objetos - o Delphi utiliza o Object Pascal, que oferece a facilidade de programao em 4GL de alto nvel com a performance e poderio de um 3GL. Fluxo de programao baseado em eventos. Suporte a manipulao de excees, que permite criar aplicaes mais robustas e com maior segurana. Suporte Tecnologia do Windows - o Delphi compatvel com a tendncia da tecnologia Windows, incluindo suporte a OLE 2.0,DDE, DCOM, VBXs e ODBC. Depurador Grfico - o Debugger permite encontrar e eliminar "bugs" em seu cdigo. Edio Estilo Brief - o Editor permite a utilizao de um conjunto de smbolos para expresses. Consulte Brief Regular Expressions no Help on-line. Ambiente Personalizvel - a opo de menu Environment Options permite personalizar seu ambiente para o mximo de produtividade. Object Browser - o Object Browser permite a visualizao da hierarquia dos objetos na visual component library. Gerenciador de Projetos - o Project Manager oferece uma visualizao de todos os forms e units de um determinado projeto e oferece um mecanismo conveniente para gerenciar projetos. Experts - Uma variedade de Experts o guia atravs do desenvolvimento de tipos padres de forms. Por exemplo, o Database form expert auxilia-o na construo de forms que exibam dados em bancos de dados locais ou remotos. Gerador de Relatrios - o ReportSmith oferece a mais avanada ferramenta de gerao de relatrios para desenvolvedores que precisem criar relatrios que acessem grandes volumes de dados, com utilizao de componentes nativos. Caractersticas do Delphi Client/Server

1.2

O Delphi Client/Server Edition inclui todas as caractersticas do Delphi Professional e as seguintes caractersticas especficas ao ambiente Client/ Server: Conectividade de Alta Performance - os SQL Links oferecem acesso de alta performance aos drives nativos, conectando com bancos de dados populares, incluindo Oracle, Sybase,Informix, e InterBase. Suporte a Team Development - Intersolv PVCS permite que grupos de desenvolvedores trabalhem juntos com cdigos fonte integrados, check-in, check-out e gerenciamento de controle de verso. Construtor Visual de Query - o Visual Query Builder oferece uma ferramenta visual para criar facilmente queries sofisticadas e gerar automaticamente o cdigo SQL correspondente. Objetos Distribudos - capacidade de criao de aplicaes multi-tier, com objetos distribudos com Corba.

2 2.1

O AMBIENTE Delphi Como formada uma Aplicao em Delphi


5

Programao Delphi apoiando aplicativos de Bases de Dados

Quando o desenvolvedor abre um projeto no Delphi, j lhe mostrada uma UNIT com vrias linhas de cdigo. Este texto tem como objetivo explicar um pouco da estrutura que ele usa. Um projeto Delphi tem, inicialmente, duas divises: uma UNIT, que associada a um Form, e outra Project, que engloba todos os FORM e UNITs da aplicao. Em Delphi temos: o Project, os Forms e as Units. Para todo Form temos pelo menos uma UNIT (Cdigo do Form), mas temos UNITs sem Form (cdigos de procedures, funes, etc). A figura a seguir ilustra a formao de uma aplicao Delphi e o Quadro 1 lista as extenses dos arquivos gerados no desenvolvimento de aplicativos em Delphi.
TESTE

.DPR

.EXE

FORM 1

FORM 2

FORM N

.DCU

.DCU

.DCU

FORM 1

FORM 2

FORM N

.DFM .PAS

UNIT 1

.DFM .PAS

UNIT 2

.DFM .PAS

UNIT N

ROTINAS

.PAS

Extenso Arquivo .DPR

Quadro 1. Arquivos Gerados no desenvolvimento em Delphi Definio Funo


Cdigo fonte em Pascal do arquivo principal do projeto. Lista todos os formulrios e units no projeto, e contm cdigo de inicializao da aplicao. Criado quando o projeto salvo. Cdigo fonte da Unit (Object Um arquivo .PAS gerado por cada formulrio Pascal) que o projeto contm. Seu projeto pode conter um ou mais arquivos .PAS associados com algum formulrio. Contem todas as declaraes e procedimentos incluindo eventos de um formulrio. Arquivo grfico do Arquivo binrio que contm as propriedades do formulrio desenho de um formulrio contido em um projeto. Um .DFM gerado em companhia de um arquivo .PAS para cada formulrio do projeto. Arquivo de opes do Arquivo texto que contm a situao corrente das projeto opes do projeto. Gerado com o primeiro salvamento e atualizado em subseqentes alteraes feitas para as opes do projeto. Arquivo de Recursos do Arquivo binrio que contm o cone, mensagens Compilador da aplicao e outros recursos usados pelo projeto. Arquivo do Projeto

.PAS

.DFM

.OPT

.RES

Programao Delphi apoiando aplicativos de Bases de Dados

.~DP .~PA .~DF .DSK

Arquivo de Backup do Projeto Arquivo de Backup da Unit Backup do Arquivo grfico do formulrio Situao da rea de Trabalho

Gerado quando o projeto salvo pela segunda vez. Se um .PAS alterado, este arquivo gerado. Se voc abrir um .DFM no editor de cdigo e fizer alguma alterao, este arquivo gerando quando voc salva o arquivo. Este arquivo armazena informaes sobre a situao da rea de trabalho especifica para o projeto em opes de ambiente (Options Environment).

Obs.: .~DF, .~PA , .~DP so arquivos de backup( Menu Options, Enviroment, Guia Editor Display, Caixa de Grupo Display and file options, opo Create Backup Files, desativa o seu salvamento). Devido a grande quantidade de arquivos de uma aplicao, cada projeto deve ser montado em um diretrio especfico.

2.2

Cdigo fonte do arquivo Project(.DPR)

Neste arquivo est descrito o cdigo de criao da aplicao e de seus formulrios. O arquivo Project tem apenas uma seo. Esta seo formada pelo seguinte cdigo: PROGRAM - Define o Projeto; USES - Clusula que inicia uma lista de outras unidades. Forms = a unidade do Delphi que define a forma e os componentes do aplicativo In = A clausula indica ao compilador onde encontrar o arquivo Unit. Unit1 = A unidade que voc criou {$R *.RES} - Diretiva compiladora que inclui o arquivo de recursos. Quando se abre um projeto novo, o Project possuir o seguinte contedo:
program Project1; uses Forms, Unit1 in 'UNIT1.PAS' {Form1}; {$R *.RES} begin Application.CreateForm(TForm1, Form1); Application.Run; end.

2.3

Cdigo fonte do arquivo Unit (.PAS)

Nesta diviso so escritos os cdigos dos seus respectivos forms (Unit1 = Form1). Assim, so definidos os cdigos de cada procedimento dos componentes que voc colocar no Form. Seo Unit - declara o nome da UNIT. Seo Uses - contm as UNITS acessadas por este arquivo. Seo Interface - nesta seo esto as declaraes de constantes, tipos de variveis, funes e procedures gerais da Unit/Form. As declaraes desta seo so visveis por qualquer Unit. Esta seo formada pelo seguinte cdigo: INTERFACE - palavra que inicia a seo; USES - clusula que inicia uma lista de outras unidades compiladas (units) em que se basea: SysUtils = utilitrios do sistema (strings, data/hora, gerar arquivos) 7

Programao Delphi apoiando aplicativos de Bases de Dados

WinProcs = acesso a GDI, USER e KERNEL do Windows Wintypes= tipos de dados e valores constantes Messages=constantes com os nmeros das mensagens do Windows e tipos de dados das Mensagens Classes=elementos de baixo nvel do sistema de componentes Graphics=elementos grficos Controls=elementos de nvel mdio do sistema de componentes Forms=componentes de forma e componentes invisveis de aplicativos Dialogs=componentes de dilogo comuns Seo Type - declara os tipos definidos pelo usurio. Subsees: Private, declaraes privativas da Unit. Public declaraes publicas da Unit. Seo Var - declara as variveis privadas utilizadas. Seo Implementation - contm os corpos (cdigos que implementam) das funes e procedures declaradas nas sees Interface e Type. Nesta seo tambm esto definidos todos os procedimentos dos componentes que esto includos no Form. As declaraes desta seo so visveis apenas por ela mesma. Esta seo formada pelo seguinte cdigo: {$R*.DFM} - Diretiva compiladora que inclui toda a interface, propriedades da forma e componentes do arquivo *.DFM {$S+} - Diretiva compiladora que ativa verificao de pilha. Seo uses adicional - serve para declarar Units que ativam esta. Inicialization - nesta seo, que opcional, pode ser definido um cdigo para proceder as tarefas de inicializao da Unit quando o programa comea. Ela consiste na palavra reservada inicialization seguida por uma ou mais declaraes para serem executadas em ordem. Quando se abre um projeto novo, a Unit possuir o seguinte contedo:

unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {Uses Adicional} {Initialization} end.

Programao Delphi apoiando aplicativos de Bases de Dados

2.4

Arquivos Gerados pela Compilao


Definio
Arquivo compilado executvel Cdigo objeto da Unit

Extenso Arquivo .EXE

Funo
Este um arquivo executvel distribuivel de sua aplicao. Este arquivo incorpora todos os arquivos .DCU gerados quando sua aplicao compilada. O Arquivo .DCU no necessrio distribuir em sua aplicao. A compilao cria um arquivo .DCU para cada .PAS no projeto.

.DCU

Obs.: Estes arquivos podem ser apagados para economizar espao em disco.

2.5

Ambiente de Programao
Janela Principal - a janela principal do Delphi composta pela barra de menus, barra de ferramentas e paleta de componentes. Para personalizar a barra de ferramentas, basta clicar em Properties no menu de contexto. Na paleta de componentes esto os controles usados nas aplicaes, agrupados em guias por categorias. Object Inspector - no Object Inspector podemos manipular, em tempo de projeto, as propriedades e eventos dos componentes. Voc tambm pode selecionar um componente usando o Seletor de Objetos, no topo do Object Inspector. Propriedades - so as caractersticas de um componente. Para mudar uma propriedade, selecione o componente no Form Designer ou no Object Selector, localize a propriedade, na guia Properties e mude o valor na coluna direita. A edio de propriedades pode ser simples, por lista suspensa, caixa de dialogo ou com propriedades aninhadas. Eventos - numa definio inicial, eventos podem ser vistos como chamadas a mtodos em resposta a determinadas mensagens do Windows. Para criar um mtodo para um evento, selecione o componente e clique duas vezes na coluna direita do evento na guia Events do Object Inspector, o Delphi faz todas as declaraes necessrias e mostra o mtodo pronto para ser programado no Editor de Cdigo. Para que um evento chame um mtodo j definido, em vez de clicar duas vezes na coluna direita do evento, voc deve usar a lista suspensa. Form Designer - o Form Designer onde so desenhados os Forms das aplicaes, com a insero de componentes. No menu de contexto do Form, voc pode clicar em View as Text para editar a descrio textual do Form e de seus componentes no Editor de Cdigo, essas informaes so gravadas em um arquivo binrio com a extenso DFM, para voltar ao modo de exibio normal, escolha View as Form no menu de contexto do Editor de Cdigo. Manipulando Componentes S Incluir: Selecionar o componente na paleta e clicar no Form Designer. S Redimensionar: Clicar no componente e arrastar as alas de borda. Podemos usar SHIFT+SETAS para redimensionar o componente fora da grade de alinhamento do Form. S Mover: Arrastar o componente. Podem ser usadas tambm operaes de recortar, copiar e colar, alm de CTRL+SETAS para mover o componente para fora da grade de alinhamento do Form. S Selecionar: Segurar SHIFT para selecionar vrios componentes individuais e CTRL para escolher uma rea retangular do Form e selecionar todos os componentes nesta rea. S Alinhamento: Para alinhar componentes selecione-os e escolha View / Alignment Palette. S Menu de Contexto: Bring To Front / Send To Back, para trazer o componente para frente ou enviar para trs, Tab Order para mudar a ordem de tabulao, alm de Align To Grid, para alinhar os componentes selecionados Grade do Form Designer. Editor de Cdigo - para escrever o cdigo, usamos o Editor de Cdigo do Delphi. Para cada Form criado um cdigo, que gravado em arquivos chamados Units. Nesses arquivos definida a classe do Form e seus mtodos de eventos. Para alternar entre o Form e sua Unit podemos clicar

Programao Delphi apoiando aplicativos de Bases de Dados

em Toggle Form/Unit no menu View, ou no boto corresponde da Barra de Ferrramentas. Para cada Form aberto criado um Form Designer e uma nova guia no Editor de Cdigo. Configurao do Ambiente - grande parte das opes de configurao do ambiente podem ser acessadas atravs do item Environment Options do menu Tools. A maioria das opes desse dilogo so bastante claras e atravs delas podemos definir, desde as opes do Form Designer, at o Editor de Cdigo e o caminho das Livrarias. No menu Tools, podemos escolher tambm Configure Tools, para permitir abrir aplicaes externas a partir do ambiente do Delphi, como o Image Editor e o Database Desktop. Project Manager - para ajudar no gerenciamento de projetos, podemos usar o Project Manager pelo menu View. O Project Manager lista as Units, os Forms existentes nessas Units e o path, se a Unit no estiver na pasta do projeto. Atravs dos botes do Project Manager voc pode adicionar, excluir e visualizar Units e Forms que compem o projeto. Project Options - atravs do item Options, do menu Project, podemos escolher diversos aspectos de um projeto. Forms - nessa pgina, podemos definir o Form principal da aplicao e a os Forms que sero criados automaticamente. Se um Form no for criado automaticamente, voc ter que instanciar esse Form explicitamente. Application - nessa pgina podemos definir o ttulo, o arquivo help e o cone da aplicao. Compiler - usamos essa pgina para definir as opes de compilao, para o projeto atual. Essas opes iro interferir diretamente no executvel gerado. Linker - essa pgina muito pouco usada, mas somente atravs dela podem modificar a memria exigida por uma aplicao. Directories/Conditionals - pode-se especificar pastas de sada para os arquivos gerados na compilao do projeto e opes de compilao condicional. Version Information - informaes da verso do executvel. Packages - Nesta pgina voc pode especificar parte do cdigo para ser includo em Packages, fora do executvel, permitindo compartilhamento de componentes entre vrias aplicaes Delphi. Gerenciamento de Projetos - segue uma descrio das mais importantes opes de menu para o gerenciamento de projetos, algumas dessas opes tem um boto correspondente na barra de ferramentas. File Abre um dilogo com novos itens que podem ser adicionados ao projeto New Abrir projetos, pode abrir tambm Units, Forms e texto no editor de cdigo Open Salva o arquivo aberto no editor de cdigo Save Salva o projeto com outro nome ou local Save Project As Faz com que a Unit atual possa usar outra Unit do projeto Use Unit Adiciona uma Unit em disco ao projeto Add to Project Remove from Remove uma Unit do projeto Project View Mostra o gerenciador de projeto Project Manager Mostra o cdigo do projeto Project Source Mostra o Object Inspector Object Inspector Alterna entre o Form e a Unit Toggle Form/Unit Mostra o cdigo fonte de uma Unit ou do Projeto a partir de uma lista Units Seleciona um Form a partir de uma lista Forms Project Compila o projeto Compile Opes do projeto, como cone do executvel, nome da aplicao e opes de compilao Options Run Compila e executa o projeto Run 10

Programao Delphi apoiando aplicativos de Bases de Dados

Ajuda - o sistema de ajuda do Delphi a referncia mais completa, seguida pelos manuais do usurio cedidos com o sistema. Se quiser ajuda sobre um componente, selecione-o e aperte F1, o mesmo pode ser feito com propriedades e eventos, no Object Inpector e comandos, no editor de cdigo.

3 3.1

FUNDAMENTOS DE Object Pascal Conceitos de Programao Orientada a Objetos

Antes de partir para a linguagem propriamente dita, devemos considerar, de forma prtica, alguns conceitos bsicos de Programao Orientada a Objetos. Classe: definio de tipo dos objetos, modelo de objeto. Objeto: instncia de classe, varivel cujo tipo uma classe. Atributos: variveis de instncia que so os dados de um objeto. Mtodos: funes e procedimentos de um objeto. Propriedades: apelido usado para evitar o acesso direto aos atributos de um objeto, onde podemos especificar mtodos que sero usados para ler e atribuir seus valores a esses atributos. Mensagens: chamada de mtodos, leitura e atribuio de propriedades. Encapsulamento: conjunto de tcnicas usadas para limitar o acesso aos atributos e mtodos internos de um objeto. Herana: possibilidade de criar uma classe descendente de outra, aproveitando seus mtodos, atributos e propriedades. Ancestral: super classe ou classe de base, a partir da qual outras classes podem ser criadas. Descendente: subclasse. Hierarquia de Classes: conjunto de classes ancestrais e descendentes, geralmente representadas em uma rvore hierrquica. Polimorfismo: capacidade de redefinir mtodos e propriedades de uma classe em seus descendentes.

3.2

Variveis

No Delphi, toda varivel tem que ser declarada antes de ser utilizada. As declaraes podem ser feitas aps a palavra reservada var, onde so indicados o nome e o tipo da varivel. Os nomes de variveis no podem ter acentos, espaos ou caracteres especiais como &, $ ou % e o primeiro caractere de um nome de varivel tem que ser uma letra ou um sublinhado. O Delphi ignora o caso das letras. Variveis Globais As variveis abaixo so globais, declaradas da Interface da Unit. Podem ser acessadas por qualquer Unit usuria.
var I: Integer; Usuario: string; A, B, Soma: Double; Ok: Boolean;

Variveis Locais As variveis abaixo so locais ao mtodo, ou seja, elas s existem dentro do mtodo, no podem ser acessadas de fora, mesmo que seja na mesma Unit. Na verdade essas variveis so criadas quando o mtodo chamado e destrudo quando ele encerrado, seu valor no persistente.

11

Programao Delphi apoiando aplicativos de Bases de Dados procedure TFrmExemplo.BtnTrocarClick(Sender: TObject); var Aux: string; begin Aux := EdtA.Text; EdtA.Text := EdtB.Text; EdtB.Text := Aux; end;

3.3

Atributos

Os atributos so variveis de instncia. Para declarar um atributo em uma classe basta definir o identificador e o tipo do atributo na declarao da classe, feita na seo type da Interface da Unit, como abaixo.
type TFrmSomar = class(TForm) private { Private declarations } A, B: Double; public { Public declarations } Soma: Double; end;

3.4

Encapsulamento

Os principais nveis de visibilidade dos atributos e mtodos de uma classe so mostrados abaixo.
Nvel

Private Public Protected Published

Visibilidade Os itens declarados nesse nvel s podem ser acessados na mesma unit. Nesse nvel, qualquer unit usuria poder acessar o item. Os itens s podero ser acessados em outra unit se for em uma classe descendente o nvel default, igual ao Public, mas define propriedades e eventos usados em tempo de projeto.

3.5

Classes

Classes so tipos de objetos, uma classe declarada na clusula type da seo interface e os mtodos so definidos na seo implementation. Examine o cdigo de um Form para identificar os elementos de sua classe.
interface type TFrmSomar = class(TForm) EdtA: TEdit; EdtB: TEdit; BtnSoma: TButton; procedure BtnSomaClick(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation procedure TFrmSoma.BtnSomaClick(Sender: TObject); begin ShowMessage(EdtA.Text + EditB.Text); end;

12

Programao Delphi apoiando aplicativos de Bases de Dados

3.6

Objetos

Um Objeto tratado como uma varivel cujo tipo uma classe. A declarao de objetos igual declarao de uma varivel simples, tendo no lugar do tipo a classe do objeto.
var FrmSomar: TFrmSomar;

3.7

Literais

Valores literais so valores usados em atribuies e expresses. Cada tipo tem uma sintaxe diferente.
Tipo

Inteiro Inteiro Hexadecimal Real Caractere String

Definio Seqncia de dgitos decimais (0 a 9), sinalizados ou no Seqncia de dgitos hexadecimais (0 a F), precedidos por um sifro ($) Igual ao tipo Inteiro, mas pode usar separador decimal e notao cientfica Letra entre apstrofos ou o caracter # seguido de um nmero inteiro entre 0 e 255 (ASCII) Seqncia de caracteres delimitados por apstrofos

3.8

Constantes

So declaradas na seo const, podem ser usadas como variveis, mas no podem ser alteradas. Geralmente o nome das constantes escrito em letras maisculas e na declarao dessas constantes no indicado o tipo. const
G = 3.94851265E-19; NUM_CHARS = '0123456789'; CR = #13; SPACE = ' '; MAX_VALUE = $FFFFFFFF;

Constantes Tipadas Na verdade, constantes tipadas so variveis inicializadas com valor persistente, que podem ser alteradas normalmente, como qualquer varivel. A nica diferena de sintaxe entre constantes tipadas e simples que o tipo da constante indicado explicitamente na declarao. Se uma constante tipada for declarada localmente, ela no ser destruda quando o mtodo for encerrado. Para diferenciar das constantes normais, costuma-se declarar estas com letras de caso varivel, como abaixo. const
Cont: Integer = 1; Peso: Double = 50.5; Empresa: string = 'SENAC';

3.9

Instrues

Os programas so compostos por instrues, que so linhas de cdigo executvel. Exemplos de instrues simples so atribuies, mensagens entre objetos, chamadas de procedimentos, funes e mtodos, como mostradas abaixo. As instrues podem ser divididas em vrias linhas, o que indica o fim de uma instruo o ponto e vrgula no final. Quando uma instruo quebrada, costuma-se dar dois espaos antes das prximas linhas, para melhorar a leitura do cdigo.
Caption := 'Gabba Gabba Hey!'; Form2.ShowModal; Application.MessageBox('Voc executou uma operao ilegal, o programa ser finalizado.', 'Falha geral', MB_ICONERROR);

13

Programao Delphi apoiando aplicativos de Bases de Dados

possvel se usar vrias instrues agrupadas em uma instruo composta, como se fosse uma s instruo. Uma instruo composta delimitada pelas palavras reservadas begin e end. Toda instruo, simples ou composta, terminada com um ponto-e-vrgula.
if CheckBox1.Checked then begin ShowMessage('O CheckBox ser desmarcado.'); CheckBox1.Checked := False; end;

Estilo de Codificao As instrues e todo o cdigo de uma Unit devem ser distribudos para facilitar o mximo a leitura. Para isso, podemos usar a indentao, geralmente de dois espaos para indicar os nveis de cdigo. Procure criar um estilo prprio, que melhor se molde sua realidade. Se for desenvolver em grupo, melhor que todos usem o mesmo estilo para evitar confuses.

3.10

Comentrios
(* Comentrio do Pascal Padro *) { Comentrio do Turbo Pascal } // Comentrio de linha do C++

Existem trs estilos de comentrio no Delphi, como mostrado abaixo.

Cuidado com as diretivas de compilao, pois elas so delimitadas por chaves e podem ser confundidas com comentrios. A diretiva de compilao mostrada abaixo includa em todas as Units de Forms.
{$R*.DFM}

3.11

Tipos de Dados Padro

O Delphi trata vrios tipos de dados padro, segue uma descrio sucinta desses tipos. Tipos Inteiros So tipos numricos exatos, sem casas decimais. O tipo Integer o tipo inteiro padro.
Tipo Tamanho em Bytes Valor Mnimo Valor Mximo

ShortInt SmallInt Longint Byte Word Integer Cardinal

1 2 4 1 2 4 4

-128 -32768 -2147483648 0 0 -2147483648 0

127 32767 2147483647 255 65535 2147483647 2147483647

Tipos Reais So tipos numricos com casas decimais. O tipo Double o tipo real padro.
Tipo Tamanho em Bytes Valor Mnimo Valor Mximo Dgitos Significativos

Real Single Double Extended Comp Currency

6 4 8 10 8 8

10-39 10-45 10-324 10-4932 -1018 -1012

1038 1038 10308 104932 1018 1012

11-12 7-8 15-16 19-20 19-20 19-20

Tipos Texto Os tipos texto podem operar com caracteres simples ou grupos de caracteres. O tipo texto padro o tipo string. 14

Programao Delphi apoiando aplicativos de Bases de Dados Tipo Descrio Um nico caractere ASCII Texto alocado dinamicamente, pode ser limitado a 255 caracteres conforme configurao String terminada em nulo (#0), usada geralmente nas funes da API do Windows

Char String PChar

O operador + pode ser usado para concatenar strings e voc pode usar uma varivel do tipo string como uma lista de caracteres.
ShowMessage('5 letra do ttulo da janela: ' + Caption[5]); Label1.Text := '2 letra do Edit: ' + Edit1.Text[2];

Existem vrias funes de manipulao de strings, veja algumas das mais importantes mostradas abaixo.
Funo

AnsiCompareText AnsiLowerCase AnsiUpperCase Copy Delete Insert Length Pos Trim TrimLeft TrimRight Format

Descrio Compara 2 strings sem sensitividade de maisculas/minsculas Converte todas as letras de uma string para minsculas Converte todas as letras de uma string para maisculas Retorna parte de uma string Apaga parte de uma string Insere uma string em outra Nmero de caracteres de uma string Posio de uma string em outra Remove todos os espaos de uma string Remove os espaos esquerda de uma string Remove os espaos direita de uma string Formata uma string com uma srie de argumentos de vrios tipos

Por exemplo, para comparar o texto de dois Edits, poderamos usar a funo AnsiCompareText.
if AnsiCompareText(EdtA.Text, EdtB.Text) = 0 then ShowMessage('O texto dos dois Edits so iguais.');

A funo Format especialmente til na formatao de strings, veja alguns exemplos.


ShowMessage(Format('O nmero %d a parte inteira do nmero %f.', [10, 10.5])); ShowMessage(Format('Este texto%sfoi formatado%susando o caractere #%d.', [#13, #13, 13])); ShowMessage(Format('O preo do livro %s %m.', ['Como Programar em Delphi', 50.7]));

Um detalhe que deve ser observado que as propriedades dos objetos no podem ser usadas como variveis em funes. Veja a declarao do procedimento Delete no help.
procedure Delete(var S: string; Index, Count:Integer);

Digamos que voc deseje apagar as 5 primeiras letras de um Edit, como a string do Delete varivel, no poderia usar o cdigo abaixo.
Delete(Edit1.Text, 1, 5);

Para voc poder fazer a operao desejada, teria que usar uma varivel como varivel auxiliar.
var S: string; begin S := Edit1.Text; Delete(S, 1, 5); Edit1.Text := S; end;

Tipos Ordinais
Tipos ordinais so tipos que tem uma seqncia incremental, ou seja, voc sempre pode dizer qual o prximo valor ou qual o valor anterior a um determinado valor desses tipos. So tipos ordinais o Char, 15

Programao Delphi apoiando aplicativos de Bases de Dados

os tipos inteiros, o Boolean e os tipos enumerados. Algumas rotinas para ordinais so mostradas abaixo.
Funo Descrio

Dec Inc Odd Pred Succ Ord Low High

Decrementa varivel ordinal Incrementa varivel ordinal Testa se um ordinal mpar Predecessor do ordinal Sucessor do ordinal Ordem de um valor na faixa de valores de um tipo ordinal Valor mais baixo na faixa de valores Valor mais alto na faixa de valores

Por exemplo, use o cdigo abaixo no evento OnKeyPress de um Edit e veja o resultado. Inc(Key);

Boolean
Variveis do tipo Boolean podem receber os valores lgicos True ou False, verdadeiro ou falso. Uma varivel Boolean ocupa 1 byte de memria.

TDateTime
O tipo TDateTime guarda data e hora em uma estrutura interna igual ao tipo Double, onde a parte inteira o nmero de dias desde 31/12/1899 e a parte decimal guarda a hora, minuto, segundo e milissegundo. As datas podem ser somadas ou subtradas normalmente. Existem vrias rotinas de manipulao de datas e horas, usadas com o tipo TDateTime, veja algumas a seguir.
Rotina Descrio

Date

Retorna a data do sistema

Now Time
DayOfWeek

Retorna a data e hora do sistema Retorna a hora do sistema


Retorna o dia da semana de uma data especificada

DecodeDate DecodeTime EncodeDate EncodeTime

Decodifica um valor TDateTime em Words de dia, ms e ano Decodifica um valor TDateTime em Words de hora, minuto, segundo e milissegundos Retorna um TDateTime a partir de Words de dia, ms e ano Retorna um TDateTime a partir de Words de hora, minuto, segundo e milissegundos

No help de cada uma das funes acima voc vai encontrar alguns exemplos, veja os colocados abaixo.
if DayOfWeek(Date) = 1 then ShowMessage('Hoje Domingo, p de cachimbo!') else ShowMessage('Hoje no Domingo, p de cachimbo!'); var A, M, D: Word; begin DecodeDate(Date, A, M, D); ShowMessage(Format('Dia %.2d do ms %.2d de %d.', [D, M, A])); end;

16

Programao Delphi apoiando aplicativos de Bases de Dados

Variant
Tipo genrico, que pode atribuir e receber valores de qualquer outro tipo. Evite usar variveis do tipo Variant, pois o uso dessas variveis pode prejudicar o desempenho do programa, alm de diminuir a legibilidade do cdigo fonte e a integridade do executvel, veja o trecho de cdigo abaixo e note como esse tipo de varivel tem um comportamento estranho.
var V1, V2, V3: Variant; begin V1 := True; V2 := 1234.5678; V3 := Date; ShowMessage(V1 + V2 + V3); end;

3.12

Converses de Tipo

Freqentemente voc vai precisar converter um tipo de dado em outro, como um nmero em uma string. Para essas converses voc pode usar duas tcnicas, o TypeCasting e as rotinas de converso de tipos.

TypeCasting - uma converso direta de tipo, usando o identificador do tipo destino como se
fosse uma funo. Como o Delphi no faz nenhuma verificao se a converso vlida, voc deve tomar um certo cuidado ao usar um TypeCast para no criar programas instveis.
var I: Integer; C: Char; B: Boolean; begin I := Integer('A'); C := Char(48); B := Boolean(0); Application.MessageBox(PChar('Linguagem de Programao' + #13 + 'Delphi 3'), 'SENAC', MB_ICONEXCLAMATION); end;

Rotinas de Converso
As principais rotinas de converso esto listadas na tabela abaixo. Caso voc tente usar uma dessas rotinas em uma converso invlida, pode ser gerada uma exceo.
Rotina

Chr StrToInt IntToStr StrToIntDef IntToHex Round Trunc StrToFloat FloatToStr FormatFloat DateToStr StrToDate TimeToStr StrToTime DateTimeToStr StrToDateTime FormatDateTime

Descrio Byte em Char String em Integer Integer em String String em Integer, com um valor default caso haja erro Nmero em String Hexadecimal Arredonda um nmero real em um Integer Trunca um nmero real em um Integer String em Real Real em string Nmero real em string usando uma string de formato TDateTime em string de data, de acordo com as opes do Painel de Controle String de data em TDateTime TDateTime em Strind de Hora String de hora em TDateTime TDateTime em string de data e hora String de data e hora em TDateTime TDateTime em string usando uma string de formato

17

Programao Delphi apoiando aplicativos de Bases de Dados

VarCast VarAsType Val Str

Qualquer tipo em outro usando argumentos do tipo Variant Variante em qualquer tipo String em nmero, real ou inteiro Nmero, real ou inteiro, em String

Veja alguns exemplos de como usar essas rotinas. Converso de dados uma operao muito comum na programao em Object Pascal, seeria interessante dar uma olhada no help de cada uma das funes acima.
var I: Integer; D: Double; S1, S2: string; begin D := 10.5; I := Trunc(D); S1 := FloatToStr(D); S2 := IntToStr(I); ShowMessage(S1 + #13 + S2); end; var A, B, Soma: Bouble; begin A := StrToFloat(EdtA.Text); B := StrToFloat(EdtB.Text); Soma := A + B; ShowMessage(Format('%f + %f = %f', [A, B, Soma]); end;

3.13

Expresses

Uma expresso qualquer combinao de operadores, variveis, constantes, valores literais e chamadas de funes que resultem em um valor de determinado tipo. Uma expresso usada sempre que precisamos de um valor que possa ser obtido por uma expresso. Alguns exemplos so apresentados a seguir.

A + 12 * C Date - 4 StrToInt(Edit1.Text + Edit2.Text) StrToDate(Edit2.Text) - StrToDate(Edit1.Text) 12 * A / 100 A < B

3.14

Operadores

Os operadores so usados em expresses e a ordem em que as expresses so executadas depende da precedncia desses operadores. Veja abaixo a lista de operadores em ordem descendente de precedncia.
Operadores Unrios Endereo No booleano ou bit voltado para no Operadores Multiplicativos e de direo de Bit Multiplicao ou interseo de conjuntos * Diviso de Real / Diviso de Inteiro div Resto de diviso de Inteiros mod TypeCast seguro quanto ao tipo (RTTI) as

@ not

18

Programao Delphi apoiando aplicativos de Bases de Dados

and shl shr


Operadores Aditivos

E booleano ou bit voltado para e Deslocamento de bits esquerda Deslocamento de bits direita Adio ou unio de conjuntos Subtrao ou diferena de conjuntos Ou booleano ou bit voltado para ou Ou exclusivo booleano ou bit voltado para ou exclusivo Igual Diferente Menor Maoir Menor ou igual Maior ou igual Pertinncia a conjuntos Compatibilidade de tipos (RTTI)

+ or xor
Operadores Relacionais

= <> < > <= >= in is

Para forar uma expresso de menor precedncia a ser executada antes, voc pode usar os parnteses, como mostrado abaixo.
(5 - 2) * 3; (A > B) and (A < C)

Para fazer potenciao, use a funo Power, abaixo temos que A igual a A elevado a 4.
A := Power(A, 4);

3.15

Estruturas de Deciso

If - uma estrutura de deciso usada para realizar instrues em determinadas condies. O if considerado uma s instruo, por isso, s encontramos o ponto-e-vrgula no final. O else opcional.
if Opn.Execute then Img.Picture.LoadFromFile(Opn.FileName); if Nota < 5 then ShowMessage('Reprovado') else ShowMessage('Aprovado');

Case - permite que o fluxo da execuo seja desviado em funo de vrias condies de acordo com o valor do argumento, que tem que ser ordinal, caso o valor do argumento no corresponda a nenhum dos valores listados, podemos incluir um else.
case Ch of ' ': ShowMessage('Espao'); '0'..'9': ShowMessage('Dgito'); '+', '-', '*', '/': ShowMessage('Operador'); else ShowMessage('Caractere especial'); end; case 0: 1: 2: end; CbbBorda.ItemIndex of BorderStyle := bsDialog; BorderStyle := bsSingle; BorderStyle := bsSizeable;

3.16

Estruturas de Repetio

While - executa uma instruo at que uma condio deixe de ser verdadeira. 19

Programao Delphi apoiando aplicativos de Bases de Dados I := 10; while I >= 0 do begin ShowMessage(IntToStr(I)); Dec(I); end;

For - executa uma instruo um nmero determinado de vezes, incrementando uma varivel de controle automaticamente a cada iterao. Caso seja preciso que a contagem seja decremental, pode-se usar downto em vez de to.
for I := 1 to ComponentCount do ShowMessage('O ' + IntToStr(I) + ' Componente ' + Components[I 1].Name); for I := Length(Edit1.Text) downto 1 do ShowMessage(Edit1.Text[I]);

Repeat - executa instrues at que uma condio seja verdadeira.


I := 1; repeat S := InputBox('Acesso', 'Digite a senha', ''); Inc(I); if I > 3 then Halt; until S = 'fluminense';

Quebras de Lao - em qualquer um dos laos mostrados podemos usar o procedimento Break para cancelar a repetio e sair do lao, podemos tambm forar a prxima iterao com o procedimento Continue.
I := 1; while true do begin Inc(I); if I < 10000000 then Continue; ShowMessage('Chegamos a dez milhes'); Break; end;

3.17

Tipos Definidos pelo Usurio

O usurio tambm pode declarar tipos no definidos pelo Delphi. Essas declaraes so feitas na seo type, da interface ou implementation, sendo que na implementation esses tipos no podero ser usados em outras Units. Mas, de fato, dificilmente voc ter que definir tipos, a no ser classes, pois os tipos padro do Delphi so o bastante para a maioria das aplicaes.

Strings Limitadas - caso se deseje limitar o nmero de caracteres que uma string pode receber,
podemos criar um tipo de string limitada.
TNome = string[40]; TEstado = string[2];

Tipo Sub-Faixa - um subconjunto de um tipo ordinal e possui as mesmas propriedades do tipo original.
TMaiusculas = 'A'..'Z'; TMes = 1..12;

20

Programao Delphi apoiando aplicativos de Bases de Dados

Enumeraes - define uma seqncia de identificadores como valores vlidos para o tipo. A cada
elemento da lista de identificadores associado internamente um nmero inteiro, iniciando pelo nmero 0, por isso so chamados de tipos enumerados.
TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp); TDiaSemana = (Seg, Ter, Qua, Qui, Sex, Sab, Dom);

Ponteiros - armazenam endereos de memria, todas as classes em Object Pascal so implementadas como ponteiros:
TIntPtr: ^Integer; Quanto desejo o ponteiro de um outro objeto: TIntPtr := @Tvarnum; Quanto desejo manipular o objeto e no o ponteiro: showmessage ( IntToStr ( TIntPtr^ ) );

Records - o tipo record uma forma de criar uma nica estrutura com valores de diferentes tipos de
dados. Cada um dos dados de um record chamado de campo.
TData = record Ano: Integer; Mes: TMes; Dia: Byte; end; var Festa: TData; begin Festa.Ano := 1997; Festa.Mes := Mai; Festa.Dia := 8; end;

Arrays - Fornecem uma forma de criar variveis que contenham mltiplos valores, como em uma
lista ou tabela, cujos elementos so do mesmo tipo. A seguir, alguns exemplos de arrays de dimenses variadas.
TTempDia = array [1..24] of Integer; TTempMes = array [1..31, 1..24] of Integer; TTempAno = array [1..12, 1..31, 1..24] of Integer; var TD: TTempDia; I: Integer; begin for I := 1 to 24 do TD[I] := StrToIntDef(InputBox('Temperaturas', 'Digite a temperatura na hora ' + IntToStr(I), ''), 30); end;

Um array pode ser definido como constante tipada, onde todos os seus elementos devem ser inicializados.
FAT: array[1..7] of Integer = (1, 2, 6, 24, 120, 720, 5040);

O tipo dos elementos de um array pode ser qualquer um, voc pode ter uma array de objetos, de conjuntos, de qualquer tipo que quiser, at mesmo um array de arrays.
TTempMes = array [1..31] of TTempDia; TBtnList = array [1..10] of TButton;

Sets - So conjuntos de dados de um mesmo tipo, sem ordem, como os conjuntos matemticos.
Conjuntos podem conter apenas valores ordinais, o menor que um elemento pode assumir zero e o maior, 255.
TBorderIcons = set of BorderIcon;

21

Programao Delphi apoiando aplicativos de Bases de Dados BorderIcons := [biSystemMenu, biMinimize]; if MesAtual in [Jul, Jan, Fev] then ShowMessage('Frias');

Os conjuntos podem ser definidos como constantes ou constantes tipadas, como abaixo.
DIG_HEXA = ['0'..'9', 'A'..'Z', 'a'..'z']; DIG_HEXA: set of Char = ['0'..'9', 'A'..'Z', 'a'..'z'];

3.18

Procedimentos, Funes e Mtodos

As aes de um objeto devem ser definidas como mtodos. Quando a ao no pertence a um objeto, como uma transformao de tipo, essa ao deve ser implementada em forma de procedimentos e/ou funes.

Procedimentos
So sub-rotinas, que realizam uma tarefa e no retornam um valor. A declarao de um procedimento feita na seo interface e a definio, na seo implementation. Ao chamar o identificador do procedimento, com os parmetros necessrios, esse procedimento ser executado. Veja abaixo o exemplo de uma unit com a implementao um procedimento.
unit Tools; interface procedure ErrorMsg(const Msg: string); implementation uses Forms, Windows; procedure ErrorMsg(const Msg: string); begin Application.MessageBox(PChar(Msg), 'Operao invlida', MB_ICONERROR); end; end.

Funes
So muito semelhantes com procedimentos; a nica diferena que as funes retornam um valor. O tipo do valor de retorno deve ser informado no cabealho da funo. Na implementao da funo deve-se atribuir o valor de retorno palavra reservada Result ou ao identificador da funo. Pode-se ento usar a funo em expresses, atribuies, como parmetros para outras funes, em qualquer lugar onde o seu valor possa ser usado.
function Average(A, B: Double): Double; begin Result := (A + B) / 2; end;

Mtodos
So funes ou procedimentos que pertencem a alguma classe, passando a fazer parte de qualquer objeto dessa classe. Na implementao de um mtodo precisamos indicar qual a classe qual ele pertence. Para chamar um mtodo em algum lugar no pertencente sua classe, como procedimentos, funes ou mtodos de outras classes, deve ser indicado o objeto que deve executar o mtodo. Os mtodos usam os mesmos nveis de encapsulamento dos atributos.
type TFrmMsg = class(TForm) LblMsg: TLabel; BtnOk: TButton; BtnCancelar: TButton; ImgMsg: TImage; public

22

Programao Delphi apoiando aplicativos de Bases de Dados procedure ShowMsg(const Msg: string); end; procedure TFormMsg.ShowMsg(const Msg: string); begin LblMsg.Caption := Msg; ShowModal; end;

Parmetros
Existem trs tipos de passagem de parmetros, que devem ser indicados na declarao da funo ou procedimento. Parmetros de tipos diferentes de vem ser separados por ponto e vrgula.
function MultiStr(const S: string; N: Double; var Erro: Integer): string;

Quando no indicado o tipo de passagem, passado o valor do parmetro, como constante. Ao usar a palavra-chave var no enviado o valor do parmetro, mas a referncia a ele, tornando possvel mudar o valor do parmetro no cdigo do procedimento. Como alternativa voc pode passar um parmetro por referncia constante, para isso use a palavra const antes da declarao do parmetro.

3.19 With
Usado para facilitar o acesso s propriedades e mtodos de um objeto.
with Edt do begin CharCase := ecUpperCase; MaxLenght := 10; PasswordChar := '*'; Text := 'Brasil'; end;

3.20

Self

Self usado quando se quer referenciar a instncia atual da classe. Se voc precisar referenciar a instncia atual de uma classe, prefervel usar Self em vez de usar o identificador de um Objeto, isso faz com que o cdigo continue funcionando para as demais instncias da classe e em seus descendentes.

3.21 Criando e Destruindo Objetos


Antes de tudo, voc deve declarar o objeto, se quiser referenci-lo. Para cri-lo, use o mtodo Create, que um mtodo de classe. Para voc usar um mtodo de classe, referencie a classe, no o Objeto, como mostrado a seguir.

var Btn: TBitBtn; begin Btn := TBitBtn.Create(Self); With Btn do begin Parent := Self; Kind := bkClose; Caption := '&Sair'; Left := Self.ClientWidth - Width - 8; Top := Self.ClientHeight - Height - 8; end; end;

23

Programao Delphi apoiando aplicativos de Bases de Dados

Porm, se voc no precisar referenciar o Objeto, poderia criar uma instncia sem referncia.
with TBitBtn.Create(Self) do begin Parent := Self; Kind := bkClose; Caption := '&Sair'; Left := Self.ClientWidth - Width - 8; Top := Self.ClientHeight - Height - 8; end;

Para destruir um objeto, use o mtodo Free. Para Forms, recomendado usar o Release, para que todos os eventos sejam chamados. O parmetro do mtodo Create usado apenas em Componentes, para identificar o componente dono. Ao criar Forms, poderamos usar o Objeto Application.
FrmSobre := TFrmSobre.Create(Application); FrmSobre.ShowModal; FrmSobre.Release;

Para criar objetos no componentes, voc no precisa de nenhum parmetro no mtodo Create.
var Lst: TStringList; begin Lst := TStringList.Create; Lst.Add('Al, Teresinha!'); Lst.Add('Uhh uhh...'); Lst.SaveToFile('Teresinha.txt'); Lst.Free; end;

3.22

RTTI

Run Time Type Information a informao de tipo dos objetos em tempo de execuo. O operador is usado para fazer comparaes e o operador as usado para fazer um TypeCast seguro com objetos.
for I := 0 to ComponentCount - 1 do if Components[I] is TEdit then TEdit(Components[I]).Clear; (Sender as TEdit).Color := clYellow;

3.23

Excees

O tratamento de exceo um mecanismo capaz de dar robustez a uma aplicao, permitindo que os erros sejam manipulados de uma maneira consistente e fazendo com que a aplicao possa se recuperar de erros, se possvel, ou finalizar a execuo quando necessrio, sem perda de dados ou recursos. Para que uma aplicao seja segura, seu cdigo necessita reconhecer uma exceo quando esta ocorrer e responder adequadamente a essa exceo. Se no houver tratamento para uma exceo, ser exibida uma mensagem padro descrevendo o erro e todos os processamentos pendentes no sero executados. Uma exceo deve ser respondida sempre que houver perigo de perda de dados ou de recursos do sistema. Excees so classes definidas pelo Delphi para o tratamento de erros. Quando uma exceo criada, todos os procedimentos pendentes so cancelados e, geralmente mostrada uma mensagem de erro para o usurio. As mensagens padro nem sempre so claras, por isso indicado criar seus prprios blocos protegidos.

24

Programao Delphi apoiando aplicativos de Bases de Dados

Blocos Protegidos
Um bloco protegido um grupo de comandos com uma seo de tratamento de excees.
try A := StrToFloat(EdtA.Text); B := StrToFloat(EdtB.Text); ShowMessage(Format('%f / %f = %f', [A, B, A + B])); except ShowMessage('Nmeros invlidos.'); end;

Algumas vezes voc pode precisar especificar quais excees quer tratar, como mostrado abaixo.
try Soma := StrToFloat(EdtSoma.Text); NumAlunos := StrToInt(EdtNum.Text); ShowMessage(Format('Mdia igual a %f.', [Soma / NumAlunos])); except on EConvertError do ShowMessage('Valor invlido para soma ou nmero de alunos.'); on EZeroDivide do ShowMessage('O nmero de alunos tem que ser maior que zero.'); else ShowMessage('Erro na operao, verifique os valores digitados.'); end;

Principais Excees
O Delphi define muitas excees, para cada erro existe uma exceo correspondente.
Classe Exception EAbort EAccessViolation EConvertError EDivByZero EInOutError EIntOverFlow EInvalidCast EInvalidOp EOutOfMemory EOverflow ERangeError EUnderflow EVariantError EZeroDivide EDatabaseError EDBEngineError Descrio Exceo genrica, usada apenas como ancestral de todas as outras excees. Exceo silenciosa pode ser gerada pelo procedimento Abort e no mostra nenhuma mensagem. Acesso invlido memria, geralmente ocorre com objetos no inicializados. Erro de converso de tipos. Diviso de inteiro por zero. Erro de Entrada ou de Sada reportado pelo sistema operacional. Resultado de um clculo inteiro excedeu o limite. TypeCast invlido com o operador as. Operao invlida com nmero de ponto flutuante. Memria insuficiente. O resultado de um clculo, com nmero real, excedeu o limite. Valor excede o limite do tipo inteiro ao qual foi atribuda. O resultado de um clculo, com nmero real, menor que a faixa vlida. Erro em operao com variant. Diviso de real por zero. Erro genrico de banco de dados, geralmente no usado diretamente. Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o erro.

Blocos de Finalizao
Blocos de finalizao so executados sempre, haja ou no uma exceo. Geralmente os blocos de finalizao so usados para liberar recursos.

FrmSobre := TFrmSobre.Create(Application); try FrmSobre.Img.LoadFromFile('Delphi.bmp'); FrmSobre.ShowModal; finally FrmSobre.Release; end;

25

Programao Delphi apoiando aplicativos de Bases de Dados

Voc pode usar blocos de proteo e finalizao aninhados


FrmOptions := TFrmOptions.Create(Application); try FrmOptions.ShowModal; try Tbl.Edit; TblValor.AsString := EdtValor.Text; except on EDBEngineError do ShowMessage('Alterao no permitida.'); on EConvertError do ShowMessage('Valor invlido.'); end; finally FrmOptions.Release; end;

Gerao de Excees
Voc pode provocar uma exceo usando a clusula raise.
raise EDatabaseError.Create('Erro ao alterar registro.');

Tambm possvel criar seus prprios tipos de excees.


type EInvalidUser = class (Exception); raise EInvalidUser.Create('Voc no tem acesso a essa operao.');

Se voc quiser que uma exceo continue ativa, mesmo depois de tratada, use a clusula raise dentro do bloco de tratamento da exceo. Geralmente isso feito com excees aninhadas.
try Tbl.Edit; TblContador.Value := TblContador.Value + 1; Tbl.Post; except ShowMessage('Erro ao alterar contador.'); raise; end;

Erros de Bancos de Dados


A exceo EDBEngineError permite a identificao de erros de bancos de dados gerados pela BDE (Borland Database Engine).
try TblCli.Post; except on E: EDBEngineError do if E.Errors[0].ErrorCode = DBIERR_KEYVIOL then ShowMessage('Cliente j cadastrado.'); end;

Note que a varivel E, que vai identificar o erro, s precisa ser declarada no bloco de tratamento da exceo. No help voc pode consultar outras propriedades de EDBEngineError que podem ser importantes. Voc tambm pode usar os eventos de erro do componente Table, sem precisar de blocos de tratamento.
procedure TFrmCadCli.TblCliPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin if(E is EDBEngineError) then with EDBEngineError(E) do

26

Programao Delphi apoiando aplicativos de Bases de Dados case Errors[0].ErrorCode of DBIERR_KEYVIOL: ShowMessage('Cliente j cadastrado.'); DBIERR_REQDERR: ShowMessage('Campo obrigatrio no preenchido.'); end else ShowMessage('Erro no banco de dados:' + #13#13 + E.Message); Action := daAbort; end;

Alguns cdigos de erro da BDE esto listados abaixo. Todas as constantes e funes relacionadas API da BDE no Delphi 3 esto na Unit BDE, que deve ser adicionada clusula uses. No BDE API Help voc pode encontrar referncia sobre as funes nativas da BDE, como tambm alguns exemplos em Delphi.
Constante DBIERR_KEYVIOL DBIERR_MAXVALERR DBIERR_FORIEGNKEYERR DBIERR_LOCKED DBIERR_FILELOCKED DBIERR_NETMULTIPLE DBIERR_MINVALERR DBIERR_REQDERR DBIERR_LOOKUPTABLEERR Descrio Violao de chave primria Valor mximo excedido Erro de chave externa, como em integridade referencial Registro travado Arquivo travado Mais de um diretrio usado como NetFileDir Campo com valor mais baixo que valor mnimo Campo obrigatrio faltando Erro em tabela Lookup

Se voc quiser mais informaes a respeito do erro pode usar o procedimento DBIGetErrorContext, como na funo mostrada abaixo que retorna determinadas informaes sobre o erro.
function GetErrorInfo(Context: SmallInt): string; begin SetLength(Result, DBIMAXMSGLEN + 1); try DbiGetErrorContext(Context, PChar(Result)); SetLength(Result, StrLen(PChar(Result))); except Result := ''; end; end;

No evento OnEditError, usado no exemplo abaixo, se ocorrer um erro ao tentar alterar um registro, podemos identificar o usurio da rede que est alterando esse registro usando a funo criada anteriormente.
if Pos('locked', E.Message) > 0 then ShowMessage('Usurio ''' + GetErrorInfo(ecUSERNAME) + ''' est alterando o registro.');

Note que foi usada uma outra tcnica de identificao do erro, usando a prpria mensagem de erro e no o cdigo, como mostrado anteriormente. Voc pode usar a funo criada acima mandando como parmetro os valores mostrados abaixo, que podem ser encontrados no help da BDE.
Constante ecTABLENAME EcFIELDNAME EcUSERNAME EcFILENAME EcINDEXNAME EcDIRNAME EcKEYNAME EcALIAS EcDRIVENAME Descrio Nome da Tabela Nome do campo Nome do usurio, muito usado para identificar qual usurio travou o registro Nome do arquivo Nome do ndice Pasta Chave primria Alias Drive

27

Programao Delphi apoiando aplicativos de Bases de Dados EcNATIVECODE EcNATIVEMSG EcLINENUMBER Cdigo de erro nativo Mensagem de erro nativa Nmero da linha, usado em instrues SQL

Para desenvolver um sistema genrico de tratamento de erros, considere a opo de criar esse tratamento em um DataModule genrico para ser usado como ancestral por todos os DataModules do sistema, utilizando a herana visual. Se o nico problema for traduzir as mensagens, localize os arquivos CONSTS.INT e DBCONSTS.INT e crie uma nova Unit de definio de strings com uma estrutura semelhante a mostrada abaixo e juntando todas as definies das constantes das duas Units devidamente traduzidas. Depois, basta usar essa Unit em seus projetos que as novas mensagens iro sobrepor s anteriores.
unit NewConsts; interface resourcestring SAssignError = 'No possvel atribuir %s a %s'; SFCreateError = 'No possvel criar arquivo %s'; SFOpenError = 'No possvel abrir arquivo %s'; SInvalidFieldSize = 'Tamanho de campo invlido'; SInvalidFieldRegistration = 'Registro de campo invlido'; SUnknownFieldType = 'Campo ''%s'' tem um tipo desconhecido'; implementation end.

Uma outra opo seria criar um mtodo para o evento OnException do objeto Application, esse mtodo seria chamado sempre que houvesse uma exceo em qualquer parte do sistema.

4 4.1

BIBLIOTECA DE CLASSES Nomenclatura

Para nomear os componentes podemos usar uma conveno muito usada, onde as primeiras letras, minsculas, identificam o tipo do componente e o restante identifica a funo deste, assim, btnSair, seria o boto de sair. Se a funo do componente for um nome composto esse nome deve ser escrito com os primeiros nomes abreviados e com letras de caso varivel, como em btnRelVendas, que seria o boto do relatrio de vendas ou btnRelVenProduto, que seria o boto do relatrio de vendas por produto.

4.2

Propriedades

As propriedades so caractersticas dos componentes, como foi mostrado anteriormente. Para alterar propriedades em cdigo use a sintaxe de ponto, como mostrado a seguir.

Tipos de Propriedade
Tipo String
Button1.Caption := 'Fechar'; Label1.Caption := Edit1.Text + '/' + Edit2.Text;

Tipo Numrico

Button2.Height := Button2.Height * 2; Width := Button1.Width + Button2.Width + 12;

Tipo Enumerado 28

BorderStyle := bsDialog;

Programao Delphi apoiando aplicativos de Bases de Dados Panel1.Color := clWindow;

Propriedades Aninhadas de Classe

Memo1.Lines.Text := 'E agora, Jos?'; Label1.Font.Color := clBlue;

Propriedades Aninhadas de Conjunto

BorderIcons := [biSystemMenu, biMaximize]; Label1.Font.Style := [fsBold, fsItalic];

Propriedades Comuns
Propriedade

Align Canvas Caption Color ComponentCount Components Ctl3D Enabled Font Height HelpContext Hint Left Name PopupMenu ShowHint TabOrder TabStop Tag Top Visible Width

Descrio Determina o alinhamento do componente Superfcie de desenho, do tipo TCanvas, onde pode se desenhar a imagem do componente Legenda do componente (& indica tecla de atalho para alguns componentes) Cor do componente O nmero de componentes possudos Matriz de componentes possudos Define a aparncia 3D do componente Define se o componente est ativo, se pode ser usado Fonte utilizada no componente Altura Nmero utilizado para chamar o Help on-line String utilizada em dicas instantneas Posio esquerda Nome do componente Menu de contexto do componente Define se o Hint ser mostrado A ordem de tabulao do componente, usada quando o usurio tecla TAB Indica se o componente ser selecionado quando o usurio teclar TAB Propriedade no utilizada pelo Delphi, que pode ser usada como propriedade personalizada. Posio superior Define se o componente est visvel Largura

4.3

Eventos

Os Eventos acontecem em resposta a uma ao do usurio ou do prprio sistema, ao programar um mtodo de evento, devemos levar em considerao que este s ser executados quando o evento acontecer. Uma das tarefas mais importantes na programao baseada em eventos determinar quais eventos sero usados e qual a ordem desses eventos, por exemplo, quando o usurio clicar em um boto, qual evento acontecer primeiro, OnEnter, OnMouseDown ou OnClick? Os eventos podem ser compartilhados entre componentes, dessa Forma, voc pode ter um boto na barra de ferramentas que faz a mesma coisa que uma opo de menu. Para isso, basta escolher o evento na lista em vez de clicar duas vezes no Object Inspector. Podemos tambm mudar os mtodos de evento em cdigo, pois os eventos tambm so propriedades e podem ser usados como tal. Voc pode atribuir um evento de outro componente ou diretamente o nome do mtodo, como mostrado abaixo.
Button1.OnClick := Edit1.OnExit; Button2.OnClick := Edit2Click;

Eventos Comuns
Evento

OnChange OnClick OnDblClick

Descrio O contedo do componente alterado O componente acionado Duplo-clique no componente

29

Programao Delphi apoiando aplicativos de Bases de Dados

OnEnter OnExit OnKeyDown OnKeyPress OnKeyUp

O componente recebe o foco O componente perde o foco Tecla pressionada Uma tecla pressionada e solta Tecla solta

4.4

Mtodos

Os mtodos realizam aes definidas pelo componente, veja os exemplos abaixo e atente para os parmetros passados. Note que podemos chamar os mtodos de evento como qualquer outro mtodo e que os mtodos de evento pertencem ao Form, no aos componentes.
Edit1.Clear; Form2.Show; Close; ScaleBy(110, 100); Button1.ScrollBy(10, 10); Button1.OnClick(Sender); Button1Click(Self); Form2.Button1Click(Sender);

Mtodos Comuns
Mtodo

Create Free Show Hide SetFocus Focused BringToFront SendToBack ScrollBy ScaleBy SetBounds

Descrio Cria um novo Objeto de uma Classe Destri um Objeto e libera a memria ocupada por ele Torna o componente visvel Torna o componente invisvel Coloca o foco no componente Determina se o componente tem o foco Coloca o componente na frente dos outros Coloca o componente atrs dos outros Move o componente Gradua o componente em determina escala Muda a posio e o tamanho do componente

4.5

Janelas

Todo aplicativo Windows composto por janelas, que so o elemento bsico no desenvolvimento Delphi, sobre o qual um aplicativo construdo. O tipo TForm usado no Delphi como classe base para todas as janelas, veja abaixo algumas propriedades, eventos e mtodos dessa classe.
Propriedade

Active ActiveControl AutoScroll BorderIcons BorderStyle FormStyle Icon Menu Position WindowMenu WindowState
Evento

OnCreate OnDestroy OnShow OnCloseQuery

Descrio Indica se o Form est ativo Determina o controle que receber o foco por default Adiciona barras de rolagem automaticamente, quando necessrio Define quais cones de controle sero visveis, quais botes vo aparecer na barra de ttulo Estilo da borda do Form Tipo de Form, normal, MDI pai, MDI filho ou sempre visvel cone do Form Indica qual o menu do Form Permite controlar a posio e tamanho do Form na exibio Automatiza o item de menu Window (MDI) Estado do Form, maximizada, minimizada ou normal Descrio Quando o Form instanciado Quando o Form liberado da memria Exatamente antes de mostrar o Form chamada para validar se o Form pode ser fechado

30

Programao Delphi apoiando aplicativos de Bases de Dados

OnClose OnActivate OnDeactivate OnResize


Mtodo

Cascade Tile ArrangeIcons ShowModal Show Close Previous Next

Quando o Form fechado Quando o Form recebe o foco Quando o Form perde o foco Quando o Form muda de tamanho Descrio Organiza as Forms filhos em cascata (MDI) Organiza as Forms filhos lado a lado (MDI) Organiza os cones dos Forms Filhos minimizados (MDI) Ativa o Form modal, que o usurio tem que fechar para poder continuar a usar a aplicao Mostra o Form Fecha o Form Ativa o Form anterior (MDI) Ativa a prximo Form (MDI)

4.6

Componentes Padro

Tbutton - Componente boto padro do Windows, utilizado para executar aes.


Propriedade

Cancel Default ModalResult Mtodo Click

Descrio Dispara o evento OnClick do boto quando a tecla ESC pressionada em qualquer controle Dispara o evento OnClick do boto quando a tecla ENTER pressionada em qualquer controle Associa o boto a opo de fechamento de um Form modal Descrio Ativa o evento OnClick do boto

TbitBtn - Boto especializado, com Bitmap.


Propriedade

Glyph LayOut Margin Spacing Kind

Descrio Bitmap exibido pelo boto Posio do Bitmap no Boto Indica o espao entre a borda do boto e o Bitmap Indica o espao entre o Bitmap e o texto do boto Seleciona um tipo padro para o boto, mudando vrias propriedades, como Glyph e ModalResult

TspeedButton - Boto com Bitmap, normalmente utilizado em barras de ferramentas.


Propriedade

Down GroupIndex AllowAllUp Flat

Descrio Estado do boto (Pressionado ou no) Indica quais botes pertencero ao mesmo grupo Permite que todos os botes de um grupo possam ficar no pressionados Define se a borda do boto deve aparecer apenas quando ele for apontado

Tlabel - Utilizado para exibir rtulos


Propriedade

Alignment AutoSize WordWrap Transparent FocusControl ShowAccelChar

Descrio Alinhamento do texto no componente Define se o tamanho do componente ser automaticamente ajustado ao tamanho do Caption Retorno automtico de linha Define se o componente ser transparente Componente que receber o foco quando a tecla de atalho do Caption (&) for pressionada Indica se o caractere & ser usado para definir tecla de atalho

31

Programao Delphi apoiando aplicativos de Bases de Dados

Tedit - Utilizado para entrada de texto em uma nica linha.


Propriedade

Text AutoSelect MaxLength CharCase PasswordChar ReadOnly

Descrio Texto do componente Indica se o texto ser ou no selecionado quando o componente receber o foco Nmero mximo de caracteres permitidos Define se as letras aparecero em maisculo, minsculo ou normal Caractere utilizado para esconder o texto digitado (Senhas) Define se ser permitido alterar o texto

Mtodo Clear ClearSelection

Descrio Limpa o contedo do componente Limpa o texto selecionado no componente

TmaskEdit - Permite entrada de dados texto em uma linha, utilizando uma mscara de edio.
Possui todas as propriedades do componente TEdit.
Propriedade

EditMask

Descrio Mscara de edio

Mscaras - uma mscara composta por trs partes, a primeira parte a mscara propriamente dita, a segunda parte indica se os caracteres literais sero salvos e a terceira parte indica qual o caractere utilizado para representar os espaos a serem digitados no texto. Estes so os caracteres especiais que podem compor a mscara de edio:
Caractere

! > < \ l L a A 9 0 c C # : /

Descrio Espaos em branco no sero considerados no texto Todos os caracteres seguintes sero maisculos at que aparea o caractere < Todos os caracteres seguintes sero minsculos at que aparea o caractere > Indica um caractere literal Somente caractere alfabtico Obrigatoriamente um caractere alfabtico Somente caractere alfanumrico Obrigatoriamente caractere alfanumrico Somente caractere numrico Obrigatoriamente caractere numrico Permite um caractere Obrigatoriamente um caractere Permite um caractere numrico ou sinal de mais ou de menos, mas no os requer. Separador de horas, minutos e segundos Separador de dias, meses e anos

Tmemo - Permite entrada de dados texto em mltiplas linhas. Contm propriedades e mtodos do
TEdit.
Propriedade

Lines WantReturns WantTabs ScrollBar

Descrio Propriedade do tipo TStrings que armazena as linhas de texto do componente Define se a tecla ENTER ser tratada como quebra de linha Define se a tecla TAB ser tratada como espao de tabulao Define as barras de rolagem

Tstrings - Muitos componentes, como o TMemo, possuem propriedades do Tipo TStrings, essa classe permite armazenar e manipular uma lista de Strings. Toda propriedade do tipo TStrings permite acesso indexado aos itens da lista.
Propriedade

Count Text
Mtodo

Descrio Nmero de strings Contedo do memo na Forma de uma nica string Descrio

32

Programao Delphi apoiando aplicativos de Bases de Dados

Add Insert Move Delete Clear IndexOf LoadFromFile SaveToFile

Adiciona uma nova string no final da lista Insere uma nova string numa posio especificada Move uma string de um lugar para outro Apaga uma string Apaga toda a lista Retorna o ndice do item e - 1 caso no encontre Carrega texto de um arquivo Salva texto para um arquivo

TcheckBox - Utilizado para obter informaes de checagem.


Propriedade

AllowGrayed Checked State

Descrio Determina se o checkbox ter trs possibilidades de estado Determina se o checkbox est marcado Estado atual do checkbox

TradioButton - Usado em grupo, pode ser utilizado para obter inFormaes lgicas mutuamente
exclusivas, mas recomendado usar o RadioGroup em vez de RadioButtons.

TradioGroup - Componente que agrupa e controla RadioButtons automaticamente.


Propriedade

Columns Items ItemIndex

Descrio Nmero de colunas de RadioButtons Lista de strings com os itens do RadioGroup, cada item da lista RadioButton Item selecionado, iniciando em 0

representa um

Tpanel - Componente Container utilizado para agrupar componentes em um painel.


Propriedade

BevelInner BevelOuter BevelWidth BorderStyle BorderWidth

Descrio Estilo da moldura interna do painel Estilo da moldura externa do painel Largura das molduras Estilo da Borda Largura da borda, distncia entre as molduras interna e externa

TscrollBox - Container com barras de rolagem automticas. TgroupBox - Componente container com um ttulo e borda 3D. Tbevel - Moldura ou linha com aparncia 3D.
Propriedade

Shape Style

Descrio Tipo de moldura a ser desenhada Define alto ou baixo relevo para a linha

TlistBox - Utilizado para exibir opes em uma lista.


Propriedade

Columns MultiSelect ExtendedSelect IntegralHeight Items ItemIndex Selected

Descrio Nmero de colunas de texto da lista Define se ser permitida a seleo de mltiplos itens Define se a seleo poder ser estendida pelo uso das teclas Shift e Ctrl Define se os itens podero aparecer parcialmente ou somente por completo Lista de strings com os itens da lista ndice do item selecionado, comeando em 0 De acordo com o ndice indica se um item em particular esta selecionado

33

Programao Delphi apoiando aplicativos de Bases de Dados

SelCount Sorted

Indica quantos itens esto selecionado Define se os itens aparecero ordenados

TcomboBox - Caixa combinada com lista suspensa.


Propriedade

Items DropDownCount Style

Descrio Lista de strings com os itens da lista Nmero de itens visveis da lista suspensa Estilo do ComboBox, os principais estilos so csDropDown, csDropDownList, csSimple

Timage - componente usado para exibir figuras.


Propriedade

Center Picture Stretch

Descrio Determina de a figura ser centralizada no componente Figura a exibida, pode ser BMP, ICO, WMF ou EMF Define se o tamanho da figura deve ser ajustada ao do componente

Tpicture - classe usada para guardar cones, Bitmaps, meta arquivos do Windows ou grficos
definidos pelo usurio.
Mtodo

LoadFromFile SaveToFile

Descrio Carrega figura de um arquivo Salva figura para um arquivo

TpageControl - usado para criar controles com mltiplas pginas, que podem ser manipuladas, em
tempo de projeto, atravs do menu de contexto. Cada pgina criada um objeto do tipo TTabSheet.
Propriedade

ActivePage MultiLine TabHeigth TabWidth


Evento

OnChange OnChanging
Mtodo

FindNextPage SelectNextPage

Descrio Pgina ativa Define mltiplas linhas de guias de pginas Altura das guias Largura das guias Descrio Aps uma mudana de pgina Permite a validao de uma mudana de pgina Descrio Retorna a prxima pgina Seleciona a prxima pgina

TtabSheet - pgina de um PageControl.


Propriedade PageIndex TabVisible Descrio Ordem da pgina Define se a aba da pgina visvel

Tshape - grfico de uma Forma geomtrica.


Propriedade

Brush Pen Shape

Descrio Preenchimento da figura, objeto do tipo TBrush Tipo da linha, objeto do tipo TPen Forma geomtrica

Ttimer - permite a execuo de um evento a cada intervalo de tempo.


Propriedade

Interval
Evento

OnTimer

Descrio Tempo em milissegundos quando o componente ir disparar o evento OnTimer Descrio Chamado a cada ciclo de tempo determinado em Interval

34

Programao Delphi apoiando aplicativos de Bases de Dados

TstatusBar - utilizado para criar barras de status para exibir inFormaes.


Propriedade

SimplePanel SimpleText SizeGrip Panels

Descrio Indica se haver apenas um panel Texto exibido caso SimplePanel seja True Define se a ala de redimensionamento padro deve ser mostrada Propriedade do tipo TStatusPanels, com os painis do StatusBar

TstatusPanels - lista de panels de um StatusBar.


Propriedade

Count Items
Mtodo

Descrio Nmero de panels Lista de panels, cada panel um objeto do tipo TStatusPanel

Descrio
Adiciona um novo panel lista

Add

TstatusPanel- panel de um StatusBar.


Propriedade

Text Width Bevel Alignment

Descrio Texto do panel Largura em pixels Moldura do panel Alinhamento do texto de um panel

4.7
Mtodo

Caixas de Dilogo
Descrio Mostra a caixa de dilogo e retorna True caso o usurio clique em Ok

Grupo de caixas de dilogo comuns do Windows.


Execute

TOpenDialog / TsaveDialog - caixas de dilogo para abrir e salvar arquivos.


Propriedade

FileName DefaultExt Filter FilterIndex InitialDir Title Options

Descrio Nome do arquivo Extenso padro para os arquivos Filtro, com os tipos de arquivos que sero abertos ou salvos ndice do filtro default Pasta inicial Ttulo da janela Define caractersticas gerais do dilogo

TfontDialog - caixa de dilogo de escolha de fonte.


Propriedade

Device MinFontSize MaxFontSize Options


Evento

OnApply

Descrio Define se deve utilizar fontes para tela, impressora ou ambos Tamanho mnimo da fonte Tamanho mximo da fonte Define caractersticas das fontes Descrio Ocorre aps o usurio pressionar o boto Aplicar, antes da janela fechar

4.8

Menus

No Delphi os menus sero desenhados no Menu Designer, que pode ser acessado no menu de contexto de qualquer componente de menu.

35

Programao Delphi apoiando aplicativos de Bases de Dados

TmainMenu - menu principal de um Form.


Propriedade

Items

Descrio Itens de menu, essa propriedade guarda todas as alteraes feitas no Menu Designer

TpopUpMenu - Menu de contexto de um componente. Cada componente tem uma propriedade


PopUpMenu, que indica seu menu de contexto.

TmenuItem - item de menu.


Propriedade

Checked GroupIndex RadioGroup ShortCut

Descrio Indica se o item est marcado ou no ndice do grupo do item, semelhante ao SpeedButton Indica se o item pode ser mutuamente exclusivo com outros itens do mesmo grupo Tecla de atalho do item

4.9

Classes No Visuais

Tapplication - todo programa tem um objeto global nomeado Application, do tipo TApplication,
esse objeto representa a aplicao para o Windows.
Propriedade

ExeName MainForm Hint Title HelpFile


Evento

OnHint OnException OnHelp


Mtodo

MessageBox Run Terminate

Descrio Caminho e nome do arquivo executvel Form principal da aplicao Hint recebido pela aplicao Ttulo da aplicao Caminho e nome do arquivo help Descrio Quando um hint recebido pela aplicao Quando ocorre uma exceo Quando acontece uma solicitao de help Descrio Apresenta um quadro de mensagem Executa a aplicao Finaliza a aplicao normalmente

Quadros de Mensagem - o mtodo Application.MessageBox mostra quadros de mensagem com chamadas a funes da API do Windows. Os flags de mensagem mais usados e os valores de retorno desse mtodo so mostrados abaixo.
Flag

MB_ABORTRETRYIGNORE MB_ICONERROR MB_ICONEXCLAMATION MB_ICONINFORMATION MB_ICONQUESTION MB_OK MB_OKCANCEL MB_RETRYCANCEL MB_SYSTEMMODAL MB_YESNO MB_YESNOCANCEL
Valor de Retorno

IDABORT IDCANCEL IDIGNORE

Item Mostrado Botes de Abortar, Repetir e Ignorar cone de erro cone com ponto de exclamao cone com letra i, usada para mostrar inFormaes cone de pergunta Boto de Ok Botes de Ok e Cancelar Botes de Repetir e Cancelar O Windows s poder ser usado quando o quadro for fechado Botes de Sim e No Botes de Sim, No e Cancelar Boto Escolhido Abortar Cancelar Ignorar

36

Programao Delphi apoiando aplicativos de Bases de Dados

IDNO IDOK IDRETRY IDYES

No Ok Repetir Sim

Esses quadros so usados quando se deseja uma resposta simples do usurio, principalmente numa confirmao ou pergunta para o usurio, como o cdigo abaixo, usado no evento OnCloseQuery do Form principal.
if Application.MessageBox('Deseja fechar a aplicao?', 'Sair do sistema', MB_ICONQUESTION + MB_YESNO) = IDNO then CanClose := False;

Tscreen - o Delphi automaticamente cria a varivel Screen do tipo Tscreen, essa varivel guarda
caractersticas do vdeo, como mostrado abaixo.
Propriedade

ActiveForm FormCount Cursor Forms Fonts PixelsPerInch Height Width

Descrio Form com o foco Nmero de Forms no vdeo Cursor do mouse Lista dos Forms disponveis Lista de Fontes de tela disponveis Nmero de pixels por polegada da Fonte usada pelo sistema Altura da tela em pixels Largura da tela em pixels

Tprinter - na Unit Printers declarado um objeto do tipo TPrinter nomeado Printer que encapsula
toda a interface de impresso do Windows e pode ser usado para imprimir diretamente, sem usar componentes de relatrio, como o QuickReport.
Propriedade

Canvas Printers Orientation PageHeight PageWidth PageNumber


Mtodo

BeginDoc EndDoc Abort

Descrio Superfcie de desenho, do tipo TCanvas, onde ser desenhada a imagem a ser impressa Lista de impressoras instaladas Retrato ou Paisagem Altura da pgina Largura da pgina Pgina atual Descrio Inicia o processo de desenho Finaliza o processo de desenho e envia a imagem do Canvas para a impressora Aborta a impresso

Tcanvas - um objeto da classe TCanvas uma superfcie de desenho, onde podem ser usados vrios
mtodos de plotagem grfica. Todos os controles visveis possuem uma propriedade Canvas, do tipo TCanvas, que geralmente usada nos Forms e no objeto Printer.
Propriedade

Brush Pen Font


Mtodo

TextOut Ellipse Polygon Rectangle

Descrio Padro de preenchimento, propriedade do tipo TBrush Estilo de linha, propriedade do tipo TPen Fonte usada nas plotagens de texto Descrio Desenha texto na superfcie Desenha uma elipse Desenha um polgono Desenha um retngulo

37

Programao Delphi apoiando aplicativos de Bases de Dados

Tlist - estrutura de dados polimrfica que pode gerenciar uma lista de objetos de qualquer classe e
possui mtodos semelhantes aos de TStrings.

TstringList - lista de strings descendente de TStrings usada para manter listas de strings
independentes de qualquer componente.

Tregistry - interface com a API de manipulao do Registry do Windows, banco de dados de


configurao do sistema.

5 5.1

BANCOS DE DADOS Conceitos Importantes

O gerenciamento de bancos de dados essencial para o desenvolvimento comercial, em particular para sistemas de informao que possuem grande volume de informaes para serem proessadas. Para se 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.

5.2

Borland Database Engine

A BDE (Borland Database Engine) 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. Para configurar o acesso a um banco de dados, voc tem vrias opes, criar um Alias, usar o componente TDatabase ou os dois juntos.

Fonte de Dados
Uma Fonte de Dados (ou 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 na Fonte de Dados, de forma que para mudar de banco de dados, s necessrio mudar o Fonte de Dados. Para criar um Fonte de Dados voc pode usar Database Explorer, o BDE Administrator ou o prprio Database Desktop.

5.3

Arquitetura de Acesso

A acesso e manipulao de um banco de dados por um programa Delphi realizada como mostrado a seguir, note que a aplicao no acessa os dados diretamente, mas usa sempre a BDE.

38

Programao Delphi apoiando aplicativos de Bases de Dados

Assim, para uma aplicao de bancos de dados funcionar, preciso que a BDE esteja instalada na mquina, no bastando apenas o arquivo executvel.

5.4

Data Access Utilidade


Instala uma conexo permanente com um banco de dados, especialmente um banco de dados remoto requerendo um login do usurio e uma senha. uma Unit que pode ser conter as classes TTable e TQuery para evitar repeties destes componentes dentro da aplicao. Recupera dados de um tabela de banco de dados via o BDE e abastece ele para um ou mais componentes de controle de dados atravs do componente TDataSource. Envia dados recebidos de um componente para uma banco de dados via o BDE. Usa estruturas em SQL para recuperar dados de uma tabela de banco de dados via o BDE, e abastece ele para um ou mais componentes de controle de dados atravs de um TDataSouce, ou usa estruturas em SQL para enviar dados de um componente para um banco de dados via o BDE. Acoplado ao TQuery e oferece 3 strings para comando SQL (insero, alterao e deleo. Habilita uma aplicao para acessar procedimentos armazenados em um servidor. Envia dados recebidos de um componente para um banco de dados via o BDE. Configuraes do BDE no instante em que foi aberto o aplicativo. Copia a estrutura de uma tabela ou seus dados. Pode ser usado para mover tabelas inteiras de uma formato de banco de dados para outro.

Controles usados para fazer conexo com banco de dados.

Componente
TDataBase TDataModule TTable TQuery

TUpdateSQL TStoreProc TSession TBatchMove

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

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

39

Programao Delphi apoiando aplicativos de Bases de Dados 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

TransIsolation Mtodos

Close CloseDataSets Commit Open Rollback StartTransaction


Eventos

OnLogin

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.

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

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

40

Programao Delphi apoiando aplicativos de Bases de Dados

DatabaseName EOF Exclusive FieldCount FieldDefs Fields Filter Filtered IndexFieldNames IndexName IndexDefs MasterFields MasterSource Modified ReadOnly RecNo RecordCount 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

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

41

Programao Delphi apoiando aplicativos de Bases de Dados

AfterClose AfterDelete AfterEdit AfterInsert AfterOpen AfterPost AfterScroll BeforeCancel BeforeClose BeforeDelete BeforeEdit BeforeInsert BeforeOpen BeforePost BeforeScroll OnCalcFields OnDeleteError OnEditError OnFilterRecord OnNewRecord OnPostError

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

Usando DataSets - as classes de componentes TTable e TQuery so descendentes de TDataset atravs do TDBDataSet. Esta classe de componente herda uma parte de propriedades, mtodos e eventos. Os estados do DataSet: Estado
dsInactive dsBrowse dsEdit dsInsert dsSetKey dsCalcFields

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

Abrindo e Fechado DataSets - antes que uma aplicao possa acessar dados atravs de um dataset, o dataset deve ser aberto. Existem dois meios para abrir o dataset: Ativando a propriedade Active para True, isto pode ser feito atravs do Object Inspector ou programavelmente em tempo de execuo.
Table1.Active := True;

Chamando o mtodo do Dataset Open em tempo de execuo.


Table1.open;

Para fechar o processo e semelhante s muda o a propriedade para False e o evento para Close; Lendo Valores do Campo - existem algumas maneiras de ler dados de um dataset:
Edit1.text := Table1Nome_Clie.asstring; Edit1.text := Table1.Fields[1].asstring; Edit1.text := Table1.FieldByName(Nome_Clie).asstring;

42

Programao Delphi apoiando aplicativos de Bases de Dados

Para associar outros tipos de campos que no texto a uma caixa de edio (que s aceita valores do tipo string), devemos utilizar propriedades de converso do componente TField: AsBoolean, AsDataTime, AsFloat (Real), AsInteger, AsString. Para atribuir valores para o dataset o procedimento o mesmo s que no sentido inverso, desde que que a tabela esteja em modo de edio ou insero. 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.
Table1.AppendRecord([Null, EdtDescricao.Text, EdtPreco.Text]);

Outra forma de inserir um registro:


Table1.Insert; Table1Data.Value := Date; Table1Hora.Value := Time; Table1.Post;

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.
Table1.Edit; Table1Data.Value := Date; Table1Hora.Value := Time; Table1.Post;

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 Table1.Modified then if Application.MessageBox('Gravar alteraes?', 'Dados Alterados', MB_ICONQUESTION + MB_YESNO) = IDYES then Table1.Post else Table1.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.
Table1Data.Value := Date;

Marcando Dados - os mtodos para marcar so GetBookmark - Pega a posio do registro e coloca em uma varivel do tipo TBookmark; GotoBookmark - Leva o apontador para uma variavel do tipo TBookmark; FreeBookmark - Desaloca uma variavel do tipo TBookmark;
procedure DoSomething; var Marca: TBookmark; begin Marca := Table1.GetBookmark; {Marca a posio} Table1.DisableControls; {Desabilita o controle de dados} try Table1.First; while not Table1.EOF do begin {Faz alguma coisa} Table1.Next; end;

43

Programao Delphi apoiando aplicativos de Bases de Dados finally Table1.GotoBookmark(Marca); Table1.EnableControls; Table1.FreeBookmark(Marca); {Desaloca a variavel} end; end;

Indexao - a indexao usada para ordenar os registros da tabela. Mtodo


GetIndexNames IndexFieldCount IndexFields IndexName IndexFieldNames

Descrio
Retorna uma lista de nomes disponiveis de ndeces para uma tabela do banco de dados. Nmero de Campos do ndice. Vetor de nomes de campos usados no ndice Para usar o ndice primrio de uma tabela Paradox. Para muda o ndice para qualquer campo.

As propriedades IndexName e IndexFieldNames so mutualmente exclusivas. Colocando uma propriedade, limpa o valor da outra. Para ordenar 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.
Table1.IndexFieldNames := 'Nomcli'; Table1.IndexFieldNames := 'Data, Vendedor';

Percorrendo uma Tabela - utilize um cdigo semelhante ao mostrado abaixo para percorrer uma tabela do incio ao fim.
Table1.DisableControls; Total := 0; Table1.First; while not Table1.EOF do begin Total := Total + Table1Valor.Value; Table1.Next; end; Table1.EnableControls;

Procurando dados em uma Tabela - os mtodos GoToKey e GoToNearest habilita uma aplicao para procurar uma chave em uma tabela. SetKey coloca a tabela em modo de procura. No estado SetKey, atribui-se valores para a procura em um campo indexado. GoToKey ento move o cursor para a primeira linha da tabela que encontrou este valor. Como GoToKey uma funo ela retorna True ou False se teve sucesso na procura. O GoToNearest uma funo que leva para o valor mais parecido encontrado.
procedure TForm1.Button1Click(Sender: TObject); begin Table1.SetKey; {Primeiro campo a chave} Table1.Fields[0].AsString := Edit1.Text; (* Table1.Fieldbyname(Cidade) := Edit1.Text *) Table1.GoToKey; end;

Todo procedimento acima pode ser substitudo usando a funo Find


procedure TForm1.Button1Click(Sender: TObject); begin Table1.FindKey([Edit1.text]); end;

Exemplo de outra forma de procura em uma tabela. 44

Programao Delphi apoiando aplicativos de Bases de Dados procedure TForm1.Button1Click(Sender: TObject); begin Table1.SetKey; {Primeiro campo a chave} Table1.Fieldbyname(Cidade) := Edit1.Text; Table1.GoToKey; end;

Procura em um indce secundrio.


procedure TForm1.Button1Click (Sender: TObject); begin Table1.indexname := Nome_Clie; Table1.open; Table1.setkey; Table1Nome_clie.asstring := Edit1.text; Table1.gotonearest; end;

Procura em um indce primrio ou secundrio.


procedure TForm1.Button1Click (Sender: TObject); begin Table1.indexfieldnames := Codi_Clie; Table1.open; Table1.setkey; Table1Nome_clie.asstring := Edit1.text; Table1.gotonearest; end;

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 Table1.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.
Table1.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 Table1.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 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.
Table1.filter := 'Data = '20/04/1998'' Table1.filter := (Data = '20/04/1998') AND (Vendedor = 'Gilherme Augusto da Fonseca') Table1.filter := (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. 45

Programao Delphi apoiando aplicativos de Bases de Dados 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. Voc tambm pode filtar registros de uma tabela atravs de mtodos especficos: SetRangeStart: Estabelece o limite inicial do filtro. SetRangeEnd: Estabelece o limite final do filtro. ApplyRange: Aplica o filtro tabela. CancelRange: Cancela o filtro aplicado tabela. KeyExclusive: Exclui a chame do indce setado.
Table1.SetRangeStart; Table1.FieldByName(Codigo):=100;(*Table1Codigo.asinteger := 100 *) Table1.KeyExclusive := False; Table1.SetRangeEnd; Table1.FieldByName(Codigo):=200;(*Table1Codigo.asinteger := 200 *) Table1. KeyExclusive := True; Table1.ApplyRange;

Obter um filtro dos registros de clientes com cdigo entre 100 e 199. Sincronizando Tabelas - o mtodo GotoCurrent um mtodo que sincroniza dois componentes table ligados a uma mesma tabela em um banco de dados e usando o mesmo indce.
Table1.GotoCurrent(Table2);

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

46

Programao Delphi apoiando aplicativos de Bases de Dados

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

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

Programao Delphi apoiando aplicativos de Bases de Dados

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. Converso de Tipos - a converso de tipo de um campo pode ser feita atravs as propriedades tipo As..., como AsString.
Table1.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 Table1Quantidade.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;

48

Programao Delphi apoiando aplicativos de Bases de Dados

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

Tquery -componente usado para enviar um comando SQL para um banco de dados ou uma instruo SELECT. Muitas dos itens mostrados abaixo esto definidos na classe TDataSet, ancestral do TTable.
Propriedades

Active BOF DatabaseName EOF FieldCount FieldDefs


Fields

Filter Filtered IndexFieldNames IndexName IndexDefs Param RecNo RecordCount SQL State

Descrio Define se a instruo SQL ser executada ou no. Usado somente para instrues SELECT. Informa se est no incio da tabela 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 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 Lista de objetos do tipo TParam, que representam parmentros dentro de uma instruo SQL Nmero do registro atual Nmero de registros Define a instruo SQL que ser enviada para o Gerenciador Estado da tabela

49

Programao Delphi apoiando aplicativos de Bases de Dados

UpdateObject
Mtodo

Close ExecSQL FieldByName FindKey FindNearest First IsEmpty ParamByName Last Locate Lookup MoveBy Next Open Post Prior Refresh
Evento

AfterCancel AfterClose AfterOpen AfterScroll BeforeClose BeforeDelete BeforeOpen BeforeScroll OnCalcFields OnFilterRecord

Define um objeto UpdateSQL ser utilizado Descrio Fecha instruo SQL. Usado somente para instrues SELECT. Executa um comando SQL. Usado para todas as instrues SQL menos SELECT. 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 Define se a tabela est vazia Acessa um parmetro, do tipo TParam, pelo nome Move para o ltimo registro Procura um registro, usando ou no ndices, de acordo com a disponibilidade Procura um registro e retorna valores dos campos deste Move um nmero especfico de registros Move para o prximo registro Executa um comando SQL. Usado somente para instrues SELECT. Grava as alteraes no registro atual Move para o primeiro registro Atualiza a tabela com os dados j gravados Descrio Aps do mtodo Cancel Aps o fechamento da tabela Aps do mtodo Open Aps mudar de registro Antes do fechamento da tabela Antes do mtodo Delete Antes do mtodo Open Antes de mudar o registro Evento usado para calcular os valores dos campos calculados Evento usado com filtragem varivel

Tparam - lista de parmentros para uma instruo SQL. Um parmetro como uma varivel na instruo SQL. Para definir um parmentro na instruo SQL basta colocar dois pontos ( : ) antes da varivel.
Query1.SQL := 'Select * from Autor where id_autor = :pid_autor'; Query1.ParamByName( 'pid_autor' ).asinteger := 10; Query1.Open;

TUpdateSQL - define 3 instrues SQL para um componente Query.


Propriedades

InsertSQL DeleteSQL ModifySQL Mtodo ExecSQL

Descrio Define a instruo SQL para inserir registros Define a instruo SQL para apagar registros Define a instruo SQL para alterar registros Descrio Executa um comando SQL. No parmentro (ukModify, ukInsert, ukDelete) defini qual instruo ser usada

5.5

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.

50

Programao Delphi apoiando aplicativos de Bases de Dados

Componente
TDBGrid

Utilidade
Grade padro de controle de dados que possibilita visualizar e editar dados de forma tabular, semelhante a uma planilha; faz uso extensivo das propriedades do TField (estabelecidos no Editor de Campos(Fields Editor)) para determinar a visibilidade de uma coluna, formato da visualizao, ordem, etc. Botes de navegao para controle de dados que move o apontador do registro corrente de uma tabela para o posterior ou anterior, inicia insero ou modo de edio; confirma novos ou modificaes de registros; cancela o modo de edio; e refresca(refaz) a tela para recuperar dados atualizados. Rtulo de controle de dados que pode mostrar um campo corrente do registro ativo. Caixa de edio de controle de dados que pode mostrar ou editar um campo corrente do registro ativo. Caixa de verificao de controle de dados que pode mostrar ou editar dados lgico de uma campo corrente do registro ativo. Grupos de radio de controle de dados com botes de rdio que pode mostrar ou setar valores de colunas. Caixa memo de controle de dados que pode mostrar ou editar dados textos BLOB do registro corrente ativo. Caixa Rich Edit de controle de dados que pode mostrar ou editar dados textos BLOB do registro corrente ativo no formato (.RTF). Caixa de Imagem de controle de dados que pode mostrar, cortar ou colar imagens BLOB do registro corrente ativo. Caixa de Lista de controle de dados que pode mostrar valores da coluna de uma tabela. Caixa de Lista mvel de controle de dados que pode mostrar ou editar valores da coluna de uma tabela. Caixa de Lista de controle de dados que mostrar valores mapeados atravs de outra tabela em tempo de compilao. Caixa de Combo de controle de dados que mostrar valores mapeados atravs de outra tabela em tempo de compilao. Usado para criar grficos partir de DataSet

TDBNavigator

TDBText TDBEdit TDBCheckBox TDBRadioGroup TDBMemo TDBRichEdit TDBImage TDBListBox TDBComboBox TDBLookupList TDBLookupCombo TDBChart

TDBGrid - este componente permite mostrar/editar os registros de um arquivo na forma de tabela. A vantagem deste tipo de sada de dados que possivel ver vrios registros ao mesmo tempo. Mostra os registros de uma tabela em forma de grade, cada coluna um campo e cada registro, uma linha.
Propriedades

Columns DataSource 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 Componente DataSource que o controle est ligado 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

51

Programao Delphi apoiando aplicativos de Bases de Dados

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

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

DataSource VisibleButtons Hints ConfirmDelete


Eventos BeforeAction OnClick

Descrio Componente DataSource que o controle est ligado 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

TDBText - usado para mostra os valores de campos.


Propriedades DataField DataSource Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado

TDBEdit - usado para editar os valores dos campos.


Propriedades DataField DataSource Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado

TDBCheckBox - usado em campos que podem receber apenas dois valores, como campos lgicos.
Propriedades DataField DataSource ValueChecked ValueUnchecked Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado 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 DataField DataSource Items Values Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado Ttulo para cada boto de rdio Valor a ser armazenado para cada boto de rdio

52

Programao Delphi apoiando aplicativos de Bases de Dados

TDBMemo - usado para editar/visualizar campos com textos longos mas no usa formatao de caractere e de paragrafos. Geralmentes so armazenados nos SGBD em campos do tipo BLOB.
Propriedades

DataField DataSource

Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado

TDBRichEdit - usado para editar/visualizar campos com textos longos e usa formatao de caractere e de paragrafos. Geralmentes so armazenados nos SGBD em campos do tipo BLOB.
Propriedades

DataField DataSource

Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado

TDBImage - usado para editar/visualizar imagens. Geralmentes so armazenados nos SGBD em campos do tipo BLOB.
Propriedades

DataField DataSource

Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado

TDBListBox e TDBComboBox - conectados a um campo, permitem associar uma lista de strings para preencher o campo. Use quando existe uma lista de valores determinados que podem ser atribuidos ao campo. Exemplo: Se o campo armazena o Estado (UF) de um endereo, poderamos por todos os estados do Brasil em uma lista onde o usurio escolheria o estado desejado. Usado em campos que podem receber apenas dois valores, como campos lgicos.

Propriedades

DataField DataSource Items

Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado Lista de valores vlidos para o campo

TDBLookupListBox, TDBLookupComboBox - so componentes poderosos para tratar de


referncias a outros arquivos. Visualmente igual ao DBComboBox, a diferena que a lista de strings fornecida por outro arquivo. Exemplo: poderamos usa-los para que o usurio pudesse escolher o cdigo do clientes em uma lista. Essa lista vem do arquivo de clientes, de maneira que podemos ficar seguros que todos os cdigos na lista existem no arquivo de clientes. S que isso no tudo, podemos ir muito alm. Que tal se o que o usurio visse na lista fosse o nome e no o cdigo do cliente? Tambm possvel, e querendo podemos fazer aparecer na lista o nome e o cdigo do cliente. O componente sabe que na hora de gravar no arquivo o cdigo e no o nome do cliente que precisa ser gravado. 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

DataField DataSource ListSource ListField KeyField

Descrio Campo ao qual o controle est ligado Componente DataSource que o controle est ligado Componente DataSource que contm os valores a serem exibidos na lista Campo de ListSource que ser exibido Campo de ListSource usado no relacionamento

53

Programao Delphi apoiando aplicativos de Bases de Dados

TDBChart - componente que exibe valores no formato grfico.


TChartSeries
Propriedades

DataSource ColorSource XLabelsSource

Descrio Componente DataSource que o controle est ligado Campo que contm o valor nunrico para pintar o grfico Campo que ser visualizado no titulo da srie do grfico

6 6.1

RELATRIOS Impresso de Texto

A impresso de um relatrio contendo somente texto pode ser feita utilizando o mtodo tradicional do Pascal, com poucas modificaes:
var <relatrio>: TextFile; begin AssignPrn(<relatrio>); Rewrite(<relatrio>); Printer.Title := <ttulo do relatrio>; Writeln(<relatrio>, ...); . . . CloseFile(<relatrio>); end;

Para cancelar a impresso durante a gerao do relatrio pode-se utilizar o mtodo Abort do objeto Printer. O objeto Printer e o procedimento AssignPrn esto definidos na unit Printers.

6.2

Impresso Grfica

Propriedades Printing Title PageHeight PageWidth Orientation Canvas PageNumber Mtodos BeginDoc EndDoc NewPage Abort

A impresso grfica pura pode ser feita utilizando-se o objeto Printer: Descrio
Informa se existe algum documento sendo impresso pelo processo. Ttulo do relatrio Altura da pgina Largura da pgina Orientao (Landscape ou Portrait) a pgina propriamente dita Nmero da pgina sendo impressa

Descrio
Inicia a impresso Finaliza a impresso Inicia uma nova pgina Cancela uma impresso

A impresso propriamente dita de cada pgina feita no objeto Canvas: Propriedades Descrio
Font Brush Pen Mtodos TextOut MoveTo
Tipo de letra que ser utilizado na escrita Estilo e cor do preenchimento Estilo e espessura da linha

Descrio
Escreve um texto em uma determinada posio Move o posio de desenho para uma determinada posio

54

Programao Delphi apoiando aplicativos de Bases de Dados

LineTo PolyLine Arc Pie Rectangle RoundRect FillRect FloodFill Ellipse Draw StretchDraw CopyRect

Desenha uma linha da posio atual at a posio determinada Desenha uma srie de linhas Desenha um arco Desenha um setor de um grfico tipo torta Desenha um retngulo Desenha um retngulo com bordas arredondadas Desenha um retngulo preenchido Preenche uma rea qualquer Desenha uma elipse Coloca um Bitmap, cone ou Metafile no Canvas Coloca um Bitmap, cone ou Metafile no Canvas, alterando o tamanho da figura Copia uma rea do canvas para outro canvas

6.3

Impresso com o ReportSmith

O ReportSmith uma ferramenta que gera relatrios para diversas linguaguens de programao. A ferramenta permite criar relatrio a partir de um ambiente grfico. Cada relatrio criado salvo em um arquivo, que deve acompanhar a aplicao desenvolvida. Ele possui alguns relatrios padres, tais como relatrios colunados (mostra os dados em formas de colunas), referncia cruzada entre tabelas (mostra os dados tipos uma planilha, associando duas ou mais tabelas), etiquetas (gera etiquetas em formatos padro), relatrios em modo de pgina (mostra os registros de uma determinada tabela um por pgina). A ferramenta QuickReport mas disponvel gratuitamente com o Delphi 2.0, mas nas demais verses do delphi ele no gratuito. Atravs do ReportSmith, e possvel gerar relatrios com as seguintes caractersticas: Combinao de dados entre vrias tabelas; Ordem e grupo livre de dados atravs de determinados campos; Insero de cabealhos e rodaps; Funes de soma, mdia, mximo e mnimo; Criao de caixas de dilogo para insero de informaes, filtragem dos dados; Criao de relatrios do tipo master/details; Execuo de macros durante o relatrio; e Acesso as mais variadas bases de dados, entre elas:

6.4

Impresso com o QuickReport

A verso 2.0 do Delphi traz uma soluo visual para a elaborao rpida de relatrios, o QuickReport. A soluo utiliza o editor de formulrios do prprio Delphi e se basea no fato de que a maior parte dos relatrios composta por faixa de informaes.
Componentes QuickReport

Descrio
o controlador do relatrio. Transforma o formulrio do Delphi em um relatrio. ativado pelos mtodos Print e Preview. Permite visualizar o relatrio em tempo de desenvolvimento ao se selecionar a opo Preview no menu sensvel ao contexto. Define as faixas de informaes do relatrio, que podem ser Define rtulos a serem impressos Imprime campos de um DataSet Exibe o somatrio, mdia ou quantidade de registros, valor mximo e mnimo em um campo Imprime informaes do sistema como data, hora, nmero da pgina, etc. Imprime linhas e figuras Imprime um rtulo com mais de uma linha Utilizado na criao de relatrios mestre-detalhe Define um grupo de informaes

QRBand QRLabel QRDBText QRDBCalc QRSysData QRShape QRMemo QRDetailLink QRGroup

55

Programao Delphi apoiando aplicativos de Bases de Dados

QRPreview QRPrinter

Cria uma rea de exibio de relatrio, utilizada para preview derivado de TPrinter e permite visualizar, salvar e carregar um relatrio

QuickReport
Propriedades CollumnMarginInches CollumnMarginMM Columns DisplayPrintDialog LeftMarginInches LeftMarginMM Orientation RestartData ShowProgress Mtodos Preview Print

Descrio
Espao, em 1/10 de polegadas, entre colunas num relatrio MultiColuna. O mesmo que CollumnMarginInches, sendo que em milmetros. Nmero de colunas a serem impressas. Exibe a caixa de dilogo de impresso quando o mtodo QuickReport.Print executado. Margem esquerda, em 1/10 de polegadas. O mesmo que LeftMarginInches, sendo que em milmetros Orientao do Papel (poPortait ou poLandscape) Indica se o QuickReport ir para o primeiro registro do dataset ou inicia a partir do registro corrente. Indica se o formulrio de progresso ir aparecer na criao do formulrio. O formulrio de progresso possui um boto Cancel.

Descrio
Exibe um preview do formulrio Imprime o formulrio

QRBand
Propriedade BandType rbTitle rbPageHeader rbPageFooter rbColumnHeader rbDetail rbSubDetail rbGroupHeader rbGroupFooter rbSummary Color Enabled Font ForceNewPage Frame LinkBand Ruler Eventos BeforePrint AfterPrint

Descrio
Impresso uma vez no incio do relatrio Impresso uma vez no incio de cada pgina Impresso no rodap de cada pgina Semelhante ao rbPageHeader exceto pelo fato que impresso para cada coluna no caso de um relatrio multicoluna Replicado para cada registro do DataSet Usado como rbDetail em relatrios mestre-detalhe Impresso como cabealho de grupo de informaes. Deve ser indicado em um QRDetailLink Impresso como rodap de grupo de informaes. Deve ser indicado em um QRDetailLink Impresso no fim do relatrio Cor de fundo da faixa Indica se o QRBand ser impresso Fonte para os controles desse QRBand Fora que a impresso seja feita numa nova pgina Coloca molduras no QRBand Liga QRBands entre si, forando que sejam impressos numa mesma pgina Coloca uma rgua, em tempo de projeto, no QRBand

Descrio
Quando o QRBand vai ser impresso. A impresso pode ser cancelada atribuindo-se False ao parmetro PrintBand Ocorre aps a impresso ou tentativa de impresso de um QRBand. Se a impresso foi cancelada no evento BeforePrint o parmetro BandPrinted tem o valor True

QRLabel
Propriedade Alignment AutoSize Caption Color Font Descrio
Alinhamento do texto Controle automtico do tamanha do componente Texto a ser impresso Cor de fundo Fonte utilizada

56

Programao Delphi apoiando aplicativos de Bases de Dados

Transparente Eventos OnPrint

Define se o componente ser transparent

Descrio
Ocorre antes do componente ser impresso. O valor a ser impresso esta no parmetro Value

QRDBText
Propriedade Alignment AutoSize Color DataSource DataField Font Transparent Eventos OnPrint

Descrio
Alinhamento do texto Define se o tamanho do componente ser ajustado automaticamente de acordo com o seu contedo Cor de fundo para o componente Fonte de Dados Campo Fonte Indica se o componente ser transparente

Descrio
Ocorre antes do componente ser impresso. O valor a ser impresso esta no parmetro Value

QRDBCalc
Propriedade AsInteger AsReal Operation

Descrio
Retorna o Valor corrente com inteiro Retorna o Valor corrente como real Operao de Calculo a ser realizada qrcSum - Somatrio de um campo qrcCount - Nmero de registro de um campo qrcMax - Valor mximo de um campo qrcMin - Valor mnimo de um campo qrcAverange - Mdia de um campo Mscara de sada do QRDBCalc Zera os clculos sempre for impresso

PrintMask ResetBand Eventos OnPrint

Descrio
Antes do componente ser impresso

QRSysData
Propriedade Data Alignment AutoSize Color Font Transparente Eventos OnPrint

Descrio
Informao a ser exibida (Hora, Data, Nmero da Pgina, Ttulo do Relatrio, Contado de Detalhes, Registro Corrente) Alinhamento do texto Controle automtico do tamanha do componente Cor de fundo Fonte utilizada Define se o componente ser transparent

Descrio
Ocorre antes do componente ser impresso. O valor a ser impresso esta no parmetro Value

QRShape
Propriedade Brush Pen Shape Height Width

Descrio
Cor e Traado da Figura Caneta usada na pintura Tipo da Figura Altura da figura Largura da figura

57

Programao Delphi apoiando aplicativos de Bases de Dados

Eventos OnPrint

Descrio
Ocorre antes do componente ser impresso. O valor a ser impresso esta no parmetro Value

QRMemo
Propriedade Alignment AutoSize Lines WordWrap Color Font Transparente

Descrio
Alinhamento do texto Controle automtico do tamanha do componente Texto a ser impresso Quebra automtica de linha de acordo com o tamanho do componente Cor de fundo Fonte utilizada Define se o componente ser transparent

QRDetailLink
Propriedade DataSource DeatilBand FooterBand HeaderBand Master PrintBefore Eventos OnFilter
Descrio Fonte de Dados na qual um relacionamento mestre-detalhe deve ter sido defenido QRBand detalhe QRBand rodap QRBand cabealho QuickReport ou outro QRDetailLink. Um relacionamento mestre-detalhe deve ser definido entre as tabelas envolvidas Inidica se a informao mestre ser impresso antes ou depois dos detalhes Descrio Ocorre a cada movimento do ponteiro de registros no dataset e o parmetro PrintRecord pode ser utilizado para evitar a impresso do registro corrente

QRGroup
Propriedade DataSource DataField FooterBand HeaderBand Level Descrio
Fonte de Dados Campo que servir como base para o grupo Rodap do grupo Cabealho do grupo Nvel do grupo

QRPreview
Propriedade PageNumber Zoom Mtodos ZoomToFit ZoomToWith

Descrio
Escolha da pgina a ser exibida Escolha do zoom

Descrio
Ajusta o zoom para caber todo o relatrio no formulrio Ajusta o zoom horizontal para caber todo o relatrio no formulrio

CONCLUSO

Este trabalho apresentou as caractersticas gerais do ambiente de programao Delphi da Borland, sem abordar os fundamentos de lgica de programao e outras peculiaridades de programao visual. Foi enfatizada a forma de se utilizar Delphi juntamente com os recursos de Bases de Dados que podem ser ento includos nos aplicativos. No foi pretendido com essas notas didticas explorar todos recursos de programao que podem ser obtidos no ambiente Delphi. No entanto, tem-se um conjunto bsico das referncias de 58

Programao Delphi apoiando aplicativos de Bases de Dados

mecanismos e recursos que podem ser utilizados como suporte nas prticas de aplicativos que precisam de suporte de Bases de Dados.

Remissivo
1 INTRODUO ............................................................................................................................................ 4 1.1 PRINCIPAIS CARACTERSTICAS DO DELPHI.................................................................................................. 4 1.2 CARACTERSTICAS DO DELPHI CLIENT/SERVER.......................................................................................... 5 2 O AMBIENTE DELPHI .............................................................................................................................. 5 2.1 2.2 2.3 2.4 2.5 3 COMO FORMADA UMA APLICAO EM DELPHI ........................................................................................ 5 CDIGO FONTE DO ARQUIVO PROJECT(.DPR)............................................................................................. 7 CDIGO FONTE DO ARQUIVO UNIT (.PAS) .................................................................................................. 7 ARQUIVOS GERADOS PELA COMPILAO ................................................................................................... 9 AMBIENTE DE PROGRAMAO.................................................................................................................... 9

FUNDAMENTOS DE OBJECT PASCAL............................................................................................... 11 3.1 CONCEITOS DE PROGRAMAO ORIENTADA A OBJETOS .......................................................................... 11 3.2 VARIVEIS ................................................................................................................................................ 11 Variveis Globais ......................................................................................................................................... 11 Variveis Locais ........................................................................................................................................... 11 3.3 ATRIBUTOS ............................................................................................................................................... 12 3.4 ENCAPSULAMENTO ................................................................................................................................... 12 3.5 CLASSES ................................................................................................................................................... 12 3.6 OBJETOS ................................................................................................................................................... 13 3.7 LITERAIS ................................................................................................................................................... 13 3.8 CONSTANTES ............................................................................................................................................ 13 Constantes Tipadas ...................................................................................................................................... 13 3.9 INSTRUES.............................................................................................................................................. 13 Estilo de Codificao ................................................................................................................................... 14 3.10 COMENTRIOS...................................................................................................................................... 14 3.11 TIPOS DE DADOS PADRO .................................................................................................................... 14 Tipos Inteiros................................................................................................................................................ 14 Tipos Reais ................................................................................................................................................... 14 Tipos Texto ................................................................................................................................................... 14 Tipos Ordinais.............................................................................................................................................. 15 Boolean......................................................................................................................................................... 16 TDateTime .................................................................................................................................................... 16 Variant.......................................................................................................................................................... 17 3.12 CONVERSES DE TIPO .......................................................................................................................... 17 TypeCasting.................................................................................................................................................. 17 Rotinas de Converso................................................................................................................................... 17 3.13 EXPRESSES ......................................................................................................................................... 18 3.14 OPERADORES ........................................................................................................................................ 18 3.15 ESTRUTURAS DE DECISO .................................................................................................................... 19 3.16 ESTRUTURAS DE REPETIO ................................................................................................................ 19 3.17 TIPOS DEFINIDOS PELO USURIO.......................................................................................................... 20 Strings Limitadas.......................................................................................................................................... 20 Tipo Sub-Faixa. ............................................................................................................................................ 20 Enumeraes. ............................................................................................................................................... 21 Ponteiros ...................................................................................................................................................... 21 Records......................................................................................................................................................... 21 Arrays. .......................................................................................................................................................... 21 Sets. .............................................................................................................................................................. 21 3.18 PROCEDIMENTOS, FUNES E MTODOS.............................................................................................. 22 Procedimentos .............................................................................................................................................. 22

59

Programao Delphi apoiando aplicativos de Bases de Dados

Funes ........................................................................................................................................................ 22 Mtodos ........................................................................................................................................................ 22 Parmetros ................................................................................................................................................... 23 3.19 WITH .................................................................................................................................................... 23 3.20 SELF ..................................................................................................................................................... 23 3.21 CRIANDO E DESTRUINDO OBJETOS ...................................................................................................... 23 3.22 RTTI .................................................................................................................................................... 24 3.23 EXCEES ............................................................................................................................................ 24 Blocos Protegidos......................................................................................................................................... 25 Principais Excees...................................................................................................................................... 25 Blocos de Finalizao .................................................................................................................................. 25 Gerao de Excees ................................................................................................................................... 26 Erros de Bancos de Dados ........................................................................................................................... 26 4 BIBLIOTECA DE CLASSES.................................................................................................................... 28 4.1 NOMENCLATURA ...................................................................................................................................... 28 4.2 PROPRIEDADES ......................................................................................................................................... 28 Tipos de Propriedade ................................................................................................................................... 28 Propriedades Comuns .................................................................................................................................. 29 4.3 EVENTOS................................................................................................................................................... 29 Eventos Comuns ........................................................................................................................................... 29 4.4 MTODOS ................................................................................................................................................. 30 Mtodos Comuns .......................................................................................................................................... 30 4.5 JANELAS ................................................................................................................................................... 30 4.6 COMPONENTES PADRO ........................................................................................................................... 31 Tbutton. ........................................................................................................................................................ 31 TbitBtn .......................................................................................................................................................... 31 TspeedButton. ............................................................................................................................................... 31 Tlabel............................................................................................................................................................ 31 Tedit.............................................................................................................................................................. 32 TmaskEdit..................................................................................................................................................... 32 Tmemo. ......................................................................................................................................................... 32 TcheckBox. ................................................................................................................................................... 33 TradioButton. ............................................................................................................................................... 33 TradioGroup................................................................................................................................................. 33 Tpanel........................................................................................................................................................... 33 TscrollBox. ................................................................................................................................................... 33 TgroupBox. ................................................................................................................................................... 33 Tbevel. .......................................................................................................................................................... 33 TlistBox......................................................................................................................................................... 33 TcomboBox................................................................................................................................................... 34 Timage.......................................................................................................................................................... 34 Tpicture. ....................................................................................................................................................... 34 TpageControl................................................................................................................................................ 34 TtabSheet...................................................................................................................................................... 34 Tshape. ......................................................................................................................................................... 34 Ttimer. .......................................................................................................................................................... 34 TstatusBar. ................................................................................................................................................... 35 TstatusPanels................................................................................................................................................ 35 TstatusPanel. ................................................................................................................................................ 35 4.7 CAIXAS DE DILOGO ................................................................................................................................ 35 TOpenDialog / TsaveDialog......................................................................................................................... 35 TfontDialog. ................................................................................................................................................. 35 4.8 MENUS...................................................................................................................................................... 35 TmainMenu................................................................................................................................................... 36 TpopUpMenu................................................................................................................................................ 36 TmenuItem . .................................................................................................................................................. 36 4.9 CLASSES NO VISUAIS ............................................................................................................................. 36

60

Programao Delphi apoiando aplicativos de Bases de Dados

Tapplication. ................................................................................................................................................ 36 Tscreen. ........................................................................................................................................................ 37 Tprinter......................................................................................................................................................... 37 Tcanvas......................................................................................................................................................... 37 Tlist............................................................................................................................................................... 38 TstringList .................................................................................................................................................... 38 Tregistry . ..................................................................................................................................................... 38 5 BANCOS DE DADOS ................................................................................................................................ 38 5.1 CONCEITOS IMPORTANTES ........................................................................................................................ 38 5.2 BORLAND DATABASE ENGINE .................................................................................................................. 38 Fonte de Dados ............................................................................................................................................ 38 5.3 ARQUITETURA DE ACESSO ........................................................................................................................ 38 5.4 DATA ACCESS ........................................................................................................................................... 39 Tdatabase. .................................................................................................................................................... 39 Ttable............................................................................................................................................................ 40 Tfield............................................................................................................................................................. 46 TdataSource. ................................................................................................................................................ 49 Tquery........................................................................................................................................................... 49 TUpdateSQL................................................................................................................................................. 50 5.5 DATA CONTROLS ...................................................................................................................................... 50 TDBGrid....................................................................................................................................................... 51 TDBNavigator. ............................................................................................................................................. 52 TDBText........................................................................................................................................................ 52 TDBEdit........................................................................................................................................................ 52 TDBCheckBox. ............................................................................................................................................. 52 TDBRadioGroup. ......................................................................................................................................... 52 TDBMemo. ................................................................................................................................................... 53 TDBRichEdit. ............................................................................................................................................... 53 TDBImage. ................................................................................................................................................... 53 TDBListBox e TDBComboBox. .................................................................................................................... 53 TDBLookupListBox, TDBLookupComboBox. .............................................................................................. 53 TDBChart. .................................................................................................................................................... 54 6 RELATRIOS ........................................................................................................................................... 54 6.1 IMPRESSO DE TEXTO............................................................................................................................... 54 6.2 IMPRESSO GRFICA ................................................................................................................................ 54 6.3 IMPRESSO COM O REPORTSMITH ............................................................................................................ 55 6.4 IMPRESSO COM O QUICKREPORT ............................................................................................................ 55 QuickReport.................................................................................................................................................. 56 QRBand ........................................................................................................................................................ 56 QRLabel ....................................................................................................................................................... 56 QRDBText .................................................................................................................................................... 57 QRDBCalc.................................................................................................................................................... 57 QRSysData ................................................................................................................................................... 57 QRShape....................................................................................................................................................... 57 QRMemo....................................................................................................................................................... 58 QRDetailLink................................................................................................................................................ 58 QRGroup ...................................................................................................................................................... 58 QRPreview.................................................................................................................................................... 58 7 CONCLUSO ............................................................................................................................................ 58

61

Potrebbero piacerti anche