Sei sulla pagina 1di 75

INTRODUÇÃO

O
Delphi é um Ambiente Integrado de
Desenvolvimento (IDE – Integrated
Development Enviroment) que permite a
edição, compilação, depuração e execução de
aplicativos para plataforma Windows. O ambiente do
Delphi inclui um compilador que está entre os mais
rápidos do mercado, um depurador, que corrige os
problemas e erros nos programas, ajuda on-line, e
outras ferramentas que facilitam o desenvolvimento de
projetos.

Capaz de gerar arquivos executáveis (.EXE) e


bibliotecas de código que podem ser usadas por outros
aplicativos, essa linguagem também permite criar
componentes novos e adicioná-los a seu ambiente.

Essa ferramenta trabalha com os mais populares


SGBD’s, por exemplo o ORACLE, SQL SERVER, DB2,
ACCESS, SYBASE e outros. Além disso trabalha com
banco de dados nativo, como Paradox, que substitui
banco de dados complexos principalmente em aplicações que rodem em poucos
computadores.

CARACTERÍSTICAS IMPORTANTES

 Compilador Pascal
 Escrito em Assembler e em Delphi
 Gera código .EXE e DLL’s
 Ambiente Visual (VCL – Visual Componente Library)
 Editor de texto próprio (Code Editor) configurável de acordo com a sintaxe
 Codificação em Linguagem Object Pascal
 Suporte a Programação Orientada a Eventos (POE) e a Programação Orientada
Objetos (POO);
 Suporte a Multimídia
 Acesso a API’s do Windows
 Acesso nativo a tabelas Paradox, Dbase, e LocalInterbase
 Acesso a banco de dados: Informix, Oracle, Sybase, MSSQL Server, Interbase
através de drivers fornecidos na versão Enterprise.
VERSÕES DO DELPHI 7

1. Desktop (básica): Possui ferramentas para criação de aplicativos para


Windows95/98 ...
2. Professional : Versão própria para o desenvolvedor profissional com
suporte a banco de dados.
3. Enterprise : É a mais completa das versões. Permite a criação de
aplicações cliente/servidor e possui ferramentas
relacionadas com SQL.

EXTENSÕES GERADAS PELO DELPHI

 .DPR Projeto Delphi escrito em código fonte Pascal.


 .PAS Código Fonte da Unit (Pascal)
 .DFM Arquivo de Formulário Gráfico. Nele está a descrição das
propriedades do formulário e dos controles.
 .DCU Unidade Compilada do Delphi. É o resultado da compilação de um
arquivo .PAS.
 .DOF Arquivo de texto com as configurações correntes para as opções de
projeto.
 .RES Arquivo de recursos que contém ícones. Outros arquivos desse tipo
podem ser acrescentados ao projeto.
 .DSK Configuração de Desktop. Contém informações sobre as disposições das
janelas, arquivos abertos no editor e outras opções de ambiente.
 .DFN Arquivo de Suporte para o Integrated Translation Environment.
 .RPS Translation Repository (parte do Integrated Translation Environment).
 .DTI Design Time Information, usado pelo novo DataModule Designer.
 .TODO Arquivo da lista to-do.
 .UDL Usado pelo ADO para fazer referência a um provedor de dados.
 .EXE Executável Compilado com todas as Unit’s, Form’s e recursos.
 .DLL Dynamic Link Library.
 .OCX OLE Control Extension. É uma versão especial de uma DLL contendo
controles ou formulários ActiveX.
 .HTM Ou HTML, Hyper Text Markup Language; O arquivo usado pelas
páginas Web da Internet.
 .~?? Backup
SUMÁRIO

Unidade 1:

Programação orientada a objetos, 01

Unidade 2:

IDE Delphi 5,

Unidade 3:

Linguagem Object Pascal,

Unidade 4:

Componentes Padrão,

Unidade 5:

Tratando Exceções, 50

Unidade 6:

Banco de Dados

Unidade 7:

Acesso a Banco de Dados,

Unidade 8:

Noções de SQL,

Unidade 9:

Relatórios no Delphi,

Referências Bibliográficas,
UNIDADE 1

PROGRAMAÇÃO ORIENTADA a OBJETOS

Apresenta três conceitos fundamentais:

 Linguagens baseadas em objetos sustentam objetos, ou seja, elementos


com uma definição e um estado.
 Linguagens baseadas em classes têm objetos e classes.
 Linguagens orientadas a objetos também têm herança e polimorfismo, dois
elementos que freqüentemente são usados.

Linguagem Tradicional (procedural)

Não há distinção sobre qual procedure


Procedure 1
pode agir sobre tal dado. Os dados são
estruturados de forma a poderem ser
processados por um conjunto mutável de
Procedure 2 Dados procedures.

Procedure 3

Orientado ao Objeto

Nesse sistema, primeiro os programas são coleções de uma única entidade


básica, o objeto, que combina dados e procedures que agem sobre ambos
(métodos). Segundo, diferentemente de programas tradicionais que usam
procedures para executar ações em um lote determinado de dados passivos, os
objetos recebem solicitações e interagem passando mensagens uns para os outros.
Finalmente, a organização hierárquica dos objetos em classes permite que dados e
métodos de uma classe ancestral sejam herdeiros dos seus descendentes.

Dados Dados
Métodos Métodos

Objeto Objeto

Dados Dados
Métodos Métodos
Objeto Objeto

Linguagem de Programação Delphi 1


CONCEITOS BÁSICOS

OBJETO É qualquer módulo que faz parte de um produto. É a instância de


uma classe. Apresenta propriedades e eventos associados a ele.

CLASSES Grupo de objetos, cada um com um estado específico, mas todos


capazes de executar as mesmas operações.

HERANÇA Artifício que permite montar um novo objeto a partir de um já


existente. Com esse conceito é possível construir uma nova classe,
definido-a em termos de uma outra já existente, em vez de
construir a classe a partir do zero.

O que deu Origem: Objeto “Pai” acontece o mesmo com as classes


O que herdou: Objeto “Filho”.

POLIMORFISMO Permite fazer referências a objetos de classe, diferentes


por meio da mesma variável de programa. Também
permite realizar operações nessa variável de várias
formas, de acordo com a classe do objeto atualmente
associada à variável no momento.

Linguagem de Programação Delphi 2


UNIDADE 2

IDE DO DELPHI 5

Vamos conhecer agora o IDE (Ambiente de Desenvolvimento Integrado) do


Delphi 5. Para executar o Delphi basta seguir o caminho abaixo:

Programas\Borland Delphi 5\Delphi 5

Logo após a inicialização e carga do Delphi, a sua Interface nos aparece


composta por várias janelas independentes que podem ser sobrepostas e
reorganizadas a seu critério na tela.
Barra de Ferramentas(SpeedBar)
Barra de Menu

Paleta de
Componentes

Formulário

Code Editor

Object
Inspector

Linguagem de Programação Delphi 3


JANELA PRINCIPAL

Localizada na parte de cima da tela, contém a Barra de Menu, a Barra de


Ferramentas (SPEEDBAR), a Paleta de Componentes (Component Palette) e Barra
de Ferramentas Desktop.

Barra de Menu Barra de Ferramenta Desktop

Paleta de Componentes
Barra de Ferramentas

Novidade
O recurso Desktop permite organizar as janelas do Delphi da maneira
ideal para o seu trabalho. Você posiciona as janelas de acordo com sua
necessidade e pode gravar esta configuração como um Desktop. Os
únicos itens que não sofrem alteração com a mudança de desktop são o
formulário e a paleta de componentes.

BARRA D E FERRAMENTAS
Fornece atalhos para os comandos mais comuns como compilar e executar
projetos, abrir ferramentas, salvar alterações, entre outros. Posicionando o cursor do
mouse sobre a speedbar e clicando o botão direito, o usuário poderá personalizá-la
através da opção properties (propriedades) do menu popup.

Opção para novo item(Aplicação, Unit, DataModule...)


Abrir ou Reabrir geral
Salva unit corrente
Salva tudo
Abrir projetos
Adicionar uma unit ao projeto
Remover unit do projeto
Lista de units do projeto
Lista de Forms do Projeto
Alterna entre o Form e o unit(Code Editor)
Acrescenta um novo Form ao Projeto
Compila e executa o Projeto(F9)
Pausa
Depurar o Projeto(F7)
Pular a Depuração(F8)

Linguagem de Programação Delphi 4


PALETA DE COMPONENTES

Nessa paleta são escolhidos os componentes que vão fazer parte do projeto.
Ela está dividida em várias páginas (abas de seleção) e cada uma delas contém seus
objetos. Esses objetos estão dispostos nas abas de acordo com sua funcionalidade.

A paleta apresenta, também, espaços em branco para que, posteriormente,


sejam incluídos novos objetos, seja de versões anteriores do Delphi (.OCX) ou do
Visual Basic (.VBX), como objetos adquiridos no mercado em forma de pacotes
prontos para serem integrados ao sistema (vantagem da POO).

No nosso curso iremos conhecer componentes básicos importantes!!!

FORMULÁRIOS/UNIDADES

É, juntamente com a UNIT, o ponto central do desenvolvimento Delphi. Nele


será construído a interface com o usuário. O formulário é um objeto que contém
outros objetos. Sem que haja um só movimento para implementá-lo, ele já contém
um controle de menu, botões (maximizar, minimizar, fechar), barra de títulos e
bordas redimensionáveis.

Linguagem de Programação Delphi 5


Cada formulário está associado a um código de programa (Unit) e nele serão
escritas todas as ações do objeto (eventos). As Unit’s são exibidas no Code Editor
(Editor de códigos do Delphi).

Code Explorer

Nota
A janela Code Explorer, contém
informações estrturadas sobre a unit.
Para deixar de exibir a janela basta clicar
no botão fechar da mesma.

O Code Editor acessa o código gerado pelo projeto e pode mostrar várias units
ao mesmo tempo. Para mudar de uma para outra unit basta clicar na ‘aba’
correspondente.

A Unit é unidade de código fonte codificada em Object Pascal e uma grande


parte desse código é escrito e alterado pelo próprio Delphi à medida em que o
desenvolvedor inclui objetos ou os altera.Na Unit também codificamos nossos
procedimentos.

Toda vez que uma aplicação é inicializada, é criado um formulário (Form1),


uma unidade (Unit1) e um arquivo de projeto (Project1); esse último é um arquivo
texto que contém a “receita” do projeto.

Nele constam os formulários units e os demais objetos que serão compilados


para a geração do aplicativo.

Estrutura de
.DPR
Um Projeto

.DFM ..PAS

Linguagem de Programação Delphi 6


Quando um projeto novo é aberto a Unit principal (definida no Project Manager) é a
primeira a aparecer no Code Editor. Seu nome aparece na ‘aba’, no topo da página.
Para abrir outras Units basta ir ao View|Project Manager, selecionar um novo
arquivo e clicar em Unit. Uma página no editor será aberta para mostrar o código
fonte dele.

Use o mouse sobre a “aba” para navegar entre as Units ou CTRL+TAB para
posicionar na próxima Unit ou CTRL+SHIFT+TAB para voltar à anterior. Para
visualizar o Form associado à Unit ou se estiver no Form e quiser ver a Unit
pressione a tecla F12.

O Editor de códigos permite ao usuário configurá-lo para que melhor se


adapte à sua maneira. Para acessar a configuração basta posicionar o mouse dentro
do editor e pressionar o botão direito do mouse que aparecerá um menu suspenso.
Na opção Properties|Environments Options aparecerá três ‘abas’. A primeira, Editor,
não é muito usada por conter configurações avançadas; a página Display define a
aparência e a organização da tela, como a geração de backup da Unit quando o
arquivo é salvo e as fontes usadas , entre outras. A terceira e última página, Colors,
define as cores usadas para o efeito de Syntax Highlighting. O usuário pode
configurar as cores dos elementos (comentários, palavras-chaves, constante,
variáveis...) mudando o estilo na hora da digitação do código-fonte.

Nota RECURSO CODE INSIGHT


Além do Code Explorer, o Delphi possui desde a versão 3 o Code
Insight. O Code Insight é um conjuto de recursos técnicos que por
exemplo lhe exibe uma lista de
propriedades,métodos,procedimentos... que lhe serve de apoio na
codificação. Ele é ativado quando pressionadas as teclas
CTRL+Barra Espaço.
Code Completion: na digitação do código é aberta uma lista de
propriedades, procedimentos e funções relacionadas ao termo
digitado.
Code Parameter: exibe, em uma janela de dica, o tipo de dado
de uma função ou parâmetros de método quando o usuário
estiver digitando o código.
Code Templates: permite a inserção de um modelo de código
(‘esqueleto’) predefinido, como uma declaração complexa com um
bloco begin-end interno. Para inserir no código uma template
Nota EDITOR PROPERTIES
basta digitar o nome dela e pressionar CTRL+J.
Clicando com botão direito do mouse no
Editor Code, você configura o “Visual” do
Editor e o Code Insight

Linguagem de Programação Delphi 7


ALIGNMENT PALETTE
Nota
Exceto pelos botões CENTER HORIZONTALLY IN WINDOW
E CENTER VERTICALLY IN WINDOWS, que podem ser
aplicados a um único componente, todos os demais são
aplicáveis a vários componentes selecionados.

Seguindo a seqüência da esquerda para direita, fileira de cima.

Align left edges: alinha os componentes selecionados pelo canto esquerdo do


primeiro componente selecionado.
Align horizontal centers: alinha os componentes selecionados pelo centro do
componente primeiro selecionado.
Center horizontally in window: alinha o(s) componente(s) selecionado(s) no
centro do formulário ao longo de uma linha horizontal.
Space equally, horizontally: alinha os componentes selecionados espaçando-os
igualmente na horizontal.
Align right edges: alinha os componentes selecionados pelo canto direito do
primeiro componente selecionado.
Align tops: alinha os componentes selecionados pelo canto superior do primeiro
componente selecionado.
Align vertical centers: alinha os componentes selecionados, verticalmente, até
que os centros fiquem alinhados com o componente que foi primeiro selecionado.
Center vertically in window: alinha o(s) componente(s) selecionado(s) no centro
do formulário ao longo de uma linha vertical.
Space equally, vertically: alinha os componentes selecionados espaçando-os
igualmente na vertical.
Align bottoms: alinha os componentes selecionados pelo canto inferior do primeiro
componente selecionado.

Da mesma forma, selecionando os objetos a serem alinhados e clicando com


botão direito do mouse você vai encontrar outras opções de alinhamento como
mostra a imagem abaixo:

Linguagem de Programação Delphi 8


I NSPETOR DE OBJETOS

Todo Componente incluído tem Propriedades


e Métodos a ele associado. O Object Inspector
permite alterar as Propriedades(características)
dos objetos, inclusive do próprio From em
tempo de projeto e programar seus Eventos.
Composto por duas páginas: Properties1
(propriedades) e Events2 (eventos).
As propriedades e eventos variam de acordo
com o objeto que foi selecionado.
O seletor de Objetos do Object Inspector
permite ao usuário localizar facilmente qualquer
objeto do formulário, nele é mostrado qual o
objeto atualmente selecionado, descriminando
seu Name(nome) e sua Classe.

Button1 : Name do componente selecionado


TButton : Classe do componente selecionado

Nota
Caso o Objet Inspector não esteja sendo
visualizado, basta ir ao menu View\Objet
Inspect ou teclar (F11)

1
Propriedades : Propriedades são características básicas de um componente. Cada
componente no Delphi possui uma série de Propriedades com um
valor default. Note que na imagem acima(Object Inspector)
aparecem algumas relativas a um compenente Button1(Botão) tais
como: caption(descricão da face do botão), sua fonte, cor da
fonte, etc., todas elas com um valor padrão definido pelo Delphi
mas que você pode modificar. As Propriedades podem ser
alteradas em tempo de projeto(design-time) ou em tempo de
execução(run-time). Para fazer uma alteração em tempo de
execução é preciso fazer uma atribuição de valor através do
operador :=(sinal d atribuição do Object Pascal).
Nome-do-componente.Propriedade := ValorPropriedade ;
Exemplo: Button1.Caption := ‘Novo Nome’ ;
2
Eventos : Eventos são acontecimentos, normalmente provocados por ações
do usuário ao programa em tempo de execução. Nós podemos
programar respostas a estes estímulos. Existem eventos como:
Clicar em um componente, entrar em um componente, sair de um
componente, etc.

Linguagem de Programação Delphi 9


*
Método : Existe também em um componente o que chamamos de Método.
Método é tipo especial de função que está relacionado a uma
classe de objeto.Os diversos componenetes disponíveis no Delphi
são objetos que, em geral, possuem uma quantidade de Métodos
que podemos invocá-lo em tempo de execução.
Exemplo de Métodos : Close, Setfocus, Clear. Ao decorrer do
curso entraremos mais em detalhes no que diz respeito a
Propriedades, Eventos, Métodos.

PROJECT MANAGER ( GERENCIANDO PROJETOS)

No Project Manager você tem a visão global de todo seu projeto. Considere
também que você tenha 2 ou mais projetos independentes um do outro. A partir da
versão 4 do Delphi é possível mantê-los dentro de uma estrutura de Grupo de
Projetos. Cada projeto é tratado de forma independente. No entanto, do ponto de
vista de organização, eles podem ficar agrupados, de forma a auxiliar você nas
tarefas de desenvolvimento e manutenção.

Adiciona Projeto ao
Grupo de Progetos

Nota
Para chamar o Project Manager siga
o caminho:
Menu View\Project manager ou
CTRL+Alt+F11

Linguagem de Programação Delphi 10


TO-DO LIST (LISTA DE TAREFAS)

Esta ferramenta é de grande valia para auxiliá-lo no desenvolvimento de seus


projetos. Com ela é possível criar uma listagem de tarefas que precisam ser
implementadas no sistema.
Sua utilização é bem simples, basta clicar com o botão direito do mouse sobre
a janela Code Editor e selecionar a opção Add To-Do Item... ou Shift+Ctrl+T,
para que a janela Add TO-DO seja exibida:

Mensagem a ser
acrescentada a lista TO-DO

Sua prioridade
Até 5(cinco) Sua categoria

Quem ficará responsável

Preencha corretamente as informações nos campos e, em seguida, você verá


uma linha de comentário de lembrete, com uma codificação especial, adicionada a
sua Unit:
{ TODO 1 -oAlexander -cRotinas de Exceções : Fazer Rotina de
Tratamento de Chaves Primárias }

A janela To-Do List pode ser exibida clicando no menu Menu View\To-Do
List.

Ao excluir os itens contidos nesta janela, automaticamente a linha de código


será removida. Marcando Done para o item, o comentário na Unit sofrerá a seguinte
alteração:
{ DONE 1 -oAlexander -cRotinas de Exceções : Fazer Rotina de
Tratamento de Chaves Primárias }

Nota
Você pode selecionar o ítem da TO-DO
list e deletá-lo. Fazendo isto o Delphi
remove o comentário da Unit ao invés
Tarefa Relizada
de colocar a cláusula DONE.

Linguagem de Programação Delphi 11


O OBJECT REPOSITORY

O Delphi possui vários comandos de menu que você pode usar para criar um
novo formulário, uma nova aplicação, um novo módulo de dados, etc. Estes
comandos estão localizados no Menu File e em outros menus suspensos que iremos
observar ao decorrer do nosso curso.Quando você clica no Menu File\New abre o
Object Repository, que é para criar novos elementos de qualquer tipo : Formulários,
aplicativos, módulos de dados, componentes,etc.

MEU PRIMEIRO PROGRAMINHA

Que tal matarmos um pouco a ansiedade ! Vamos fazer um programinha


simples e executá-lo. Iremos aproveitar a ocasião e observar os arquivos criados
pelo Delphi 5. Mãos à obra !!

Passos :

1. Crie uma Pasta de Trabalho na raíz da unidade C: de nome “Numero1”


(C:\Numero1);

3. Crie no Delphi uma nova aplicação (Menu File| New Application);

4. Click no Form1 do projeto;

5. Click na tecla (F11) para chamar o Object Inspector ;

6. Click agora na guia(ou aba) Events(Eventos) do Object Inspector;

7. Localize nos vários eventos o de nome : OnClick (este evento é acionado quando
o usuário clicar no form !!), dê um duplo-click neste evento;

Linguagem de Programação Delphi 12


8. No seu Editor de Código aparecerá:

procedure TForm1.FormClick(Sender: TObject);


begin

end; Entre o begin e o end; você irá digitar o seguinte código :

end. Showmessage(‘Você clicou em mim no seu Primeiro Programinha’) ;

9. Em seguida click no botão Run na SpeedBar;


10. Click no Form para ver a mensagem que você programou no
evento OnClick do mesmo.Pronto, não foi fácil!!?? Parabéns!!

Linguagem de Programação Delphi 13


UNIDADE 3

LINGUAGEM OBJECT PASCAL

Antes de começarmos a estudar a Linguagem Object Pascal, veremos as


estruturas do arquivo de Projeto(.DPR) e do arquivo de fonte Unit(.PAS).

CÓDIGO FONTE DO ARQUIVO PROJECT(.DPR)


Neste arquivo está escrito o código de criação da aplicação e seus formulários.
O arquivo Project tem apenas uma seção.
Esta seção é formada pelo seguinte código:

program Definição do nome do Projeto;


uses Cláusula que inicia uma lista das unidades(Units) do Projeto.
Observe que o nome Form correspondente a unit aparece entre
chaves.
Forms É a unidade do Delphi que define a forma e os componentes do
aplicativo
in A cláusula indica ao compilador onde encontrar o arquivo Unit.
unit1 A unidade que você criou
{$R *.RES} Diretiva compiladora que inclui o arquivo de recursos.
Begin \ end. Constitui o roteiro principal do projeto. Na primeira linha estão as
tarefas de inicialização do projeto, seguido da criação do
formulário na memória e execução do aplicativo com o comando
Run.

Abaixo veja como fica o Project quando você abre um projeto novo( Menu File|
New Application):

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
CÓDIGO FONTE DO ARQUIVO UNIT (.PAS)
Nesta divisória serão escritos os códigos dos seus respectivos forms (Unit1 =
Form1). Aqui serão definidos os códigos de cada procedimento dos componentes
que você colocar no form.

Linguagem de Programação Delphi 14


Seção Unit
Declara o nome do arquivo salvo unit.
Seção Uses
Contém as units acessadas por este arquivo.
Seção Interface
Nesta seção estão as declarações de constantes, tipos de variáveis,
funções e procedures gerais da Unit/Form. As declarações desta seção são
visíveis por qualquer Unit. Esta seção é formada pelo seguinte código:

interface Palavra que inicia a seção;


uses Cláusula que inicia uma lista de outras unidades compiladas (units)
em que se baseia:
SysUtils utilitários do sistema (strings, data/hora, gerar arquivos)
Wintypes tipos de dados e valores constantes
Messages constantes com os números das mensagens do Windows
e tipos de dados das Mensagens
Classes elementos de baixo nível do sistema de componentes
Graphics elementos gráficos
Controls elementos de nível médio do sistema de componentes
Forms componentes de forma e componentes invisíveis de
aplicativos
Dialogs componentes de diálogo comuns
Seção Type
Declara os tipos definidos pelo usuário. Subseções: Private, declarações
privativas da Unit. Public declarações publicas da Unit.

Seção Var
Declara as variáveis privadas utilizadas.
Seção Implementation
Contém os corpos das funções e procedures declaradas nas seções
Interface e Type. Nesta seção também estão definidos todos os
procedimentos dos componentes que estão incluídos no Form que são
codificados pelo programador. Existe também uma cláusula uses1 que é
adcionada pelo programador que diz respeito as outras unidades do projeto
que esta unit irá precisar ou se comunicar. As declarações desta seção são
visíveis apenas por ela mesma. Esta seção é formada pelo seguinte código:
{$R*.DFM} Diretiva compiladora que inclui toda a interface,
propriedades da forma e componentes do arquivo *.DFM
1
Seção uses adicional
Serve para declarar Units que a ativa.
Inicialization
Nesta seção, que é opcional, pode ser definido um código para proceder
as tarefas de inicialização da Unit quando o programa começa. Ela consiste na
palavra reservada inicialization seguida por uma ou mais declarações para
serem executadas em ordem.

Linguagem de Programação Delphi 15


Veja abaixo a estrutura de uma UNIT:

unit Unit1;

interface

uses
Windows,Messages, SysUtils, Classes,Graphics,Controls,
Forms, Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

end.

OBJECT PASCAL

Inicialmente desenvolvida por Niklaus Wirth, o Pascal (nome herdado do


filósofo Blaise Pascal) tornou-se, rapidamente, uma linguagem popular graças a sua
facilidade de aprendizado e sua forma estruturada. A série Turbo Pascal da Borland
difundiu mundialmente essa ferramenta.

A linguagem utilizada para escrita do código-fonte no Delphi é o Object Pascal


ou Pascal Objeto que está baseada no paradigma de Programação Orientada a
Objetos.

Para se familiarizar com o Object Pascal devemos estudar conceitos antigos,


mas válidos ainda, do Pascal e novos conceitos e implementações da nova
linguagem.

Observações:

O compilador Delphi é indiferente à caixa, ou seja, não diferencia maiúscula e


minúscula.

Linguagem de Programação Delphi 16


As linhas estão limitadas em 126 caracteres. Podem ser usadas diversas linhas
para a composição de um comando.

Os comandos são terminados com o símbolo ‘;’ (ponto e vírgula).

Com exceção dos caracteres entre apóstrofos, os espaços em branco e as


linhas vazias são ignoradas pelo compilador Delphi.

O tamanho máximo para identificadores é de 63 caracteres.

O caracter inicial do identificador deverá ser alfabético ou um caracter de


sublinhado “_” (UnderLine).

O identificador deverá possuir apenas caracteres alfanuméricos e sublinhados.

É proibida a utilização de palavras reservadas como identificadores.

Os comentários são delimitados pelos seguintes caracteres:

{ } ou (* *) blocos de comentários.
// linha de comentário.

ATRIBUIÇÕES:

Os comandos de atribuição são constituídos de duas partes separadas pelo


operador “:=”. O lado esquerdo do comando é a variável ou propriedade a receber
um determinado valor e o lado direito é o novo valor a ser atribuído à variável ou
propriedade.

Ex: Form1.Color:=clTeal;

TIPO DE VARIÁVEIS:
Os mais comuns são:

Integer: Números inteiros que podem variar entre –2147483647 a


2147483647.
Currency: Números reais de alta precisão. Destina-se a trabalhar com valores
monetários muito precisos, com quatro casas decimais.
Double: Números reais com até 16 dígitos significativos. Variam de 5.0x10 -
324
até 1.7x10308.
Real Números flutuantes(com decimais) 2.9 x 10-39 .. 1.7 x 1038
Boolean: Contém valores lógicos, True (verdadeiro) ou False (falso).
Char: Um caracter padrão.
String: Uma cadeia de caracteres que pode ter um tamanho ilimitado.
Variant: Um tipo que pode armazenar valores de vários tipos e que pode
ter o seu valor convertido para outros tipos, quando necessário.

Linguagem de Programação Delphi 17


CONSTANTES:

As constantes têm tipos que não precisam ser definidos; eles são deduzidos
pelo Delphi de acordo com o conteúdo definido para ela na sua declaração.

DECLARANDO VARIÁVEIS E CONSTANTES

VARIÁVEIS :

Para se declarar uma variável usa-se o comando Var, em seguida o nome do


identificador, acompanhado de “:” (dois pontos) e nome do tipo da variável.

Exemplo:
Var Nota não esqueça :
Salario, Fgts : Currency ; Não comece nomes de
NomeFunc : String[50]; variáveis com números,
Endereco : String; não use “ç” ou acentos e
NumFilhos : Integer; o tamanho máximo é de
Ativo : Boolean; 63 caracteres.

CONSTANTES :

Para se declarar uma variável usa-se o comando Const, em seguida o nome do


identificador, acompanhado de “=” (igual) e valor da constante.

Exemplo:
const
Cor = “vermelho”; // constante string
Idade = 20; // constante inteira

TIPOS ESTRUTURADOS:

Tipos Enumerados: lista todos os valores que o tipo pode assumir.

Exemplo:
Type
DiasSemana = (Segunda, Terça, Quarta, Quinta, Sexta,
Sábado, Domingo);
Triângulo = (Equilátero, Escaleno, Isósceles);

Sub-Regiões: lista todos os valores de uma faixa, intervalo de valores dos


tipos Integer, Boolean, Char, Enumerados.

Exemplo:
Type
Horas = 1..24;
Minutos=0..59;

Linguagem de Programação Delphi 18


Tipo Composto: coleção de elementos de tipos diferentes que podem ser
referenciados como um grupo.

Exemplo:
Type
Pessoa = Record
Idade : integer;
Nome : String[60];
End;

Arrays: coleção ordenada de elementos de um mesmo tipo. Cada elemento é


especificado por sua posição no array. Podem existir arrays unidimensionais e
multidimensionais.

Exemplo:
Var
Ano : array[1..4] of integer;
Nome : String[80];

PROCEDURE/FUNCTION

Nesta área são definidos os procedimentos e as funções, personalizadas,


usadas pelo programador. Estão locadas na parte implementation de uma Unit. O
desenvolvedor pode configurar sua aplicação de modo que funções e procedimentos
em outras units possam ser acessados por uma unit específica.

Sintaxe:
Function <nome> (<lista de parâmetros>) : <tipo de retorno>;
Procedure <nome> (<lista de parâmetros>);

Exemplo:
Function Salario (ValorHora, CargaHorária: Double) : Double;
Procedure AjustaRaio (r : Real);

Linguagem de Programação Delphi 19


OPERADORES DO OBJECT PASCAL

Unários:

@ Endereço da variável ou função (retorna o Ponteiro)

not “NÃO” boleano ou negação bit-a-bit

Multiplicativos e de Direção de bit

* Multiplicação aritmética ou interseção de conjuntos

/ Divisão em tipo de ponto flutuante

div Divisão de tipo inteiro

mod Módulo (o resto de uma divisão de números inteiros)

and “E” boleano ou “E” bit-a-bot

shl Deslocamento de bits à esquerda

shr Deslocamento de bits à direita

as “Cast” seguro quanto ao tipo (RTTI)

Aditivos
Adição aritmética, união de conjuntos, concatenação de strings,
+
valor positivo ou soma de deslocamento de ponteiro
Subtração, diferença de conjuntos, valor negativo ou subtração de
-
deslocamento de ponteiros (offset)
or “Ou” boleano ou “Ou” bit-a-bit

xor “Ou” exclusivo boleano ou “Ou”exclusivo bit-a-bit

Relacionais e de Comparação

= Igual

<> Diferente

< Menor que

> Maior que

<= Menor ou igual ou um subconjunto de um conjunto

>= Maior ou igual ou um subconjunto de um conjunto

in Testa se o item é membro de um conjunto


Testa se o objeto é compatível com o tipo (um outro operador
is
RTTI) RTTI (Informações de Tipo em Tempo de Execução).

Linguagem de Programação Delphi 20


INSTRUÇÕES CONDICIONAIS DO OBJECT PASCAL

Usada para executar uma ou nenhuma das instruções que a compõem.

IF-THEN-ELSE

É usado para executar uma instrução somente se certa condição for satisfeita,
ou para escolher entre duas instruções diferentes.

Observações importantes: o comando precedendo a instrução Else não pode


vir seguido de ponto-e-vírgula; podem existir IF’S aninhados; no lugar da
condição, pode-se utilizar funções que retornem valores boleanos, sem ser
necessária a sua atribuição à variáveis.

Sintaxe(Comando Simples): Exemplo 1


If Senha = Edit1.Text then
If <expressão> then ShowMessage (‘Senha Confirmada !’)
Else
Bloco de comando ShowMessage (‘Senha Inválida’);
Else
Bloco de comando;

Sintaxe(Comando Composto):

If <expressão> then
Begin
Bloco de comando 1; Exemplo 1
Bloco de comando 2; If Edit1.Text = ‘F’ then
Begin
Bloco de comando n; Label1.caption := ‘Feminino’;
end ContFem := ContFem + 1;
Else Dbedit1.setfocus;
Bloco de comando 1; end
Else
Bloco de comando 2; ShowMessage (‘Sexo não é Feminino’);
Bloco de comando n;
End;

Linguagem de Programação Delphi 21


CASE

É usado quando existir em opções múltiplas na aplicação. Consiste em uma


expressão usada para selecionar um valor em uma lista de possíveis valores ou
intervalos de valores. Pode haver uma instrução else que será executada se
nenhum dos rótulos corresponder ao valor do seletor.

Sintaxe:
Case <expressão> of Exemplo
Case RadioGroup1.ItemIndex of
Valor1: bloco de comandos; 1: ShowMessage (‘Soma’);
Valor2: bloco de comandos; 2: ShowMessage(‘Subtração’);
Valorn: bloco de comandos; 3: ShowMessage(‘Multiplicação’);
Else
Else ShowMessage(‘Não foi escolhido nada’)’;
Bloco de comandos;
End;

INSTRUÇÕES DE REPETIÇÃO DO OBJECT PASCAL

While

É responsável pela realização de um loop com verificação inicial.

Sintaxe:
Exemplo
While <condição> do I := 0;
Bloco de comandos; While I < 10 Do
I := I+1;

Repeat

Faz com que o bloco de código seja executado diversas vezes até que uma
dada condição seja verdade. É executado pelo menos uma vez independente da
sua condição inicial ser verdadeira ou não.

Sintaxe:
Repeat Exemplo
<bloco de comandos> Repeat
I: = I+1;
Until Until
<condição> I <10;

Linguagem de Programação Delphi 22


FOR

Faz com que um bloco de comados seja executado um número específico de


vezes.

Sintaxe:
For variável :=valor-inicial To/Downto valor-final do
<Bloco de comando>;

Exemplos
For I:=1 To 10 do
ShowMessage (‘estou incrementando’);

For I:=10 DownTo 1 do


ShowMessage (‘estou decrementado’);

Blocos:

É um conjunto de comandos delimitados pela palavras begin e end. Pode


haver blocos dentro de outros blocos. Toda vez que o usuário tiver mais de um
comando a ser declarado será necessário usar o conceito de bloco.

Sintaxe:
Begin
<comandos>;
End;

Exemplo :
Begin
Form1.Color := clTeal;
Form1.Caption:= ’Estou mudando a cor’;
End;

COMANDOS DE DESVIO DE FLUXO

Existem comandos que lhe auxiliam a desviar ou não o caminho normal de


uma estrutura de repetição ou procedimento. São eles:

 BREAK: Colocando este comando em qualquer estrutura de repetição,


forçará a saída da mesma independente da sua condição
 CONTINUE : Oposto ao BREAK, este comando retorna o fluxo de uma
estrutura de repetição a seu início continuando normalmente o
laço.
 EXIT : Força a saída de um procedimento ou função

Linguagem de Programação Delphi 23


FUNÇÕES DE CONVERSÕES DO OBJECT PASCAL

Algumas Funções
Função Ação
IntToStr ( ) Converte um valor inteiro para uma string
StrToInt ( ) Converte uma string para um valor inteiro
StrToDate( ) Converte uma string para o formato date
DateToStr( ) Converte do formato data para o formato string
StrToTime ( ) Converte uma string para o formato time
TimeToStr ( ) Converte o formato time para string. Ex.: Edit1.text := TimeToStr(Time);
FloatToStr ( ) Converte um valor flutuante para string
StrToFloat ( ) Converte de string para um valor flutuante
Length ( ) Retorna quantidade(valor inteiro) de caracteres de uma string
Copy ( ) Retorna uma substring de uma string. Ex.: copy ( ‘Amanda’,1,3 ) = ‘Ama’
UpperCase ( ) Converte caracteres Minúsculos para Maiúsculos
LowerCase ( ) Converte caracteres Maiúsculos para Minúsculos
Date Retorna a data Corrente
Now Retorna a data e hora corrente
Time Retorna a hora corrente
FormatFloat () Formata um valor flutuante em string usando máscara de apresentação
Ex.: Edit1.text := FormatFloat(‘###,##0.00’ , 456958.45) = 456.958,45

Linguagem de Programação Delphi 24


UNIDADE 4

COMPONENTES PADRÃO

Componentes são objetos visuais ou não visuais de programa que você


manipula em tempo de projeto ou execução. Os componentes são encontrados na
Paleta de Componentes que está dividida em guias de acordo com a utilidade de
cada componente.Não iremos ver todos os componenetes do Delphi, mas os mais
usados em algumas guias da paleta de componentes. Após inserir um componente
no form, você pode movê-lo, edita-lo e reajustá-lo de acordo com suas necessidades.
Nesta unidade veremos vários componentes padrões do Delphi, suas principais
propriedades, eventos e métodos. Algumas propriedades e eventos que são comuns
em alguns componentes não serão repetidas em outro componente. Bom, chega de
blá-blá-blá e vamos conhecer os componenetes!!

 Form (TForm) - Formulário


Barra de Ferramentas SpeedBar ou Menu : File|New Form

Propriedades do Form mais comuns


ActiveControl Indicar qual o componente do formulário que ficará com o foco
BorderIcons Botões da Barra de Título que serão apresentados
BorderStyle Estilo da Borda do Form
Caption Descrição do Form
Color Cor do form
FormStyle Estilo do formulário:
FsMDIForm (formulário pai para aplicação M D I ) Múltiplos
Forms
FsMDIChild ( formulário filho aplicação M D I ) Único Form
fsNormal ( formulário normal para aplicação S D I )
fsStayOnTop( formulário que fica na frente de todos para aplicação
SDI)
Position ScreenCenter é a mais indicada ( Form aparecerá no centro da tela)
WindowState Estado de Inicialização do Form

Métodos Exibição Mais Comuns


Show Exibi o Form, podendo alternar o foco para outro aplicativo
ShowModal Exibi o Form não podendo alternar o foco para outro aplicativo
Close Fecha o form

Eventos mais comuns


OnCreate Ativado quando o form é criado
OnShow Ativado quando o form é mostrado
OnActivate Ativado após ser mostrado(Show)

Linguagem de Programação Delphi 25


OnCloseQuery Ativado antes do fechamento do Form
OnClose Ativado quando o form é fechado
OnKeyDown Ativado quando pressionada alguma tecla

 Button (Tbutton) - Botão Padrão


Paleta de Componentes: Standard

Propriedades Mais Comuns


Caption Título do objeto.
Name Nome do objeto no Form(Unit).
Default Auto Seleção . Enter atiávar o evento do botão.
Hint Descrição da mensagem flutuante.
ShowHint Ativa a mensagem flutuante do botão
Visible Esconde ou não o botão
Enabled Habilita \ Desabilita o botão
TabOrder Ordem do bot

Eventos mais comuns


OnClick Ativado quando o botão é clicado – duplo click no ativa este evento
OnEnter Ativado ao receber o foco
OnExit Ativado quando perde o foco

 MainMenu (TMainmenu) - Menu Principal


Página de Componentes: Standard

Para editar seu Menu Principal , basta dá duplo click no objeto Mainmenu

Propriedades mais usadas (Item)


Caption Descrição do item do Menu
Checked Marca e Desmarca ítem
Default Negrito do item
ShortCut Coloca uma Tecla de Atalho

Linguagem de Programação Delphi 26


 Edit ( Tedit ) - Caixa de Texto
Paleta de Componentes: Standard

Propriedades mais comuns


AutoSelect (True) Seleciona todo texto ao receber o foco
AutoSize Tamanho de acordo com o texto
CharCase Caracteres maiúsculos,minúsculos,normais
Color Seleciona cor do objeto
ReadOnly Somente leitura
BorderStyle Estilo da borda
Ctl3D Ativa formato 3D ou não
MaxLength Quatidade máxima de caracteres do EDIT
Text Texto de entrada do objeto
Font Formata a fonte do EDIT
PassWordChar Caracter de Senha

Eventos mais comuns


OnChange Ativado quando ocorre uma mudança no conteúdo do EDIT
OnExit Ativado quando perde o foco

 Label (Tlabel) - Rótulo


Paleta de Componentes: Standard

Propriedades mais comuns


Caption Título do Label
Alignment Alinhamento do texto
Font Formata a fonte do Label

 GroupBox (TgroupBox) – Caixa de Grupo


Paleta de Componentes: Standard

Propriedade
Caption Título do GroupBox

 Panel (Tpanel) – Painel de Componentes


Página de Componentes: Standard

Propriedades mais comuns


AutoSize Tamanho de acordo com o espaço interno dos objetos do Painel
BevelOuter Tipo do contorno da borda
BevelWidth Largura da linha de contorno
Linguagem de Programação Delphi 27
 Bevel(TBevel) – Objeto de Interface
Página de Componentes: Additional

Propriedades Comuns
Shape Opções para as formas do Bevel
Style Baixo ou alto relevo

 CheckBox(TCheckBox) - Caixa de Seleção


Página de Componentes: Standard

Propriedades Comuns
Checked True(Marcado) ou False(Desmarcado)
Alignment Alinha o Texto

 RadioButton( TRadioButton) - Botão de Rádio


Página de Componentes: Standard

Propriedades Comuns
Checked True(Marcado) ou False(Desmarcado)
Alignment Alinha o Texto

 SpeedButton(TSpeedButton) - Botão tipo Barra de Ferramenta


Página de Componentes: Additional

Propriedades Comuns
Flat Efeito igual aos botões do Internet Explorer
Glyph Seleciona a imagem do Botão
GroupIndex Se for diferente de 0(Zero), significa dizer que pertence a um grupo de
botões.
Down True — o botão entra no estado pressionado
AllowAllUp True — para colocar apenas um botão no grupo no estado
pressionado. O GroupIndex tem que ser diferente de 0(Zero).
LayOut Posiciona a imagem no botão

Linguagem de Programação Delphi 28


 BitBtn(TbitBtn) - Botão com Imagem do tipo Bitmap
Paleta de Componentes: Additional

Propriedades mais comuns


Caption Título do Botão
Default Ativa /Desativa foco
Glyph Seleciona a Imagem do Botão
Kind Tipos padrões de Botão Bitbtn
LayOut Posição da Imagem no Botão

 RadioGroup(TRadioGroup) - Grupo de Botões de Rádio


Página de Componentes: Standard

Propriedades importantes
Columns Número de colunas do RadioGroup
ItemIndex Retorna o Índice do Item Selecionado.Se o retorno for igual a -1 ,
significa dizer que não existe nenhum item selecionado.
Items Insere os ítens do RadioGroup

 ComboBox(TCombobox) - Caixa de Combinação


Página de Componentes: Standard

Propriedades mais comuns


Items Lista dos Itens
Sorted Mostra itens ordenados ou não
Style CsDropDown(Pode digitar), csDropDownList (Não pode digitar)
Text Retorna à descrição do item selecionado
Sorted Mostra itens ordenados ou não

Métodos mais comuns


Itemindex Retorna o número do índice do item selecionado
Clear Limpa todos os itens do Componente
Ex.: Combobox1.clear;
Add Adiciona itens ao combobox
ex.:Combobox1.Items.Add(‘Novo Item’);
Count Retorna a qtd de itens no combo
ex.: Edit1.text:=InttoStr(ComboBox1.Items.Count);
Delete Deleta um item. ex.: Combobox1.Items.delete(1);

Linguagem de Programação Delphi 29


 ListBox(TListbox) - Caixa de Lista
Página de Componentes: Standard

Propriedades mais comuns


Items Lista de Itens
Sorted Ordena a lista
Style Tipo de lista
MultSelect Permite selecionar vários Itens.

Métodos mais comuns


Add ( ) Adiciona Item.
Ex.: ListBox1.Items.add(‘Novo Item’);
Delete ( ) Apaga um Item.
Ex.: ListBox1.Items.Delete(1);
Count Retorna à quantidade de itens no componente.
Ex.: VarInteira := Listbox1.Items.Count;
Clear Limpa todos os itens do Componente
Selected [ ] Verifica se um certo item está selecionado.
Ex.: If ListBox1.Selected[1] Then . . .
ItemIndex Retorna o Índice do Item Selecionado.
Ex.: Label1.caption := InttoStr(ListBox1.ItemIndex);

 Memo(TMemo) – Edição de Textos Extensos


Página de Componentes: Additional

Propriedades Comuns
Lines Inclui as linhas de texto do Memo
HideSelection Permite ou não selecionar o texto
MaxLength Número máximo de caracteres do Memo. O padrão 0(zero) é ilimitado
Lines Chamar o editor de texto.
ScrollBars Inclui Barras de rolagens
WantTabs Ativa salto de 8 em 8 caracteres
WantRetuns Ativa o Enter
WordWrap Faz a quebra da linha quando a mesma chegar no limite do Memo

Métodos
Clear Limpa texto do Memo
Ex.: Memo1.Lines.Clear;
Add ( ) Adiciona linha(s) no Memo
Ex.: Memo1.Lines.Add (‘Estou adicionando uma nova linha !!’);

Linguagem de Programação Delphi 30


 Image(Timage) - Carrega uma Imagem
Página de Componentes: Additional

Propriedades Importantes
AutoSize Ajusta o tamanho do Image de acordo com a imagem
Picture Seleciona a imagem
Stretch Ajusta a imagem de acordo com o espaço do Image

Método Importante
Ler a imagem LoadFromFile ( )
Ex.: Image1.Picture.LoadFromFile(‘c:\windows\nuvens.bmp’)

 PageControl(TpageControl) – Fichários de Páginas


Página de Componentes: Win32

Propriedades
ActivePage Qual a página que será mostrada quando for ativado o Form
MultiLine Ajusta as linhas de guias de acordo com o tamanho do PageControl
TabPosition Exibi guias no topo ou embaixo do PagControl
HotTrack Muda a cor do caption da guia quando o ponteiro do mouse passa em
cima
PageIndex Número do índice de ordenação da guia(TabSheet)
ImageIndex Indica o número de ordem da imagem do ImageList associado

PageControl
Click com o botão direito do mouse
em cima do PageControl para
Inserir um TabSheet

Linguagem de Programação Delphi 31


 ImageList(TImageList) – Lista de Imagens
Página de Componentes: Win 32

Para incluir imagens no componente, basta dá duplo click no mesmo. Você


chegará a esta janelinha abaixo:

Adciona as Images

Lista de Images
com seus índices

 ToolBar(TToolBar) - Barra de Ferramentas


Página de Componentes: Win32

Propriedades Importantes
AutoSize Ajusta a Barra de acordo com botões contidos na mesma
EdgeBorders Bordas
EdgeInner Formato da borda interna
EdgeOuter Formato da borda externa
Images Associa a ToolBar a um componente ImageList
DisableImages Associa a ToolBar a um componente ImageList que contém
imagens do tipo “desativadas”
HotImages Associa a ToolBar a um componente ImageList que contém
imagens do tipo “ativadas”
Flat Botões com o efeito tipo Internet Explorer
ShowCaption Mostra o Caption do botão

 Animate(TAnimate) – Modelos de Animações do Windows


Página de Componentes: Win32

Propriedade Importantes
Active Ativa a animação
CommonAVI Seleciona a animação desejada

Linguagem de Programação Delphi 32


 StatusBar(TStatusBar) - Barra de Status
Página de Componentes: Win32

Propriedades Importantes
SimplePanel Somente uma área de texto
SimpleText Texto para uma área simples
Ex.: StatusBar1.SimpleText := ‘Olá Usuário !’;
Panels Divide a Barra em vários Panels
Ex.: StatusBar1.Panels[0].Text := ‘Área 1’;
StatusBar1.Panels[1].Text := ‘Área 2’;

 DateTimePicker (TDateTimePicker) – Combo Calendário


Página de Componentes: Win32

Propriedades Importantes
Kind Calendário(dtkDate) ou controle de
atualização de horas(dtkTime)
CalColors Altera as cores padrão do componente
Date e Time Retorna à data e à hora atual
DateFormat Exibi a data no formato longo(dia da
semana,data do dia, mês, ano)
Ou formato curto(dia/mês/ano)

Linguagem de Programação Delphi 33


UNIDADE 5

TRATANDO EXCEÇÕES (ERROS)

Durante a construção de um projeto, provavelmente você irá se deparar,


algumas vezes, com mensagens como a apresentada abaixo:

Seguida desta outra janelinha:

A primeira janela apareceu porque a opção Stop on Delphi Exception da


página Language Exception está assinalada. Se você quiser inibi-la, é só acessar
a guia Debugger Options, a partir do menu Tools|Debugger Option e
desmarcar a opção : Stop on Delphi Exceptions. Quando uma exceção acontece
em um projeto Delphi, o mesmo protege a seqüência de execução, por meio de um
tratamento de exceção padrão( a primeira janelinha !!).
A segunda janelinha de erro é resultado do código feito no evento Onclick do
botão Bt_RecebeVariavelInteira .

procedure TForm1.Bt_RecebeVariavelInteiraClick(Sender: TObject);


var VarInteira:Integer;
begin
VarInteira := StrToInt(Edit1.Text);
end;

No código acima, o valor da propriedade Text do componente Edit1 está


sendo convertido para um valor inteiro e atribuído à variável VarInteira . Até aí
tudo bem. Mas, se o valor digitado no Edit1 for uma string como : “150O” ( o
usuário trocou o último (0)zero pela vogal O ) significa dizer que, na hora da
conversão da String da propriedade Edit1.Text, o Delphi não conhecerá a vogal
como um valor inteiro válido lhe exibindo as duas janelinhas que vimos
anteriormente.

Linguagem de Programação Delphi 34


Como programador você deve estar atento a esses detalhes e o Delphi lhe dá
apoio através de um comando super útil:

TRY – EXCEPT – END;

Try delimita o início de um bloco de código protegido


Except delimita o final do (Try) e introduz as instruções de
tratamento de exceção, com a seguinte forma:
on tipo-de-exceção do instrução
end;

Veja abaixo como ficaria o código do evento Onclik do botão


Bt_RecebeVariavelInteira. Observe que, se houver uma exceção será, enviada
uma mensagem ao usuário avisando que o valor digitado no componente Edit1 está
incorreto. Legal não é ?

procedure TForm1.Bt_RecebeVariavelInteiraClick(Sender: TObject);


var VarInteira:Integer;
begin
Try
VarInteira := StrToInt(Edit1.Text);
Except
On Exception do
Begin
Showmessage('Digite um valor inteiro válido');
Edit1.Setfocus;
end
end;
end;

Utilizamos no tipo-de-exceção uma opção genérica(Exception) .


Você pode usar também:
EConvertError (Erros de conversão)
EdivByZero (Divisão por zero)

Linguagem de Programação Delphi 35


UNIDADE 6

BANCO DE DADOS

Fundamental à estrutura de um banco de dados é o conceito de modelo de


dados, uma coleção de ferramentas conceituais para descrição de dados,
relacionamento de dados, semântica de dados e restrições de consistência. Entre os
vários modelos de dados, podemos citar:

 Modelo Entidade-Relacionamento (MER) – é baseado numa percepção de


um mundo real que consiste em uma coleção de objetos básicos chamados
entidades e em relacionamentos entre esses objetos. Uma entidade é um objeto
distinguível de outro objeto por um conjunto específico de atributos, como os
atributos (qualidades) de uma pessoa: nome, endereço, telefone, altura, cor, ...;
Um relacionamento é uma associação entre várias entidades. Por exemplo,
podemos ter uma entidade CONTA com os atributos número e saldo que
descrevem uma conta particular em um banco, e um relacionamento, podemos
citar CONTACLIENTE, que associa um cliente a cada conta que ele possui, sendo
cliente uma outra entidade.

 Modelo de Redes – os dados neste modelo são representados por uma coleção
de registros e os relacionamentos entre os dados são representados por ligações
que podem ser encaradas como ponteiros. Os registros no banco de dados são
organizados como coleção de grafos arbitrados.

 Modelo Hierárquico – este modelo é similar ao modelo de redes pois os dados


e relacionamentos são representados por registros e ligações, respectivamente.
Ele difere do modelo de redes no sentido em que os registros são organizados
como coleções de árvores em vez de grafos arbitrários.

 Modelo Relacional – representa dados e relacionamentos entre dados por um


conjunto de tabelas, cada uma tendo um número de colunas com nomes únicos.

O nosso estudo vai girar em torno dos sistemas relacionais (modelo


relacional). Nele os dados são percebidos pelos usuários como tabelas. As tabelas
são ligadas definindo um relacionamento entre um campo de uma tabela, com um
campo de uma outra tabela. A vantagem de uma base de dados relacional é que
você pode facilmente extrair ou combinar dados de várias tabelas para obter
exatamente a informação que você precisa, sem mudar a estrutura da base de
dados.

Linguagem de Programação Delphi 36


VANTAGENS DO USO DE UM BANCO DE DADOS: (ENTRE OUTRAS)

 Diminuição de redundância;
 Diminuição da inconsistência;
 Independência de dados (ou seja se o armazenamento e/ou a estratégia
de acesso for modificada a aplicação não precisará ser);
 Segurança das informações;
 Integridade das informações (informações mais corretas e confiáveis).

O Delphi oferece recursos poderosos para criação de aplicações com acesso a


banco de dados. Ele apresenta acesso nativo a banco de dados populares via
BDE(Borland Database Engine) , como é o caso do Oracle, Sybase, Paradox, DB2,
MSAccess e outros. Para os menos populares o Delphi oferece acesso via ODBC
(Open Database Conectivity). Na figura abaixo, a Arquitetura de Acesso a Banco de
Dados no Delphi.

Todo o acesso a bancos de dados, remotos ou não, é feito através do BDE


(Borland Database Engine). Ele torna a comunicação entre o aplicativo e os bancos
de dados mais uniformes.
Os sistemas de Banco de Dados são projetados para gerenciar grande grupo
de informações. O gerenciamento envolve a definição de estruturas para
armazenamento de informações e o fornecimento de mecanismos para manipulá-las.

Linguagem de Programação Delphi 37


TERMOS-CHAVE DE BANCO DE DADOS

Termo Definição
Campo Item de dado(ou coluna) individual de uma tabela
Registro Grupo de campos relacionados (ou linhas) de uma tabela
Tabela Estrutura baseada em linhas e colunas de dados
Ïndice Identificador vinculado a um ou mais campos em uma tabela que mantém uma
ordem lógica dentro de uma Tabela facilitando a localização de registros(linhas)
rapidamente.
Chave Índice principal onde registros duplicado são proibidos.
Chave Identifica unicamente o registro. Pode ser formada por um ou mais campos.
Primária Ex.: Um CNPF, RG, Matrícula de um Aluno, estes campos são únicos para cada
cidadão.
Chave É a chave primária da tabela à qual está relacionada.
Primária

USANDO O DATABASE DESKTOP (DBD)

O Ambiente Delphi disponibiliza um utilitário que


dá apoio ao projetista de forma prática, fácil e rápida de
criar, reestruturar e consultar tabelas. Estamos falando
do Database Desktop !! Para chamá-lo basta ir até o
menu Tools|Database Desktop .

O primeiro passo para desenvolver um novo


projeto é estruturando as tabelas do banco de dados
que será utilizado.

No menu File, do Database Desktop, selecionar os comandos New | Table.

O aplicativo abrirá uma caixa de mensagem(Create Table) onde será selecionado o


tipo de tabela (para nossos exemplos usaremos a tabela Paradox).

caixa de diálogo de criação de tabelas

Tipo de
Tabela
“OK” para
abrir a telinha
de criação de
campos da
tabela

Após o Click no botão “OK”, a janelinha será mostrada:

Linguagem de Programação Delphi 38


Tamanho do Campo
Nome dos
Campos(Colunas)
da Tabela
Tipo de Dado do Campo

Chave Primária
Barra de
Status

A janelinha Criação de Tabelas muda de acordo com a tabela, mas funciona


da mesma maneira.

FIELD ROSTER

1. FieldName: Nome do campo criado pelo desenvolvedor. Esse nome, para


efeito de facilitar o entendimento do projeto, deve ser parecido com o tipo
de informação que vai conter.
Ex: Alu_Matricula – Este campo irá conter a matrícula do aluno.

2. Type: corresponde ao tipo de dado do campo que está sendo criado.


Pode ser:

Dica
Para ver a lista de tipos pressione a
barra de espaços.

Tipo mais usados


Alpha (A) Alfanumérico(string) de 255 caracteres
Number (N) Ponto flutuante
Money ($) Formato do tipo moeda
Long Integer (I) Valores inteiros
Date (D) Formato do tipo data (dd\mm\aaaa)
Time (T) Formato do tipo hora (hh:mm:ss)
Memo (M) Memorando (texto longo)
Logical (L) Valor Booleano (True ou False)
Autoincrement (+) Auto- incremento

Linguagem de Programação Delphi 39


3. Size: tamanho do campo. Para alguns tipos como o Long Integer, Date,
Number, o tamanho não será solicitado.

4. Key: determina se o campo é chave. Para isso basta clicar duas vezes, ou
pressionar a barra de espaços e aparecerá um ‘*’ (asterisco). Os campos
chaves devem ser os primeiros campos criados no Field Roster.

TABLE PROPERTIES - PROPRIEDADES DA TABELA

1. Validity Checks: checa a validade do conteúdo de um campo.

a) Required Field – quando selecionado exige que todo registro tenha um


valor nesse campo, ou seja, ele não pode estar em branco.
b) Mínimum Value – determina o valor mínimo do campo. Ou seja, no
momento da digitação do campo do registro será testado seu valor com
o que estiver especificado aqui.
c) Maximum Value - determina o valor máximo. Os valores digitados no
campo do registro deverão ser menores ou iguais ao valor estipulado
aqui.
d) Default – no momento da execução o valor especificado aqui virá no
aplicativo com padrão, podendo ser alterado a critério do usuário.
e) Picture – permite ao usuário criar a formatação padrão de um campo
do registro.

Alguns símbolos para a formatação dos campos


# Dígito numérico
? Qualquer letra (maiúscula ou minúscula)
& Qualquer letra (converte para maiúscula)
~ Qualquer letra (converte para minúscula)
@ Qualquer caracter
! Qualquer caracter (converte para maiúscula)
; (ponto e vírgula) Interpreta o próximo caracter como literal
* Permite repetir em ‘n’ vezes o que for digitado no formato.
O ‘n’ é o número digitado após o asterisco
[abc] Caracteres opcionais
{a,b,c} Caracteres opcionais

2. Table Lookup: essa propriedade ajuda a inserir dados em uma tabela


Paradox que já existe no primeiro campo de uma outra tabela Paradox.
Para isso a Table Lookup exige que os valores que você insere em um
campo exista no primeiro campo de uma outra tabela.

3. Secondary Indexes: define o acesso à tabela através de um índice


secundário.

4. Referential Integrity: assegura que as ligações entre dados em tabelas


separadas não podem ser quebradas. A integridade referencial significa
que um campo ou grupo de campos em uma tabela (tabela “filho”) deve
Linguagem de Programação Delphi 40
se referir a uma chave em uma outra tabela (tabela “pai”). A tabela filho
é, então, a tabela onde está a chave estrangeira, e a tabela pai é onde
está a chave primária. A integridade referencial checa a validade de um
valor antes de aceitá-lo na tabela, porque você só pode entrar com um
valor na tabela filho, se antes este valor estiver determinado no campo
chave da tabela pai.

5. Password Security: protege o banco de dados do acesso de pessoas


não autorizadas.

OUTRAS OPÇÕES DO DATABASE DESKTOP:

Caixa de Status: fornece mensagens para ajudar o desenvolvedor na


criação das tabelas.

ALTERANDO A ESTRUTURA DE UMA TABELA

Selecione opção Tools | Utilities | Restructure. A caixa de seleção


de arquivos do windows é então aberta, a tabela selecionada e a sua
estrutura exibida para alteração. Quando as alterações forem salvas, uma
caixa de aviso aparece para alertar o desenvolvedor sobre provável perda
de dados. Se a tabela estiver em uso(sendo utilizada em tempo de projeto
ou execução) você não poderá reestruturá-la.

VISUALIZANDO AS TABELAS

Para visualizar o conteúdo de uma tabela clique em File|Open|Table


ou no botão de abrir na barra de ferramentas( ); selecione a
tabela que quer manusear. A tabela será aberta e aparecerá uma
barra de ferramentas de manipulação de tabelas no exemplo a seguir:

 Para inserir dados na tabela


escolha o modo Edit (editar),
posicione no último registro da
tabela, tecle em seta para baixo
para abrir um novo registro.

Linguagem de Programação Delphi 41


CRIAÇÃO DE UM ALIAS (APELIDO)

O Alias identifica o local (pasta) onde as tabelas de um banco de dados serão


armazenadas. O Borland DataBase Engine (BDE), usa um Alias para se referir a um
arquivo ou diretório de banco de dados. Você pode definir novos alias e para bancos
de dados usando o Data Base Desktop (DBD), ou o BDE.

CRIANDO UM ALIAS NO DATABASE DESKTOP


Para criar um Alias no DBD selecione o menu Tools| Alias Manager.
O aplicativo mostrará a seguinte janelinha:

Escolha o botão New e digite um novo nome para o Alias, na


caixa de edição Database Alias. Em driver types, escolha o tipo de
driver que seu banco de dados utiliza (para o Paradox e o DBase é
usado o STANDARD). Em Path, digite o caminho para o Alias ou clique
em Browse, selecione o caminho onde serão guardadas as tabelas e
confirme (o aplicativo voltará ao Alias Manager). Quando a operação
estiver concluída e for dado OK, aparecerá uma mensagem
perguntando se o usuário confirma a inclusão do novo alias no arquivo
de configuração - IDAPI32.CFG. Agora, para facilitar o trabalho do
desenvolvedor, pode ser definido o diretório de trabalho (Working
Directory1). Este diretório será o padrão (default), ou seja tudo que
for feito (gravação de tabelas,
abertura...) será apontado para
ele. A apresentação da caixa de
diálogo é a que segue:
Dica 
1
Para definir o diretório de
trabalho padrão no Database
Desktop selecione:
Menu File|Working Directory

Linguagem de Programação Delphi 42


CRIANDO UM ALIAS NO DATABASE NO BDE

O prcesso de criação de um Alias no BDE é bem simples, é só seguir os


passos abaixo:
1. Você encontra o BDE no Grupo de Programas Borland Delphi 5 |
DBE Administrator .

2. Clik agora no menu Object|New, para escolher o tipo


Alias(Standard) e em seguida será pedido o nome do Alias na Árvore
de Alias existente atualmente no BDE.

1 2
Digite aqui o Caminho onde se
nome do Alias encontra(m) o(s)
arquivo(s) de
Banco de Dados

3. Será aberta uma caixinha1 de texto onde você digitará o nome do


Alias do seu projeto.
4. Na guia Definition coloque o PATH (Caminho do Dados) do seu
projeto. Por último click na seta azul voltada para a direita
atualizando o arquivo IDAPI32.CFG. Pronto!! Super fácil não é??!!

Linguagem de Programação Delphi 43


UNIDADE 7

ACESSO AO BANCO DE D ADOS

O acesso a partir de um formulário pode ser feito através dos componentes da


página Data Access como o Table, Datasource e Query. Eles são chamados
componentes não-visuais pois não aparecem para o usuário no momento de
execução. Estes componentes controlam a conexão com o banco de dados e o
processo de informações, ou seja, são eles que ligam o componente de exibição dos
campos de um registro com a tabela ou a query que se quer usar. Para exibição de
campos de banco de dados será necessário utilizar os componentes da paleta Data
Controls. Veja na figura abaixo a Arquitetura de Acesso ao Banco de Dados.

DBCheckBox
DBNavigator

B
Dataset D DBEdit
DBGrid
DBLokupComboBox

E DBRadioGroup

Os componentes Table e Query são chamados de Datasets. DataSets são


conjuntos de dados armazenados em forma de linha e colunas. As colunas são
campos e as linhas, registros. Observe que para trabalhar com banco de dados no
Delphi iremos usar componentes não visuais em tempo de execução (componentes
da paleta Data Access) e visuais (componentes da paleta Data Controls). Bom,
então, que tal começarmos a conhecer os componentes padrão de acesso e controle
de dados !! .

Linguagem de Programação Delphi 44


COMPONENTES PADRÃO DE BANCO DE DADOS

Nos componentes de acesso a dados existe duas propriedades comuns que


são:

Propriedades Comuns aos Controles de Dados


DataSource Nome do componente DataSource da Table ou Query
DataField Nome do Campo da Table ou Query na qual será associado
ao componente

Algumas propriedades e eventos já são conhecidas por nós, não havendo


então a necessidade de repetirmos. Bom, vamos agora conhecer alguns
componentes de acesso à BD.

 Table(TTable) – Conexão com uma tabela física


Página de Componentes: DataAccess

Um componenente Table simplesmente se refere a uma tabela de banco de


dados. Ao usar um componente Table , você precisa setar algumas propriedades.
Você utiliza via código métodos associados ao Table.

Propriedades mais usadas


Active True abre a tabela, False Fecha a tabela
DataBaseName Nome do Alias ou Banco de Dados
Name Nome do componente no projeto
TableName Nome da Tabela física da base de dados
MasterSouce Nome do Datasource “Pai” da Tabela
MasterField Campo(s) de relacionamento da tabela “Pai”
ReadOnly Tabela apenas para leitura

Métodos Mais Usados( Sintaxe: Nome-da-Table.Método )


Open Abre o Dataset
Close Fecha o Dataset
Edit Coloca o registro corrente da tabela em estado de Edição(Alteração)
Delete Apaga o "registro" corrente do DataSet
Cancel Cancela uma Alteração (Edit) ou uma Inserção(Insert)
Insert Insere um novo registro
Post Grava o registro corrente na Tabela
Refresh Atualiza a Tabela física
First Desloca o ponteiro da tabela no primeiro registro
Last Desloca o ponteiro da tabela no último registro
Next Avança um registro na tabela
Prior Volta um registro na tabela
RecordCount Retorna o valor(inteiro) da quantidade total de registros da tabela
Ex.: Edit1.text := IntToStr(Table1.RecordCount);
Métodos de Procura de Registros
FindKey Procura indexada exata (Sintaxe.: Name-da-Table.FindKey([Chave]);
Ex.: Table1.FindKey([Edit1.text]);
FindNearest Procura indexada aproximada (Sintaxe.: Name-da-Table.FindKey([Chave]);
Linguagem de Programação Delphi 45
Ex.: Table1.FindNearest([Edit1.text]);

Método de Acesso a dados da Tabela


FieldByName Acessa o conteúdo dos campos da tabela
Sintaxe: Nome-da-tabela.FieldByName(‘Nome-do-Campo’).Tipo-de-Dado;
Onde Tipo-de-Dado : Asstring,AsFloat,AsInteger,AsBoolean,Asdate,Value.
Ex.:Edit1.text:=TabAluno.FieldByName(‘Alu_Nome’).Asstring;

 DataSource(TDataSource) – Fonte de Dados


Página de Componentes: DataAccess

Faz a ligação dos campos de uma tabela aos componentes de controle de


dados.

Propriedades
Dataset Nome do componente Table que será associado
Name Nome do Componente no Projeto
AutoEdit Torna o Dataset auto editável

 DBEdit(TDbEdit) - Caixa de Edicão de Texto via DB


Página de Componentes: DataControls

Propriedades Importantes
DataSource Nome do DataSource que está vinculado a uma Table ou Query
DataField Nome do campo daTable que será exibido o conteúdo

 DBText(TDBTEXT) - Texto via DB


Página de Componentes: DataControls

 DBRadioGroup (TDBRadioGroup ) – Grupo de Botões de Rádio


Página de Componentes: DataControls

Propriedades Importantes
Items Itens do DBRadioGroup
Values Valor que está associado ao item e que será transferido para
campo correspondente da tabela
Evento
Onclik Ativado com o clik do mouse

Linguagem de Programação Delphi 46


 DBGrid(TDBGrid) - Grade de Dados
Página de Componentes: DataControls

Propriedades Importantes
DataSource Nome do DataSource que está vinculado a uma Table ou Query
Columns Faz a manutenção das colunas.Duplo clik no Grid também ativa esta
propriedade

 DBNavigator(TdbNavigator) - Navegador de Dados na Tabela


Página de Componentes: DataControls

O Dbnavigator possibilita a navegação e manutenção dos registros na Tabela.

Propriedades Importantes
DataSource Nome do DatSource da Tabela ou Query
ConfirmDelete Ativa / Desativa a mensagem(Inglês) de confirmação de
deleção do reg. corrente
VisibleButtons Lista os botões que irão aparecer no DbNavigator
Hints Descrição dos botões
Flat Botões tipo Internet Explorer

Evento
OnClick Dica.: Podemos criticar qual botão do Dbnavigatorfoi clicado:
If Button = nbInsert, nbEdit, nbPost,... then

Linguagem de Programação Delphi 47


 DBMemo(TdbMemo) - Texto Memo via campo Memo(M) no DB
Página de Componentes: DataControls

 DBImage(TDBImage) - Imagem via campo(Grafico ou Binário) no DB


Página de Componentes: DataControls

 DBCheckBox(TDBCheckBox) – Caixa Seleção via campo(Lógico) do DB


Página de Componentes: DataControls

 DBLookUpComboBox (TDbLookUpComboBox) - (Seleção Fechada)


Página de Componentes: DataControls

Este componente pode ser conectado a duas fontes de dados


simultaneamente, uma contendo os dados em si (tabela mestre Ex.:CadAluno.db) e a
outra (tabela secundária Ex.: CadEstado.db ) contendo ao dados de exibição.
Imagine se você quisesse armazenar no cadastro do Aluno a sigla do seu estado de
origem, mas, ao invés de mostrar a sigla do estado como opção de escolha(Ex.: PE),
você mostraria a descrição do estado de uma outra tabela(CadEstado.db) só que
armazenaria a sigla(PE) na tabela(CadAluno.db). Legal não é?

Propriedades Importantes
DataSource Nome do DataSource que está vinculado à Table Mestre
DataField Nome do Campo da Tabela Mestre que armazenará a informação
da Tabela Secundária
KeyField Nome do campo da Tabela Secundária que é
comum(tipo\tamanho) as duas Tabelas(Mestre e Secundária)
ListSource Nome do DataSource da Tabela Secundária
ListField Nome do Campo da Tabela Secundária que será listado do
DBLookupComboBox.

 DBCombBox(T DBCombBox) – Caixa de Combo via DB


Página de Componentes: DataControls

Permite que o usuário selecione um valor(item) de uma lista especificada.Este


valor será guardado no campo da tabela associado ao componente.

Propriedade Importante
Items Lista dos itens do Combo

Linguagem de Programação Delphi 48


TRABALHANDO COM MASTERSOURCE E MASTER FIELD(OU MESTRE \ DETALHE)

Um relacionamento Mestre/Detalhe(Pai/Filho) entre duas tabelas é feito da


seguinte forma : a propriedade MasterSource da Tabela Detalhe(Filho) aponta para
DataSource da Tabela Mestre(Pai) e a propriedade MasterFields da Tabela
Detalhe(Filho) aponta para o campo comum (de relacionamento) entre as duas
tabelas. Note que não há obrigatoriedade de os campos terem o mesmo nome nas
duas tabelas, mas os campos precisam ser chaves nas duas tabela.
Imagine que você precise fazer uma relação Mestr\Detalhe entre duas
tabelas:Pedido.db(Mestre\Pai) e MovPedido.db(Detalhe\Filho). Um registro da tabela
“Pai” dará origem a um ou mais registros em uma tabela “Filho”.
Ex.: Um Pedido na tabela Pedido.db, poderá ter um ou mais produtos na
MovPedido.db relacionado ao número do pedido atual da Pedido.db. Para isso
ocorrer as duas tabelas terão que ter campo(s) comum(s) que farão a relação entre
“Pai”x “Filho”.
Pedido.db
A Pedido.db se relaciona com a
MovPedido.db através de campos
comuns às duas
(Ped_NumPedido x MovPed_NumPed)

MovPedido.db
Visualizando o relacionamento em tempo de execução

Olha que legal!!


Se você estiver no registro do Pedido
(PED1608) da tabela Pedido.db(PAI) ,
automaticamente só será exibido na
MovPedido.db(FILHO) os registros
relacionados ao número do pedido
selecionado. Isto porque o campo
Ped_NumPedido (Pedido.db)
relaciona-se com o campo
MovPed_NumPed (MovPedido.bd).

Linguagem de Programação Delphi 49


FAZENDO UM RELACIONAMENTO MESTRE\DETALHE(“PAI/FILHO”)

1. Selecione o componete Table da tabela Detalhe(MovPedido.db), indique


na propriedade MasterSource o DataSource da tabela Mestrer(Pedido.db);
2. Ainda na tabela Detalhe(MovPedido.db), click na propriedade
MasterField para indicar qual o campo ou campos que servirão de
ligação entre as 2 tabelas. Obs.: Este(s) campo(s) têm que ser
índices(Primários ou Secundários) nas tabelas;
3. Relacione os campos das 2 tabelas() e click no botão ADD para concretizar
a ligação(Figura 2).

Figura 1 Figura 2

ASSISTENTE DE CRIAÇÃO DE TABELAS (DATABASE FORM WIZARD)

O que faz esse assistente:

 Cria as ligações entre o formulário e os componentes Table e/ou Query;


 Automatiza a escrita de comandos SQL para o componente Query;
 Posiciona os componentes de exibição de banco de dados de maneira organizada;
 Define a ordem de tabulação para os controles;
 Faz a conexão de componentes DataSource com os componentes visuais e a
Table/Query.

CRIAÇÃO DE FORMULÁRIO COM ACESSO A BANCO DE DADOS USANDO O


DATABASE FORM WIZARD

1. Feche qualquer aplicação que você esteja fazendo. Não esqueça de salvá-
la, caso deseje;

Linguagem de Programação Delphi 50


2. Há duas maneiras de chamar o Database Form Wizard:

a) Indo ao menu Database|Form Wizard, ou


b) Selecionando no menu de barras a opção New, e na página
Business o Database Form Wizard.

A escolha fica a seu critério.

3. A primeira caixa de diálogo que será exibida é para que o usuário escolha
o tipo de formulário que quer criar: se um simples formulário (com acesso
a uma única tabela) ou um mestre-detalhe (master/detail), que utiliza
mais de uma tabela; e se quer usar Table ou Query;

 Escolha create a simple form | create a form using Ttable objects


e clique no botão NEXT.

4. Agora será solicitado o nome da tabela que quer usar. Primeiro selecione
o alias que você definiu e logo aparecerão as tabelas existentes nele;

Linguagem de Programação Delphi 51


 Escolha o alias DBDEMOS e a tabela COUNTRY.DB e clique no botão
NEXT.

5. Após isso serão exibidos os campos que fazem parte da tabela selecionada
(Available Fields). Você pode escolher todos ou apenas alguns. As setas
simples (>) e (<) só transferem o campo que estava marcado; as setas
duplas (>>) e (<<) ao serem clicadas passam tudo de um lado para o
outro. As setas para cima () e para baixo () definem a ordem dos
campos. Para tanto selecione o campo que deseja mudar a ordem e clique
em () ou () colocando na posição que quer;

 Para o nosso exemplo selecione tudo para a caixa da direita (Ordered


selected fileds) e deixe na mesma ordem.

Linguagem de Programação Delphi 52


6. O próximo passo se refere à aparência dos campos no formulário, se:
horizontalmente, verticalmente ou dentro de um DBGRID;

 A escolha fica a seu critério.

7. Caso você selecione a opção “vertically”, a próxima pergunta permitirá


escolher a posição dos Labels (rótulos), se acima ou à esquerda;

 A escolha fica a critério.


8. A próxima caixa de diálogo será a última. Nela você define se o formulário
criado será ou não o principal (Generate a main form) e se vai gerar, ao
final, apenas o formulário (Form only) ou um formulário e um módulo de
dados (Form and DataModule).

Linguagem de Programação Delphi 53


 Escolha apenas o formulário e clique Finish.

É criado automaticamente
DataSource, Table, DBNavigator
e, dependendo de sua escolha no
item 6, o componente de
exibição de banco de dados
(DBEdit’s ou DBGrid). O
formulário é comum e você pode
alterá-lo diretamente, conforme
queira. Moleza não é !!
Form Wizard Final

Linguagem de Programação Delphi 54


UNIDADE 8

NOÇÕES DE SQL

SQL - STRUCTURED QUERY LANGUAGE


Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos,
foram criadas linguagens destinadas à sua manipulação. O Departamento de
Pesquisas da IBM desenvolveu a SQL como forma de interface para o sistema de BD
relacional denominado SYSTEM R, início dos anos 70. Em 1986 o American National
Standard Institute ( ANSI ), publicou um padrão SQL.

A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar


índices, sem a necessidade de controle individualizado de índice corrente, algo muito
comum nas linguagens de manipulação de dados do tipo registro a registro. Outra
característica muito importante disponível em SQL é sua capacidade de construção
de visões, que são formas de visualizarmos os dados como listagens independentes
das tabelas e organização lógica dos dados.

Devemos notar que a linguagem SQL consegue implementar estas soluções,


somente pelo fato de estar baseada em Banco de Dados, que garantem por si
mesmo a integridade das relações existentes entre as tabelas e seus índices.
Vamos conhecer o componente Query , que é adequado para a realização
de consultas. Vamos conhecer um pouco da Linguagem SQL e ver como usar filtros
em um Dataset.

 Query(TQuery) – Compenente de Montagem de Comandos SQL


Página de Componentes: DataAccess

Seu uso está baseado na montagem de comandos de linguagem SQL(Structure


Query Language-Linguagem Estruturada de Pesquisa) , que se tornou a linguagem
padrão para acesso a BD. Você pode executar qualquer tipo de operação sobre as
tabelas, utililizando um Query , mas, em geral, esse componente é utilizado para
tarefas de consultas.

Propriedades Importantes
Databasename Nome do Alias onde se encontram as tabelas.
Active Ativa a pesquisa
SQL Defini a string(código) SQL em tempo de projeto que estará
disponível em tempo de execução.
O código será armazenado na propriedade Text do SQL sendo
interpretado pelo BDE no momento de su execução.
Params Define o tipo de dado para o(s) parâmetro(s) da Query caso
exista parâmetro(s).

Linguagem de Programação Delphi 55


RecordCount Retorna em RunTime o valor inteiro da quantidade de registro da
Query.

USANDO O SELECT

O comando Select é o comando básico da SQL que tem uma sintaxe


bastante abrangente. Para fins de operações usuais mostraremos a
sintaxe mais básica do comando:
Detalhe
Sintaxe: 1
Select campo(s)1 from nome-físico-da-tabela Se for especificado
*(asterisco) para os
Where condição campos, significa que
Order by campo 1,campo 2...campo n todos os campos serão
selecionados.

Imagine que você precise seleciona na tabela Alunos.db, todos os


alunos do sexo feminino(F). Se você não dispusesse do SQL, poderia
fazer esta rotina com um While enquanto não fosse o fim da tabela
pequisaria os alunos do sexo feminino. Mas, onde guardar o resultado
desta pesquisa? Teria que ter uma tabela auxiliar. A pesquisa é
sequencial, e se a tabela for enorme(muitos registro)? Com a SQL fica
mais prático, veja como ficaria a instrução SQL!!

SQL-String da QUERY
Select * from Alunos
Where Alu_Sexo=’F’
Order by Alu_Nome

Código do Evento OnClik do BitBtn1


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
QPesqAlunosF.close;
QPesqAlunosF.open;
// funcionaria usando PesqAlunosF.Active := True;
end;

Linguagem de Programação Delphi 56


MONTANDO UMA INSTRUÇÃO SQL EM RUNTIME

Você pode montar uma instrução SQL em tempo de execução sem


precisar ter que adcionar em tempo de projeto uma instrução na propriedade
SQL da Query. Para fazer isso precisaremos do método ADD.
Com ADD você pode fazer uma sequência de linhas de instrução SQL e
inseri-las uma a uma na propriedade SQL ou Text da Query. Veja como
ficaria o código para dois botões. O primeiro botão(BitBtn1) ao ser
pressionado (Onclick) montará uma instrução usando o método ADD para
selecionar os alunos femininos e o segundo botão(BitBtn2) selecionará os
alunos do sexo masculino.

Código do Evento OnClik do BitBtn1


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
QPesqAlunos.close; // Fecha a query
QPesqAlunos.Sql.Clear; // Limpa a string SQL atual
QPesqAlunos.Sql.Add(‘ Select * from Alunos ’); // Linhas novas da SQL
QPesqAlunos.Sql.Add(‘ Where Alu_Sexo=”F” ’); // Sexo feminino
QPesqAlunos.Sql.Add(‘ Order by Alu_Nome ’);
QPesqAlunos.open; // Ativa a consulta
end;

Código do Evento OnClik do BitBtn2


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
QPesqAlunos.close; // Fecha a query
QPesqAlunos.Sql.Clear; // Limpa a string SQL atual
QPesqAlunos.Sql.Add(‘ Select * from Alunos ’); // linhas novas da SQL
QPesqAlunos.Sql.Add(‘ Where Alu_Sexo=”M” ’); // Sexo masculino
QPesqAlunos.Sql.Add(‘ Order by Alu_Nome ’);
QPesqAlunos.open; // Ativa a consulta
end;

Observe que a pesquisa ficou dinâmica. O código SQL é modificado em


tempo de execução e o resultado da consulta é apresentado de acordo com a
escolha do usuário.
Podemos também usar a propriedade Text da SQL. Observe como ficaria
a instrução no exemplo acima usando a propriedade Text, o exemplo serve
para os eventos dos dois botões.
Usando a propriedade Text
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
QPesqAlunos.close; // Fecha a query
QPesqAlunos.Sql.Clear; // Limpa a string SQL atual
QPesqAlunos.Sql.Text:=‘Select * from Alunos Where Alu_Sexo=”M” Order by Alu_Nome ’);
QPesqAlunos.open; // Ativa a consulta
end;

Linguagem de Programação Delphi 57


PASSANDO PARÂMETROS PARA A QUERY EM RUNTIME

Suponha que você precise fazer uma pesquisa a partir de uma informação
passada pelo usuário em tempo de execução. Por exemplo, se ao invés de
montarmos uma consulta com 2(dois) botões que contém uma instrução
diferente em cada um, que tal, montarmos uma instrução e deixar o usuário
passar para nós a parâmetro chave da pesquisa que é sexo do aluno. Para
avisar a Query que em sua SQL-String tem um ou mais parâmetros,
precisaremos dá um nome ao parâmetro e antes deste nome usar “:” (dois
pontos). Ex.: :Psexo (Obs.: a escolha do nome fica por conta do
programador). Precisaremos também usar a propriedade Params. Veja o
exemplo abaixo :

Instrução SQL com Parâmetro (evento Onclick do RadioGroup)


procedure TForm1.RadioGroup1Click(Sender: TObject);
var Sexo:String[1];
begin

if RadioGroup1.ItemIndex = 0 then // critica a opção selecionada


Sexo := 'F'
else
Sexo := 'M';

QPesqAlunos.close; // Fecha a query


QPesqAlunos.Sql.Clear; // Limpa a string SQL atual
QPesqAlunos.Sql.Text:='Select * from Alunos Where Alu_Sexo=:Psexo Order by Alu_Nome ';
QPesqAlunos.Params[0].Asstring := Sexo; // Passando o conteúdo da variável como o parâmentro
QPesqAlunos.open; // Ativa a consulta

end;

O índice da propriedade Params segue a ordem dos parâmetros inserido


na string SQL e sempre o índice começando em zero.Você pode inserir em
uma condição com vários parâmetros e usar operadores relacionais(And \
Or). Por exemplo, para selecionar todo os nomes de alunos e datas de
nascimentos que sejam de um determinado sexo e um determinado estado,
onde estas informações(sexo\estado) serão passadas como parâmetros pelo
usuário, a instrução SQL ficaria desta forma:

Linguagem de Programação Delphi 58


Instrução SQL com 2 Parâmetros
procedure TForm1.BitBtn3Click(Sender: TObject);
var Sexo:String[1];
begin

if RadioGroup1.ItemIndex = 0 then // critica a opção selecionada


Sexo := 'F'
else
Sexo := 'M';

QPesqAlunos.close; // Fecha a query


QPesqAlunos.Sql.Clear; // Limpa a string SQL atual
QPesqAlunos.Sql.Add('Select Alu_Nome,Alu_DtNasc,Alu_Estado from Alunos’);
QPesqAlunos.Sql.Add('Where Alu_Sexo=:Psexo And Alu_Estado=:Puf’);
QPesqAlunos.Sql.Add('Order by Alu_Nome');
QPesqAlunos.Params[0].Asstring := Sexo; // Passando o conteúdo da variável como o parâmentro
QPesqAlunos.Params[1].Asstring := Edit1.Text; // edit com a sigla do estado passada pelo usuário
QPesqAlunos.open; // Ativa a consulta
end;

Linguagem de Programação Delphi 59


UNIDADE 9

RELATÓRIOS COM QUICKREPORT

O QuickReport é um conjunto de componentes nativos para Delphi que


executam toda a tarefa de visualização e impressão de relatório.

Um relatório é criado à semelhança do formulário. É usado o componente


Quick Rep que transforma um formulário comum em um relatório. Os controles de
impressão estão na paleta Qreport. Basicamente um relatório é composto por:
cabeçalho, cabeçalho de colunas, área de informações(linhas detalhes) e o sumário.
O QuickReport é um gerador de relatórios por banda. Seu relatório é
construído em cima de vários tipos de banda, onde são colocados componentes
visíveis como campos de banco de dados, rótulos, imagens e outros componentes
imprimíveis.

COMPONENTES PADRÃO DO QUICKREPORT

 QUICKREP (TQUICKREPORT) (FORMULÁRIO BÁSICO DE RELATÓRIO)


Página de Componentes: QReport

Propriedades
DataSet Nome da Table ou Query que será usada no relatório
ShowProgress Deseja apresentar a progressão do processo ?

Métodos
Print Imprimir relatório.
Sintaxe: nome-do-QuickRep.Print;
Preview Ativa apenas a visualização do relatório
Sintaxe: nome-do-form.nome-do-QuickRep.Preview;

 QRBAND(TQRBAND) – CRIAÇÃO DE BANDAS\FAIXAS


Página de Componentes: QReport

Propriedade
BandType Tipo de Banda assumida
ForceNewPage Força quebra de página automática

 QRLABEL(TQRLABEL) – RÓTULO PARA RELATÓRIOS


Página de Componentes: QReport

Linguagem de Programação Delphi 60


 QRShape(TQRShape) – Ferramenta de criação de Formas
Página de Componentes: QReport

Propriedade
Shape Tipo de Forma
Pen Configura a linha

 QRMemo(TQRMemo) –Texto Longo para Relatório


Página de Componentes: QReport

 QRIMAGE(TQRIMAGE) – Imagem para Relatório


Página de Componentes: QReport

 QRSysData(TQRSysData) - Exibi informações de apoio


PÁGINA DE COMPONENTES: QREPORT

Propriedade
Data Tipo de Informção

 QRExpr(TQRExpr) – Criador de Expressões


Página de Componentes: QReport

Propriedade
Expression Criação de sua expressão
Ex.: SUM(TbFuncionario.Func_salario)
Mask Configura sua apresentação
ResetAfterPrint Zera a expressão após sua impressão

COMPONENTES PADRÃO DO QUICKREPORT PARA ACESSO A BANCO DE DADOS

Os componentes de acesso a Banco de Dados no QuickReport são super


parecidos com os que vimos para Formulários(Forms). A diferença principal está na
propriedade Datasource que agora vamos nos referir ao Dataset . Duas
propriedades são comuns a estes componentes : Dataset(Nome da Tabela ou
Query do Relatório) e DataField(Campo da Tabela ou Query).

 QRDBText(TQRDBText) - Texto via DB


Página de Componentes: QReport

 QRDBImage(TQRDBImage) – Imagem via DB


Página de Componentes: QReport

Linguagem de Programação Delphi 61


PASSOS PARA CRIAÇÃO DE UM RELATÓRIO:

1. Abra uma nova aplicação;

2. Selecione o componente QuickRep e coloque no formulário; este componente


fará aparecer uma espécie de “papel milimetrado” onde você disporá os demais
controles que precisar;

3. Adicione um componente Table e DataSource (paleta Data Access), faça as


ligações padrões que foram vistas em acesso a banco de dados;

4. Selecione as bandas (Objeto QRBand). Este novo componente é responsável pelo


“corpo” do relatório. Ao ser inserido só aparecerá uma linha demarcando a
banda. Na propriedade BandType você define se este bloco será tratado como:

RbTitle faixa de título que será impressa uma única vez no início
do relatório.
RbColumnHeader faixa de cabeçalho de coluna, sendo impressa no topo de
cada coluna em um formulário de múltiplas colunas.
rbDetail faixa de detalhes, usada para imprimir todos os registros
mestres de um banco de dados.
rbGroupFooter serve como finalizador para a banda GroupHeader.
rbGroupHeader usada para agrupar valores em um par de arquivos
relacionados.
rbPageHeader banda de cabeçalho. Será impressa no início de cada
página.
rbPageFooter rodapé. Será impressa no final de cada página.
rbSummary faixa de sumário de um relatório. Será impressa após
todas as bandas detalhes.
rbSubDetail faixa usada para imprimir os registros de detalhes num
par de arquivos relacionados.
rbChild define a banda filha de outra banda.

5. Supondo selecionada a banda de cabeçalho, para você colocar um título nesse


cabeçalho, ou melhor dizendo, para colocar textos no relatório, selecione o
componente QRLabel da paleta. Altere a propriedade Caption desse controle e
pronto, você já tem um texto.

6. Caso queira colocar dados no relatório como data ou hora ou mesmo ambos
insira o controle QRSysData e selecione na propriedade Data a opção que
deseja.

7. Para ‘imprimir’ os dados da tabela use o controle QRDBText fazendo as devidas


ligações nas propriedades DataSet e DataField;

Linguagem de Programação Delphi 62


8. Vejamos como ficaria o formulário de impressão:

QRLabel

QRDBText

9. Para visualizar o relatório final na fase de desenvolvimento selecione o


componente QuickRep e pressione o botão direito do mouse. Aparecerá um
menu suspenso. Escolha a opção “Preview”. Automaticamente aparecerá, em
tela, um zoom do relatório.

10. Caso você queira mostrar esse “Preview” em tempo de execução digite o seguinte
comando:
Sintaxe: <nome do form.>.<nome do quickrep>.Preview
EX.: Form1.QuickRep1.Preview;

11. Para imprimir, realmente, o comando será:


Sintaxe: <nome do form>.<nome do quickrep>.Print
Ex.: Form1.QuickRep1.Print;

Linguagem de Programação Delphi 63


12. Configuração das páginas:

Você acessa essa configuração quando clica, dentro


do QuickRep, com o botão direito do mouse seleciona
opção Report Settings; ou na propriedade Page do
QuickRep.

Linguagem de Programação Delphi 64


APÊNDICE 1

MENSAGENS NO DELPHI

Para dar mensagens ao usuário, você pode usar a função ShowMessage, que
já conhecemos logo no início do curso. O Delphi possui outras funções que permitem
sofisticar essa comunicação. Existem em livros uma função chamada MessageDlg,
no entanto, esta função exibe o título da mensagem e dos botões em inglês. Abaixo
é mostrada uma caixinha de diálogo com a função MessageDlg :

Detalhe
Observe que o título e os botões aparecem para o
usuário em inglês.
Outro detalhe, é que não podemos alterar a
mensagem da Barra de Título. Chato, não é ?

Para contornar essa “chatice”, usaremos uma função parecida com a


MessageDlg, só que, mais flexível. Ela se chama MessageBox.

Sintaxe:

Application.MessageBox(' mensagem ', 'titúlo da janelinha', ícone da face da


janelinha + botão (es) da face da janelinha) = retorno 1
2 3
Onde:
Mensagem : Mensagem que aparecerá na face da Janela ;
Título da Janelinha : Mensagem que aparecerá na barra de título da janelinha ;

Parâmetro do ícone da face da janelinha Exibição


MB_ICONEXCLAMATION, MB_ICONWARNING Sinal exclamação 1
MB_ICONINFORMATION Sinal “i”
MB_ICONQUESTION Sinal interrogação
MB_ICONSTOP, MB_ICONERROR Sinal “X”

Parâmetro dos botões da face da janelinha Exibição 2


MB_YES Botão “Sim”
MB_NO Botão “Não”
MB_CANCEL Botão “Cancelar”
MB_OK Botão “OK”
MB_ABORTRETRYIGNORE Botões “Anular”,”Repetir”,”Ignorar”
MB_YESNO, MB_YESNOCANCEL... Vários Botões

Linguagem de Programação Delphi 65


Retorno Teste
IDYES Clicou no botão “Sim” 3
IDNO Clicou no botão “Não”
IDCANCEL Clicou no botão “Cancelar”
IDOK Clicou no botão “Ok”
IDABORT Clicou no botão “Anular”
IDRETRY Clicou no botão “Repetir”
IDIGNORE Clicou no botão “Ignorar”

Exemplo com o MessageBox

If Application.MessageBox('Confirma Exclusão?', 'Atenção', MB_ICONEXCLAMATION + MB_YESNO) = IDYES


then
Dm.Ta_Alunos.Delete; // se pressionado o botão "Sim" Deleto o registro corrente

Linguagem de Programação Delphi 66


APÊNDICE 2

PROPRIEDADES, EVENTOS, MÉTODOS COMUNS E MAIS USADOS

PROPRIEDADES
Name: É comum a todos os componentes da paleta. O Delphi nomeia
automaticamente todos os componentes que são incluídos no form (inclusive o
proprio form). Usa o nome da classe do componente mais um número seqüencial. O
nome atribuído pelo Delphi pode ser mantido, mas é aconselhável renomear os
componentes que serão referidos no programa.
Caption: Todos os componentes que podem apresentar um rótulo têm esta
propriedade. Armazena a string que será mostrada quando o componente for
desenhado.
Left e Top: Esquerda e Topo. Armazenam a posição do componente em relação ao
form ou painel que o contém. Movendo o componente, estas propriedades se
atualizam automaticamente, e alterando estas propriedades, o componente é
movido.
Height e Width: Altura e comprimento do componente. Idem acima.
Font: Permite selecionar tamanho e tipo da fonte que será usada para escrever o
texto no componente.
Color: Cor do componente. Existe uma lista de cores padrão usadas pelo Windows e
pelo Delphi, mas é possível definir qualquer cor através de seus componentes RGB.
TabOrder: Ordem do componente no Form ou painel. Quando há vários
componentes selecionáveis no Form ou painel, a tecla Tab permite navegar entre os
componentes. Esta propriedade define a ordem em que os componentes são
selecionados quando o usuário tecla Tab.
Hint: Este é um recurso muito útil e fácil de usar. Permite que apareça um texto de
ajuda quando o usuário posiciona o cursor do mouse sobre um componente. Todos
os componentes podem ter Hint. Na propriedade Hint, voce deve digitar a frase que
deve aparecer. Veja a propriedade abaixo.
ShowHint: Ativa o hint para o componente. Se estiver desligado, o hint não é
mostrado.

EVENTOS
OnClick: É gerado cada vez que o botão esquerdo do mouse é pressionado e solto.
O evento só ocorre quando o usuário libera o botão. O Delphi já direciona o evento
para o componente que está debaixo do cursor do mouse.
OnDblClick: Gerado quando é feito um duplo clique no botão esquerdo.

Linguagem de Programação Delphi 67


OnKeyPress: Gerado quando o usuário pressiona (e libera) uma tecla no teclado.
OnEnter: Gerado quando o foco de atenção do Windows “cai” sobre o componente.
Exemplo: Suponha uma tela de entrada de dados, onde vários campos devem ser
digitados. Quando a tela é apresentada, o foco ou o cursor de texto, está sobre o
primeiro campo. Depois de digitar o campo, o usuário pressiona Tab para passar
para o campo seguinte. Veja que o que passa para o campo seguinte é a atenção da
aplicação e do Windows. Essa atenção é chamada de foco, ou focus em inglês. Este
evento é gerado assim que o componente recebe o foco, antes de executar qualquer
código do componente.
OnExit: Gerado imediatamente antes de o foco deixar o componente.
OnResize: Gerado quando o tamanho do componente é alterado. É usado
principalmente em forms e painéis.
OnChange: Gerado quando o valor do componente muda. Só é aplicado em
componentes que permitem edição de seu conteúdo.
MÉTODOS
Show: Desenha o componente. Se for uma janela (form) ela é desenhada e ativada.
Close: Fechar. Aplicado geralmente em forms e arquivos. Quando utilizado no form
principal, encerra a aplicação.
Create: Aloca memória para criar um componente ou form, dinamicamente.
Free: Libera a memória alocada com o Create.

Linguagem de Programação Delphi 68


APÊNDICE 3

OBJETO TFRAME

O objeto TFrame é semelhante ao componente TPanel. O propósito deste


componente é criar uma classe incorporada de vários outros componentes. O mais
interessante é que este novo Frame pode também ser adicionado a sua paleta de
componentes, sendo assim instanciado futuramente em suas outras aplicações de
forma independente da original.
As alterações feitas em objetos TFrame são automaticamente refletidas nas
instâncias que a referenciam. O código é mantido na Unit do Frame.
A utilização de Frames é muito simples, basta clicar em 'File | New
Frame...'.

Um novo Frame será criado em forma de um formulário. Inclua os objetos que


deseja utilizar, e adicione ao Form principal um objeto TFrame da paleta de
componentes Standard.

Linguagem de Programação Delphi 69


Selecione o Frame criado na janela exibida, e clique em Ok. Será adicionado
um objeto parecido com o TPanel no Form contendo os objetos incluídos no
Frame.

O objeto TFrame inserido dentro de um formulário.

Linguagem de Programação Delphi 70


REFERÊNCIAS

Biográficas :
CANTU, Marco Dominando o Delphi Vol.4 e 5 (“A Bíblia”)
EUGO, Frank Como Programar em Delphi 3.0
LOYOLA, Afonso Delphi vol.1 e 2
GENERINE, Adelize SQL para Delphi
PERROTTI,Arthur Curso de Delphi
Cibernética:
Borland Site www.borland.com

Linguagem de Programação Delphi 71