You are on page 1of 110

Identificadores

Identificadores podem ser constantes, tipos, variveis, procedures, funes, unidades, programas e campos
de registros.
No existe limite de caracteres para o nome de um identificador mas apenas os 63 primeiros caracteres so
significantes (no podendo ser idntico ao nome das palavras reservadas). O nome de um identificador deve
ser iniciado por Letras ou o carcter underscore ( _ ). O resto formado por Letras, Dgitos, carcter
underscore (ASCII $5F). No permitido a utilizao de espaos para a formao do nome.

+ Exemplo de identificadores vlidos: Form1, SysUtils.StrLen, Label1.Caption


With ... do...

Delimita um determinado bloco de declaraes para um identificador especfico evitando a declarao deste
identificador. A sintaxe do comando : WITH {nome do identificador} DO {comandos};. Ex:

Array [ ... ] of ...


Define um conjunto de variveis ou constantes de um mesmo tipo. A sintaxe do comando : array
[{quantidade de ocorrencias}] of {Tipo};. Os arrays so controlados por trs funes:
Funo

Valor de Retorno

Low

Primeiro elemento

High

Aponta para o ltimo elemento

SizeOf

Tamanho do array

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

102

Begin ... end;


Prende um conjunto de declaraes em um bloco de comandos determinado. A sintaxe do comando :
BEGIN {comandos} END;.

If ... then ... else ...


Esta expresso escolhe entre o resultado de uma condio booleana o caminho verdadeiro (then) ou falso
(else). A sintaxe do comando : IF {condio} THEN {bloco de comandos} ELSE {bloco de comandos};.

Goto ... ;
Transfere a execuo de um programa para o ponto determinado pelo Label. A sintaxe do comando :
GOTO {Label};. Ex:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

103

Case ... of ... else ... end;


Consiste de uma lista de declaraes que satisfaz a condio de um seletor de expresses, se nenhuma parte
da lista satisfazer ao seletor executa os comandos do sub-comando else. Para o seletor sero vlidos os tipos
definidos, tipo Inteiros ou LongInt. A sintaxe do comando :

Ex:

Repeat ... until;


Repete um determinado bloco de declaraes at a condio booleana do subcomando until ser satisfeita. A
sintaxe do comando : REPEAT {comandos}; until {condio};. Ex:

For ... to (downto) ... do ... ;


Incrementa em 1 uma determinada varivel inteira, repetindo um bloco de comandos, at que esta atinja o
valor final do intervalo, o subcomando downto realiza o incremento reverso. A sintaxe do comando : FOR
{variavel} := {valor inicial} to (downto) {valor final} do {bloco de comandos};. Ex:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

104

While ... do ... ;


Repete um bloco de comandos enquanto que determinada condio booleana seja satisfeita. A sintaxe do comando :
WHILE {condio} DO {bloco de comandos};. Ex:

Break; ou continue...;
O comando break interrompe um bloco de repetio for, while ou repeat saindo do bloco. A sintaxe do
comando : BREAK; enquanto que o comando continue retorna a primeira instruo do bloco de repetio
for, while ou repeat. A sintaxe do comando : CONTINUE;. Ex:

R Animando formulrio

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

105

R Como depurar ( encontrar ) possveis erros no programa ?


O que depurar ? como passar um pente fino no programa, e verificar erros que podem ser de lgica e
que podem afetar o perfeito funcionamento de um sistema. Tecnicamente conhecido como Debug, as
opes existentes no Delphi e so de extrema importncia para a verificao de erros em um sistema.
A mais comum a marcao de Breakpoints, que so locais dentro do programa que, quando executados
paralisam o funcionamento do programa, e permite a visualizao de uma varivel, por exemplo.
Para marcar uma linha, clique no lado esquerdo ( no editor de cdigo do Delphi ), pressione a tecla de
funo F5, aps pressione F9 para rodar o programa, no exemplo abaixo foi digitado no campo1 ( edit1 ) o
nmero 10 e no campo2 ( edit2 ) o nmero 20, quando chegar neste ponto ( break point = quebra de ponto
), o ponteiro posicionar na linha em vermelho, posicione o mouse sobre a varivel vl1 e ser mostrado o
contedo, aqui o valor 10.

Posicione na linha que


deseja fazer o BreakPoint e
pressione F5, aps prossiga
pressionando F7, F7 etc
para continuar com a
depurao

Posicione o ponteiro do mouse sobre


a varivel vl1 para visualizar o
contedo da varivel.

Posicione o ponteiro do mouse


sobre a varivel vl2 para ver o
contedo da varivel.

R Depurando erros com Watch List


uma maneira para visualizar o contedo de variveis quando estiver desenvolvendo seu projeto, tornando
trabalho mais dinmico.

Digite o cdigo abaixo


no evento OnClick do
boto BitBtn.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

106

Na barra de titulos clique em View Debug Windows Watches ( Ctrl Alt W ), ser aberta uma
pequena tela onde sero postas as variveis para visualizar seus conteudos.

Marque a varivel Valor1, clique no boto direito, clique na opo Debug, clique em Add Watch at
cursor ( ou pressione Ctrl F5 para adicionar a varivel na caixa Watch List ). Adicione as 3 variaveis na
lista.

Para iniciar a depurao pressione F7, continue pressionando F7, observe que o cursor esta passando
linha por linha ate chegar o boto ( Bitbtn ) onde contem as variveis que definimos no incio do programa,
clique nele, prossiga pressionando F7, observe abaixo a lista ( Watch List ). Veja na tela abaixo, no lado
esquerdo da imagem abaixo, as variaveis Valor1, 2 e 3 com o conteudo de suas variveis.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

107

R Como alinhar botes ?


No primeiro exemplo alinharemos os botes na vertical.
Selecione todos os botes. Para
selecionar mantenha pressionada a
tecla CTRL , arraste o mouse
formando um retngulo sobre todos
os botes. Quando os botes esto
selecionados so mostrados
pontinhos em seus cantos
indicando a seleo dos mesmos.

Aps clicar na opo Align ser


aberta outra tela. Estamos
querendo alinhar todos os botes
para esquerda e que tenham o
mesmo espao na vertical.
Observe na caixa as opes
marcadas.
Veja resultado, todos os botes
foram alinhados para esquerda e
com um espaamento vertical igual.

Alinhamento horizontal

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

108

Resultado do alinhamento do botes

R Como definir tamanho / altura para todos os botes ?


Selecione todos os botes fazendo um retngulo em volta destes, clique no boto direito, ser mostrado um
menu de atalho com opes para fazer esta operao veja abaixo Position Size

Veja os diferentes
tamanhos dos botes
No grfico da pgina anterior, selecionei a opo Size para definir um tamanho para todos os botes
selecionados. Pode-se definir a largura do boto, comprimento, diminuir de acordo com o tamanho do menor
boto possvel etc.

Agora todos os
botes esto com
o tamanho de
80 caracteres de
largura.

R Abrindo link
Insira um component Label ( aba Standard ), d um clique duplo sobre Label1 e digite o cdigo abaixo:
No incio do programa na linha Uses digite ShellApi.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

109

R Como programar teclas de funo F1, F2, F3 ... ?


Programando as teclas de funes (F1...F12 e Escape, Home etc). Cliquei na proprieade KeyPreview e
defina o valor para True

Quando teclar na tecla F1 ser mostrada esta caixa de


mensagem.

R Atalho ao pressionar Ctrl A


Clique no formulrio, selecione a propriedade KeyPreview e defina o valor para True

R Toca arquivo de som

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

110

R Como programar letras, nmeros, teclas de funo ?


Vamos programar algumas letras.

Cdigo
foi
digitado
no evento
OnKey
Press do
campo
Nome.

Quando o cursor
no campo nome e
for digitado a
letra e ou E
ser mostrada a
caixa de
mensagem.

procedure TFrm_Alunos.EditCepKeyPress(Sender: TObject; var Key: Char);


begin
end;
// Sero aceitos os nmeros de ( 1 ate 8 ) e se for pressionado no numero NOVE
// ser inserido o nmero 1 UM ( #49 )

R Como por zeros no lado esquerdo de um nmero ?

R Como forar abertura do formulrio maximizado ?


No evento OnShow digite o cdigo abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

111

R Cdigos do teclado em hexadecimal


vk_LButton
vk_RButton
vk_Cancel
vk_MButton
vk_Back
vk_Tab
vk_Clear
vk_Return
vk_Shift
vk_Control
vk_Menu
vk_Pause
vk_Capital
vk_Escape
vk_Space
vk_Prior
vk_Next

= $01;
= $02;
= $03;
= $04;
= $08;
= $09;
= $0C;
= $0D;
= $10;
= $11;
= $12;
= $13;
= $14;
= $1B;
= $20;
= $21;
= $22;

vk_End
vk_Home
vk_Left
vk_Up
vk_Right
vk_Down
vk_Select
vk_Print
vk_Execute
vk_SnapShot
vk_Insert
vk_Delete
vk_Help
vk_A at vk_Z
vk_0 at vk_9

= $23;
= $24;
= $25;
= $26;
= $27;
= $28;
= $29;
= $2A;
= $2B;
= $2C;
= $2D;
= $2E;
= $2F;
= tem os mesmos valores ASCII: 'A' at 'Z'
= tem os mesmos valores ASCII: '0' at '9'

vk_NumPad0
vk_NumPad1
vk_NumPad2
vk_NumPad3
vk_NumPad4
vk_NumPad5
vk_NumPad6
vk_NumPad7
vk_NumPad8
vk_NumPad9

= $60; // Blocos de nmeros (lado direito do teclado)


= $61;
= $62;
= $63;
= $64;
= $65;
= $66;
= $67;
= $68;
= $69;

vk_Multiply
vk_Add
vk_Subtract

= $6A; // multiplicao
= $6B; // adio
= $6D; // subtrao

vk_NumLock
vk_Scroll

= $90;
= $91;

Delphi Aplicado - by Jurandir A. Pellin

vk_F1
vk_F2
vk_F3
vk_F4
vk_F5
vk_F6
vk_F7
vk_F8
vk_F9
vk_F10
vk_F11
vk_F12
vk_F13
vk_F14
vk_F15
vk_F16
vk_F17
vk_F18
vk_F19
vk_F20
vk_F21
vk_F22
vk_F23
vk_F24

= $70; ( tecla F1 )
= $71; ( tecla F2 )
= $72; ( tecla F3 )
= $73; ( tecla F4 )
= $74;
= $75;
= $76;
= $77;
= $78;
= $79;
= $7A;
= $7B;
= $7C;
= $7D;
= $7E;
= $7F;
= $80;
= $81;
= $82;
= $83;
= $84;
= $85;
= $86;
= $87;

vk_Separator = $6C; // separador


vk_Decimal = $6E; // decimal

( e-mail: delphiewb@gmail.com )

112

R Quais so as propriedades do navegador de dados ?


Este componente permite ao usurio navegar pelos registros da tabela, incluir registros, consultar, apagar etc.

Propriedades do
TBNavigator.

Posiciona no primeiro registro.

( linha de cdigo = Nome_Tabela.First; )

Posiciona no registro anterior.

( linha de cdigo = Nome_Tabela.Prior; )

Posiciona no prximo registro.

( linha de comando = Nome_Tabela.Next; )

Posiciona no ltimo registro.

( linha de comando = Nome_Tabela.Last; )

Insere um novo registro.

( linha de comando = Nome_Tabela.Insert; )

Apaga o registro.

( linha de comando = Nome_Tabela.Delete; )

Altera o registro.

( linha de comando = Nome_Tabela.Edit; )

Grava o registro corrente.

( linha de comando = Nome_Tabela.Post; )

Atualiza registro corrente.

( linha de comando = Nome_Tabela.Refresh; )

Exemplo: No evento OnClick digite: Clientes_TB.Post ( grava registro corrente na tabela de Clientes )
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

113

R Como definir cones para o DBNavegator ?


Como padro o Delphi mostra os cones simples como mostrada na primeira tela abaixo, podemos
definir outros cones.
Botes padro do
navegador de dados.

O Delphi como padro mostra


smbolos no navegador. Como
acho estes smbolos horrveis
mostrarei como substitu-los
por cones J

A tela abaixo mostra resultado de como fica aps ter definido cones para o DBNavigator

Definindo cones
para o navegador.

Digite o cdigo abaixo como mostra para definir os cones:

Digite o novo Type antes do


Type gerado pelo Delphi.
Note que h dois Type(s)
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

114

Os arquivos com a terminao .bmp


( arquivos de imagens ) devem estar na
pasta onde se encontra o projeto.

Outra forma , usando evento OnShow

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

115

R Definindo caption, descrio para o navegador de dados

Parte inicial do programa:

Veja as
descries
sobre os botes
do navegador.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

116

R Programando os botes do navegador de registros


Conhecendo os valores e as propriedades dos botes do componente DBNavigator. Podemos programar cada
um destes botes. D um clique duplo no objeto DBNavigator e digite o cdigo abaixo:

Button o boto do prximo


registro do Navigator. Quando
clicado, mostrar uma mensagem.
Button
First
Prior
Next
Last
Insert
Delete
Edit
Post
Cancel
Refresh

Valor
nbFirst
nbPrior
nbNext
nbLast
nbInsert
nbDelete
nbEdit
nbPost
nbCancel
nbRefresh

Este o valor (value) do boto prximo


registro ( Next = nbNext ).
Veja a tabela os botes e seus valores.

Ao
Vai para o primeiro registro.
Vai para o registro anterior.
Vai para o prximo registro.
Vai para o ltimo registro.
Insere um registro em branco.
Apaga o registro atual.
Permite editar o registro atual.
Grava o registro atual.
Cancela a edio corrente.
Atualiza (refresca) os dados no Dataset.

Clique duplo no componente DBNavigator ,


no evento OnClick digite o cdigo ao lado.
Aps clicado no boto inserir ser focado
no campo cdigo da tabela.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

117

R Como criar botes para navegar nos registros da tabela ?


Crie um novo formulrio: New Form.
Altere as propriedades: Caption: Consulta - Name: Consulta_Frm.
Insira dois componentes: um Table e um DataSource.
Clique no componente Table, defina propriedade DataBaseName para Madruga ( meu Alias ), role para
baixo e altere a propriedade Name de Table1 para Clientes_TB, clique em TableName e defina o nome
da tabela Clientes.db e defina a propriedade Active para True.
Clique no componente DataSorce1 e defina propriedade DataSet para Clientes_TB e na propriedade
Name defina o nome Clientes_DS.
Clique no componente Table1, agora nomeado para Clientes_TB, clique duplo em Clientes_TB, ser
aberta uma pequena tela em branco, clique no boto direito, posicione o ponteiro do mouse sobre esta tela
em branco, clique em Add Fields, abrir uma tela pequena mostrando todos os campos em azul, clique
OK, aps os campos sero inseridos no componente Table ou Clientes_TB.

Arraste todos os campos do componente Clientes_TB para dentro do formulrio, isto montar todos os
campos do formulrio juntamente com o relacionamento dos campos na respectiva tabela.

Arraste todos os campos para


dentro do formulrio, o
Delphi automaticamente
associar cada campo com a
tabela em uso.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

118

Organize os campos de acordo com a tela abaixo:

Agora precisamos inserir o


componete DBNavigator para
navegar nos registros, adiante
faremos um navegador com
botes + cones J

Insira um componente DBNavigator ( aba DataControls ), altere a propriedade DataSource para


Clientes_DS.
Salve o arquivo com o nome de Consulta.pas

Vamos criar botes para navegar nos registros da tabela. Insira 7 ( sete ) componentes Bitbtn, defina a
propriedade Name do primeiro boto para Bit_Anterior , Name = Bit_Posterior, Name = Bit_Primeiro,
Name = Bit_Ultim... Clique no primeiro boto, na propriedade Glyph defina um cone para o boto
selecionado, proceda desta maneira para os demais botes.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

119

Digite os respectivos cdigos no evento OnClick de cada boto:

R Como calcular percentual em um edit ?


Fazendo clculos com percentual. Usaremos as funes FormatFloat (formata valor em casas decimais),
StrToFloat (converte uma string/texto em ponto flutuante), FloatToString (converte ponto flutuante em
string/texto): Insira 4 Edit ( aba Standard ) Edit1, Edit2, Edit3 e Edit4 e um Bitbtn.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

120

R Como converter textos para nmeros ?


Uma Edit1 recebe texto ento temos que usar conversores (IntToStr = Inteiro para texto ou StrToInt =
texto para inteiro etc ) para converter para nmero ou texto. Veja o exemplo a seguir:

D um clique duplo no boto Soma e no evento OnClick digite as linhas de cdigo abaixo entre o Begin ...
End:

Explicando linhas do cdigo:


Total1 := StrToInt(Edit1.Text);
Total1
:=
StrToInt
Edit1.Text

Varivel inteira.
Atribui o contedo do Edit1.Text para armazenar na varivel do tipo inteira Total1.
Converte texto para valor inteiro
um objeto texto.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

121

R Como somar valor flutuante ?

R Como formatar um nmero em um edit ?

R Como somar e dividir ?

Aps clicado nos


botes veja os
resultados.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

122

R Como remover ponto decimal ?

Digite esta funo.

R Como arredondar valor ? ( 1 )

R Como arredondar valor ? ( 2 )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

123

R Como formatar zeros no lado esquerdo do nmero ?

%.5d significa que no


total haver cinco
nmeros,
ou seja, 00020

R Como formatar valor ?

R Funo copy
Insira 3
componentes Edit
e um Bitbtin.

O nmero 1 indica posio inicial e


o quatro posio final. Note que a
palavra voc tem quatro letras.

A palavra voc tem quatro letras,


tem um espao em branco que o
quinto (caracter), a posio inicial
sexta, que a letra e da palavra
est.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

124

R Funo pos
Procura uma string na frase.

R Como aceitar somente letras em um edit ?

R Como fazer deciso composta ( variveis ) ?

Digite o cdigo abaixo no evento OnClick do boto Processar:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

125

R Como usar Case of else end ? ( 1 )


Consiste de uma lista de declaraes que satizfaz a condio de um seletor de expresses, se nenhuma parte
da lista satisfizer ao seletor executa os comandos do sub-comando else. Para o seletor sero vlidos os tipos
definidos, tipo Inteiros ou LongInt. A sintaxe do comando :

Exemplo:

R Case of else end ( 1 )


Insira um MaskEdit ( aba Additional )
abaixo:

Delphi Aplicado - by Jurandir A. Pellin

Insira um Bitbtn e no evento OnClick digite o cdigo

( e-mail: delphiewb@gmail.com )

126

R Case of else end ( 2 )


Trabalhando com blocos de comandos. Para fazer o exemplo abaixo, insira um form, dois Edits e um Bitbtn.

Digete 11 e ser mostrado o


ms por extenso.

R Case ... of ... else end ( 3 )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

127

R Atalhos importantssimos do editor de cdigos ( shortcuts )


Ctrl Shift I ................. Desloca bloco de texto/cdigo para direita.
Ctrl Shift U ................ Desloca bloco de texto/cdigo para esquerda.
Crtl K T ....................... Marca uma palavra.
Ctrl K O....................... Converte bloco marcado para minsculas.
Ctrl Y .......................... Apaga linha corrente.
Ctrl N .......................... Insere linha na posio do cursor.
Ctrl F9......................... Compila programa.
F9 ............................... Executa programa ( Run ).
Ctrl F2......................... Interrompe/resseta programa que esta rodando.
Ctrl Barra Espao....... Chama tela de mtodos.
Ctrl F12.......................... Abre lista de unidades.
Shift F12........................ Abre lista de formulrios.
Ctrl Shift C.................. Adicionana linhas para implementao.
Ctrl S........................... Salva projeto.

R Como usar componente CheckBox ?


Verifica se CheckBox ( caixinhas ) esto marcadas ou no.

Insira dois componentes que


esto na paleta Standard.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

128

R Diferena de dias - DaysBetween


Na linha Uses inclua DateUtils

R Como usar If ... else ... end ?


Trabalhando com blocos de comandos.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

129

Verifica o nmero digitado, aceitar o intervalo


de 1 at 12 , dependendo do ms escolhido ser
mostrado o ms escrito no edit a seguir.

R Como usar o operador or ? ( 1 )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

130

R Como usar o operador or ? ( 2 )


Verifica se foi digitado o texto Masculino ou Feminino.

R Diferena de anos - YearsBetween

R Como usar o operador and ?

Verifica se o nmero digitado maior ou igual a 20 e menor ou igual a 90.


Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )

131

R Com usar os componentes ComboBox e CheckBox ?


Exemplo mostrando o uso combinado dos componentes ComboBox e CheckBox.. No exemplo a seguir h 4
situaes.

Insira um Formulrio, um Combobox


( aba Standard ) e 3 componentes
CheckBox.

Clique no ComoboBox,
clique na propriedade Items,
clique Strings, ser aberta
uma tela, digite as 3 cidades.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

132

Digite os cdigos a seguir em seus respectivos eventos:

Com Items.Add pode-se adicionar


itens via programao.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

133

R Como formatar data e hora ?

Exemplos de Formatos
DIA
ShortDateFormat
ShortDateFormat
ShortDateFormat
ShortDateFormat

:= 'd'
:= 'ddd';
:= 'dddd';
:= 'dddddd';

1d
3 ds
4 ds
6 ds

Dia 23
Dia da semana abreviado "Dom"
Dia da semana "Domingo"
Data: domingo, 23 de janeiro de 2000

MES
ShortDateFormat
ShortDateFormat
ShortDateFormat
ShortDateFormat

:= 'm';
:= 'mm';
:= 'mmm';
:= 'mmmm';

1m
2 ms
3 ms
4 ms

Dia do ms "1"
Dia do ms com o zero diante do "01"
Ms abreviado "Jan"
Ms por extenso "Janeiro"

ANO
ShortDateFormat
ShortDateFormat

:= 'yy';
:= 'yyy';

Formato "23/01/2000"
Ano "2000

HORA
ShortDateFormat
ShortDateFormat
ShortDateFormat
ShortDateFormat
ShortDateFormat

:= 'n';
:= 'ss';
:= 't';
:= 'tt';
:= 'am/pm';

Minutos "11" ou 'nn' = 05 ou 's' = 5


Segundo "05"
Formato "17:15"
Formato "17:15:06" S retorna se AM ou PM

Insira um boto do tipo BitBtn e um Label, d um clique duplo sobre o boto Bitbtn e no evento OnClick
digite as duas linhas abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

134

R Pesquisando registros com InputBox e SetRange


Pesquisando registro em uma tabela de dados.
Insira um Form, DbGrid, Table, DataSource e um
Bitbtn. Altere o Name do Table e Datasource como
esta no Grid. Clique em Clientes_TB, altere a
propriedade DatabaseName para Alias ( aqui
Madruga ), a propridade TableName para
Clientes.DB, clique no Clientes_DS e defina a
prorpriedade Dataset para Clientes_TB, clique duplo
sobre Clientes_TB, clique no boto direito, clique em
Fields Editor, Add Fields e Ok para adicionar todos
os campos. Clique na propriedade Active e defina o
valor para True. Clique no DBGrid, clique na
propriedade DataSource e informe Clientes_DS.
Clique em Clientes_DS, clique em DataSet e defina
Clientes_TB

Digite o cdigo
abaixo no evento
OnClick do Bitbtn.

Sero mostradas duas


caixas de dilogo
pedindo pelo cdigo
inicial e final.

R Pesquisando registros com InputQuery x InputBox


Pesquisando registros em uma tabela de dados.
No exemplo abaixo veremos como usar o InputQuery e InputBox.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

135

InputQuery

Obs: Com o InputQuery podemos programa o clique no boto


cancel, e j no InputBox no possvel.

InputBox

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

136

R Gravando registro mediante confirmao Sim ou No.


Gravar o registro na tabela somente mediante confirmao, clicando no boto Sim ou No

R Como usar o componente RadioGroup ?


Usando Radiogroup e Case para fazer uma escolha.

Insira um formulrio, um
radiogroup, na propriedade
Columns digite o valor 2 para
fazer duas colunas dentro do
RadioGroup, um Edit e um
Label.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

137

R Como criar cores personalizadas ( sistema RGB ) ?


Gerando cor para fundo do formulrio.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

138

R Como filtrar registro em um ListBox ?

Insira um novo formulrio, um edit e e um componente


ListBox. Faa vrios testes... Pressione a tecla Esc, pressione
Enter e Backspace, veja como o cdigo se comporta.
Digite os nomes no ListBox: Clique no ListBox, na
propriedade Items clique em (TString ... ) e digite os nomes.

Digite a varivel PausaX.

Digite a funo Procura

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

139

R Abre Outlook
Adicione um boto do tipo Bitbtn no formulrio, d um clique neste boto e digite o cdigo abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

140

R Mostra IP atual

R Como criar uma tabela via programao ?


Para criar uma tabela usamos o Database Desktop, no exemplo a seguir mostrarei como criar tabela atravs
de cdigo.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

141

Tabela criada

R Maneiras de procurar registros nas tabelas


Insira um boto do tipo BitBtn, d clique duplo sobre este boto e digite o cdigo abaixo:

PROCURA 1 - Procura registros atravs de um ndice primrio


FindKey ( funo )
Procura registro pela chave primria ( procura por cdigo )

Delphi Aplicado - by Jurandir A. Pellin

Insira um componente
Bitbtn, clique duplo
neste boto e digite as
linhas de cdigo ao
lado no evento
OnClick.

( e-mail: delphiewb@gmail.com )

142

Se voc tiver alguma dvida sobre alguma funo, basta posicionar o cursor sobre a funo desejada (neste
exemplo: Message ) e pressione F1. O Delphi explicar detalhadamente sobre cada funo, porm, a ajuda
est em ingls J ... no problem J

The MessageBox function creates, displays, and operates a message box. The message box contains an
application-defined message and title, plus any combination of predefined icons and push buttons.
int MessageBox(
HWND
hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT
uType
Parameters
hWnd

// handle of owner window


// Texto da mensagem
// define um ttulo para caixa com o erro
// tipo de caixa com cone exclamao e boto OK

Identifies the owner window of the message box to be created. If this parameter is NULL, the message box
has no owner window.
lpText
Points to a null-terminated string containing the message to be displayed.
lpCaption
Points to a null-terminated string used for the dialog box title. If this parameter is NULL, the default title
Error is used.
uType
Specifies a set of bit flags that determine the contents and behavior of the dialog box. This parameter can be
a combination of flags from the following groups of flags.
Specify one of the following flags to indicate the buttons contained in the message box:
Flag
MB_ABORTRETRYIGNORE
Ignore.
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL

Meaning
The message box contains three push buttons: Abort, Retry, and
The message box contains one push button: OK. This is the default.
The message box contains two push buttons: OK and Cancel.
The message box contains two push buttons: Retry and Cancel.
The message box contains two push buttons: Yes and No.
The message box contains three push buttons: Yes, No, and Cancel.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

143

Flag Meaning
MB_ICONEXCLAMATION, MB_ICONWARNING An exclamation-point icon appears in the message box.
MB_ICONINFORMATION, MB_ICONASTERISK
An icon consisting of a lowercase letter i in a circle appears in the message box.
MB_ICONQUESTION
A question-mark icon appears in the message box.
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
A stop-sign icon appears in the message box.
Specify one of the following flags to indicate the default button:
Flag
Meaning
MB_DEFBUTTON1
The first button is the default button. MB_DEFBUTTON1 is the default unless
MB_DEFBUTTON2, MB_DEFBUTTON3, or MB_DEFBUTTON4 is specified.
MB_DEFBUTTON2
The second button is the default button.
MB_DEFBUTTON3
The third button is the default button.
MB_DEFBUTTON4
The fourth button is the default button.
Specify one of the following flags to indicate the modality of the dialog box:

Flag

Meaning

MB_APPLMODAL

The user must respond to the message box before continuing work in the
window identified by the hWnd parameter. However, the user can move to the
windows of other applications and work in those windows. Depending on the
hierarchy of windows in the application, the user may be able to move to other
windows within the application. All child windows of the parent of the message
box
are
automatically
disabled,
but
popup
windows
are
not.MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor
MB_TASKMODAL is specified.

MB_SYSTEMMODAL

Same as MB_APPLMODAL except that the message box has the


WS_EX_TOPMOST style. Use system-modal message boxes to notify the user
of serious, potentially damaging errors that require immediate attention (for
example, running out of memory). This flag has no effect on the user's ability to
interact with windows other than those associated with hWnd.

MB_TASKMODAL

Same as MB_APPLMODAL except that all the top-level windows belonging


to the current task are disabled if the hWnd parameter is NULL. Use this flag
when the calling application or library does not have a window handle available
but still needs to prevent input to other windows in the current application
without suspending other applications.

In addition, you can specify the following flags:


MB_DEFAULT_DESKTOP_ONLY
The desktop currently receiving input must be a default desktop; otherwise, the function fails. A default
desktop is one an application runs on after the user has logged on.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

144

MB_HELP
Adds a Help button to the message box. Choosing the Help button or pressing F1 generates a Help event.
MB_RIGHT
The text is right-justified.
MB_RTLREADING
Displays message and caption text using right-to-left reading order on Hebrew and Arabic systems.
MB_SETFOREGROUND
The message box becomes the foreground window. Internally, Windows calls the SetForegroundWindow
function for the message box.
MB_TOPMOST
The message box is created with the WS_EX_TOPMOST window style.
MB_SERVICE_NOTIFICATION
Windows NT only: The caller is a service notifying the user of an event. The function displays a message
box on the current active desktop, even if there is no user logged on to the computer. If this flag is set, the
hWnd parameter must be NULL. This is so the message box can appear on a desktop other than the desktop
corresponding to the hWnd.

For Windows NT version 4.0, the value of MB_SERVICE_NOTIFICATION has changed. See
WINUSER.H for the old and new values. Windows NT 4.0 provides backward compatibility for pre-existing
services by mapping the old value to the new value in the implementation of MessageBox and
MessageBoxEx. This mapping is only done for executables that have a version number, as set by the linker,
less than 4.0.
To build a service that uses MB_SERVICE_NOTIFICATION, and can run on both Windows NT 3.x and
Windows NT 4.0, you have two choices.

1.
At link-time, specify a version number less than 4.0; or
2.
At link-time, specify version 4.0. At run-time, use the GetVersionEx function to check the system
version. Then when running on Windows NT 3.x, use MB_SERVICE_NOTIFICATION_NT3X; and on
Windows NT 4.0, use MB_SERVICE_NOTIFICATION.
MB_SERVICE_NOTIFICATION_NT3X
Windows NT only: This value corresponds to the value defined for MB_SERVICE_NOTIFICATION for
Windows NT version 3.51.
Return Values
The return value is zero if there is not enough memory to create the message box.
If the function succeeds, the return value is one of the following menu-item values returned by the dialog
box:
Value
Meaning
IDABORT
Abort button was selected.
IDCANCEL Cancel button was selected.
IDIGNORE Ignore button was selected.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

145

IDNO
No button was selected.
IDOK
OK button was selected.
IDRETRY
Retry button was selected.
IDYES
Yes button was selected.
If a message box has a Cancel button, the function returns the IDCANCEL value if either the ESC key is
pressed or the Cancel button is selected. If the message box has no Cancel button, pressing ESC has no
effect.

MessageBox
uma Funo

Mb_IconWarning + Mb_Ok
Constante - Caption.
Caption = Erro

Constante Texto,
ou seja,

Erro

Cliente no existe

PROCURA 2 - Procura registros atravs de um ndice primrio


GotoKey ( funo )
Filtra registros atravs de uma chave primria com GotoKey. Insira um boto do tipo BitBtn, d um clique
duplo sobre este boto e ditite o cdigo abaixo:

Ao invs de usar o
componente Edit
usaremos a
varivel Clientes.

AsString: Converte varivel para String


( texto ).
FieldByName: Pega o nome do Campo

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

146

No exemplo da pgina acima usamos a varivel Cliente, no exemplo abaixo usaremos um edit:

Podemos otimizar cdigo fonte com With ... do, compare com cdigo da pgina anterior:

Compare o cdigo nmero com . No repito vrias vezes Clintes_TB, no cdigo usei With ... do
para evitar esta repetio. uma maneira de deixar seu cdigo mais enxuto

PROCURA 3 - Procura registros atravs de um ndice secundrio


FindNearest ( procedure )
Localiza registros atravs de um ndice secundrio. A procedure FindNearest , localiza registros atravs das
primeiras letras digitadas no campo edit4. Digite o cdigo abaixo no evento OnChange do Edit.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

147

PROCURA 4 - Procura registros atravs de um ndice secundrio


GotoNearest ( procedure )
Procurando registros atravs de um ndice secundrio. A procedure GotoNearest localiza registros atravs
das primeiras letras digitadas no campo edit3. Digite o cdigo abaixo no evento OnChange do Edit.

PROCURA 5 - Procura registros atravs de qualquer campo


Procura registro na tabela atravs de qualquer campo.

Filter

Cdigo nome do campo

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

148

PROCURA 6 - Procura registros atravs de qualquer campo


Locate ( funo )
Com esta funo podemos procurar registros em uma tabela atravs de qualquer campo, este campo no
precisa ser ndice, digite o cdigo abaixo no evento OnClick de um boto.
Se o nome
digitado na caixa
de dilogo no
existir na tabela, o
Delphi mostrar a
mensagem acima.

Interpretando: If Cliente <> then ( se o contedo da varivel Cliente for diferente de branco ... ), ou
seja, se for digitado algo na caixa de dilogo.

Reconhece registros gravados com letras maisculas na caixa InputBox - ( uppercase ):


No exemplo acima usamos a varivel Cliente e no exemplo abaixo usaremos um edit:

R O que SQL ?

SQL w Structured Query Language

A SQL ou Linguagem Estruturada de Pesquisa, uma linguagem universal para a manipulao de


informaes em banco de dados.
Os mtodos de acesso aos registros utilizados pelo componente TTable so bons para pesquisas simples em
registros, exceto para pesquisas complicadas de tomada de decises. Para usarmos informaes em banco de
dados de uma forma mais eficiente, deveremos chamar os dados de maneiras diferentes, combinar dados de
vrias tabelas, aplicando restries e resumir grandes volumes de dados em poucos nmeros significativos.
O modo mais fcil de fazer isto utilizando a SQL.
A SQL uma linguagem no procedural, ou seja, no possui procedimentos ou funes para realizar tarefas.
Neste tipo de linguagem ns informamos o que queremos, e no como faze-lo.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

149

R SQL w Como classificar registros com SQL ?


Insira um Form, DBGrid, Query, DataSource e Bibbtn.
Como foi explicado nas pginas anteriores sobre filtragem de dados, farei alguns exemplos bsicos de
filtragem de dados usando SQL, mais adiante veremos mais detalhadamente sobre SQL.
Procedimentos abaixo feitos no Delphi 6.0, no Delphi 5.0 use mesmos componentes:
Clique no boto New Form.
Defina as propriedades Caption para Grade de dados e Name para Grade_Frm.
Insira um DBGrid ( aba Data Controls ).
Salve o arquivo ( formulrio ) com o nome de Clientes_Grid1.pas.
Insira um DataSource ( aba Data Access ).
Insira um Query1.
Clique no DataSource e defina a propriedade DataSet para Query1.
Clique no Query1 defina a propriedade DataBaseName = Alias.
Clique no DBGrid e defina a propriedade DataSource para DataSource1.
Insira 3 componentes BitBtn, defina as propriedades caption e name.

ASC classifica os
registros em ordem
ASCendente.

DESC classificar
registros em ordem

DESCendente.

SELECIONA Todos DA tabela CLIENTES na ORDEM por cdigo DESCENDENTE

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

150

R SQL w Procurando registro com SQL


Insira um boto do tipo Bitbtn e no evento OnClick digite o cdigo abaixo.

Insira um componente Edit e um


Bitbtn, digite as linhas de cdigo
abaixo no evento OnClick.

Use esta funo para


converter aspas em string.

R SQL w Procurando registro com parmetro


Neste exemplo estamos procurando / filtrando um registro usando parmetro, neste caso Xnome.
Insira um Edit e um Bitbtn, no evento OnClick digite as linhas
de cdigo abaixo:

Xnome uma varivel.


Passaremos o parmetro
para localizar o que for
digitado no Edit.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

151

R SQL w Procurando registro com SQL e InputBox:


Clique no componente Query1, clique na propriedade SQL TStrings (...), dentro da caixa digite o cdigo
SQL abaixo.
SELECT
Clie_Codigo,
Clie_Nome,
Clie_Cidade
FROM
"Clientes.DB" Clientes
WHERE
Upper(Clie_Nome) LIKE Upper(:Xnome)
ORDER BY Clie_Nome

Upper fora
maisculas.
UpperCase
fora entrar
dados em
maisculas no
InputBox.

R SQL w Procura datas maiores ou iguais ao do sistema


Retorna no DBGrid somente as datas dos aniversariantes maiores ou iguais a data do sistema (data
corrente).
Dia em do teste deste
exemplo: 08/11/2002

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

152

R SQL w Pesquisando ms dia-ms-ano


Localizando registros do ms solicitado.

Pode ser extrado: dia, ms e ano J


Day
Month
Year

= dia
= ms
= ano

No podemos voltar atrs e fazer um novo comeo, mas podemos recomear e fazer um novo fim.
Ayrton Senna

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

153

R SQL w SQL Interativo ( visual ) com SQL Builder


Clique no boto New Form.
Defina as propriedades Caption para Grade de dados e Name para Grade_Frm.
Insira um DBGrid ( aba Data Controls ).
Salve o arquivo ( formulrio ) com o nome de Clientes_Grid1.pas.
Insira um DataSource ( aba Data Access )
Insira um Query1.
Clique no DataSource e defina a propriedade DataSet para Query1
Clique no Query1 defina a propriedade DataBaseName para Alias.
Clique no DBGrid e defina a propriedade DataSource para DataSource1.

Clique em Query1,
clique no boto direito,
clique em
SQL Builder, ser aberta
a tela abaixo:

Insira um Edit e
um Bitbtn.

Para ver o resultado da


SQL basta clicar no raio.

Selecione o
Alias que esta sendo
usado no seu projeto.
Selecione os
campos desejados
que sero listados
clicando nos
quadradinhos.

Delphi Aplicado - by Jurandir A. Pellin

Escolha a
tabela
Clientes.DB.

( e-mail: delphiewb@gmail.com )

154

Clique no raio

para visualizar o resultado da sql.

Usaremos o Sorting para ordenar os registros ( ordem alfabtica ). Na aba Sorting clique no campo
Clientes.Clie_Nome, clique no boto Add, o campo ser posicionado no lado direito da tela, indicando que
foi selecionado, feche o SQL Builder clicando no x e para finalizar clique yes.

Clique no componente Query1, pressione F11 para ir para as propriedades, clique nos trs pontinhos da
propriedade SQL ( ... ), ser aberta uma caixa mostrando a SQL que foi gerada pelo SQL Builder, o que j
fizemos anteriormente com a tela grfica no item , organize a disposio da SQL para melhor visualizar e
para finalizar clique OK.
SQL gerada pelo SQL Builder:
SELECT Clie_Codigo, Clie_Nome, Clie_Cidade
FROM "Clientes.DB" Clientes
ORDER BY Clie_Nome
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

155

SQL organizada para melhor ler o cdigo J


SELECT
Clie_Codigo,
Clie_Nome,
Clie_Cidade
FROM
"Clientes.DB" Clientes
ORDER BY
Clie_Nome
O que est escrito em
vermelho voc dever incluir
( digitar ) para passar
parmetro ao Xnome.

SELECT
Clie_Codigo,
Upper : fora
Clie_Nome,
digitao letras
Clie_Cidade
maisculas.
FROM
"Clientes.DB" Clientes
WHERE
Upper(Clie_Nome) LIKE Upper(:Xnome)
ORDER BY
Clie_Nome

Clique em Query1, clique na propriedade Params, clique em Xnome, ser aberta a tela abaixo:
Defina a propriedade
DataType para ftString, visto
que o nome a ser armazenado
neste parmetro ser uma
string. Defina o tipo de
parmetro ParmType para
ptInput.

No evento OnClick do boto Procura 1 que um componente Bitbtn, digite o cdigo abaixo:

A linha de cdigo acima filtrar qualquer letra que for digitada no Edit.

Foram digitadas as letras iniciais


ra, sero listados todos os
registros com estas iniciais.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

156

R SQL w Filtrar registros letras iniciais ou perodo


Componentes utilizados neste exemplo DbGrid, Query, Edit e DateTimePicker

Insira dois componentes


DateTimePicker ( aba Win32 ) para
dar entrada das datas, trs Labels
para as descries e um Edit para
digitar letras as serem procuradas.
Defina as propriedades do Query e
do DataSource.

Clique no componente Query1,


clique no boto direito, clique em
Fields Editor, clique no boto
direito Add Fields, adcione os
campos que forem listados e feche a
tela.
Critrio de pesquisa: Foi
digitado as letras ra ( sem as
aspas ), data inicial 01/01/1978
e data final 30/12/1988
Sero filtrados todos os
registros neste intervalo.

Insira um Form.
Insira um DBGrid.
Insira um DataSource.
Insira um Query, na propriedade DatabaseName defina o Alias ( ou, caminho onde as tabelas esto
armazenadas ), propriedade SQL ( ... ) clique nos trs pontinhos e digite o cdigo sql abaixo:
SELECT
Clie_Codigo,
Clie_Nome,
Clie_Data_Nas
FROM
"Clientes.DB" Clientes
WHERE
Clie_Nome
LIKE :NomeX
AND
( Clie_Data_Nas >=
:Dta_Inicial ) AND
( Clie_Data_Nas <=
:Dta_Final )
ORDER BY
Clie_Nome

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

157

Clique no DBGrid e defina a propriedade DataSource para DataSource1.


Clique no boto OK e no evento OnClick digite o cdigo abaixo:

Implementando cdigo
If Query1.RecordCount =
0 then
Application.MessageBox('
NADA foi encontrado!',
'ATTENO',
+ Mb_ok +
Mb_IconWarning)
else
ShowMessage('Total
registros encontrados : '
+
IntToStr(Query1.RecordC
ount));

R SQL w Filtra registros por valor e nome.

Ateno: Primeiramente voc


deve clicar na coluna para dizer
qual campo deseja pesquisar,
aps digite um cdigo ou o nome
no campo Edit e clique OK

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

158

Como usar este cdigo:


Clique na coluna desejada, aps
selecione ao lado Igual e clique no
boto Ok.
Exemplo abaixo:
Cliquei na coluna Salrio, aps digitei o
salrio de 5000, selecionei a opo Igual
e cliquei Ok.

FUNES DE GRUPO SQL ( veja exemplos bsicos na pgina = 53 )


AVG
Retorna a mdia dos valores da coluna, ignorando valores nulos.
Exemplo: Obtenha a mdia de salrios de todos os funcionarios.

Digite os campos da
tabela e o nome da
tabela.

SELECT AVG(salario) FROM Funcionarios;


SELECT AVG(salrio) FROM Funcionrios;
SELECT AVG(salario ) FROM Funcionarios;
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

159

COUNT
Retorna o nmero de ocorrncias da expresso, ou coluna. Usando *, retorna todas as ocorrncias das linhas
incluindo, duplicadas e nulas.
Exemplo: Obtenha o nmero de empregados da empresa
SELCT COUNT(*) FROM emp;
Exemplo: Obtenha o nmero de empregados do departamento 10
SELECT COUNT(*) WHERE deptno = 10;
SUM
Retorna a soma dos valores da coluna, ignorando valores nulos.
Exemplo: Obtenha a soma de todos os salrios dos empregados.
SELECT SUM(sal) FROM emp;
Exemplo: Obtenha a soma de todos os salrios do departamento 10.
SELECT SUM(sal) FROM emp WHERE deptno = 10;
MAX
Retorna o valor mximo de uma coluna.
Exemplo: Obtenha o maior salrio dos empregados.
SELECT MAX(sal) FROM emp;
Exemplo: Obtenha o maior salrio do departamento 20.
SELECT MAX(sal) FROM emp WHERE deptno = 20;
MIN
Retorna o valor mnimo de uma coluna.
Exemplo: Obtenha o menor salrio dos empregados.
SELECT MIN(sal) FROM emp;
Exemplo: Obtenha o menor salrio do departamento 10.
SELECT MIN(sal) FROM emp WHERE deptno = 10;
CLUSULA GROUP BY
A clusula GROUP BY referencia uma coluna especificada da tabela relacionada na clusula FROM e
agrupa as linhas com base nos valores iguais dessa coluna.
O resultado da clusula GROUP BY particiona a tabela em um conjunto de grupos, no efetuando qualquer
tipo de ordenao.
Exemplo: Obtenha o maior salrio de cada profisso.
SELECT job, MAX(sal ) FROM emp GROUP BY job;
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )

160

Exemplo: Obtenha o menor salrio de cada profisso.


SELECT job, MIN(sal) FROM emp GROUP BY job;
Exemplo: Obtenha o maior salrio da profisso CLERK.
SELECT MAX(sal) From Clientes WHERE job = 'CLERK' GROUP BY job;
Exemplo: Obtenha o menor salrio da profisso CLERK.
SELECT MIN(sal) From Clientes WHERE job = 'CLERK' GROUP BY job;
Exemplo: Obtenha a mdia salarial por departamento.
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
Observao: a clusula WHERE s pode ser usada em funes de grupos em casos especiais
CLUSULA HAVING
A clusula HAVING especifica uma restrio sobre a tabela agrupada que resultou de uma clusula
GROUP BY anterior e elimina os grupos que no satisfazem a condio estabelecida.
A clusula HAVING usada para especificar a qualidade que um grupo deve ter para ser includo no
resultado. Ela efetua para os grupos a mesma funo que a clusula WHERE efetua para as linhas.
A clusula HAVING sempre utilizada junto com a clusula GROUP BY, sendo que o HAVING
especificado sempre aps o GROUP BY.
Exemplo: Obtenha a mdia de salrio dos departamentos que possuem mais de 3 empregados.
SELECT deptno, AVG(sal) FROM emp GROUP BY Clientes HAVING COUNT(*) > 3;
Exemplo:
Obtenha as profisses que o maior salrio igual ou maior que 3000.
SELECT job, MAX(sal) FROM emp GROUP BY job HAVING MAX(sal) >= 3000;
SUBQUERIES (SUBCONSULTAS)
Uma subquery uma clusula SELECT aninhada com outra clusula SELECT e que retorna um resultado
intermedirio.
Exemplo:
SELECT coluna1, coluna2, .......... FROM tabela WHERE coluna = (SELECT coluna1, coluna2,........
FROM tabela WHERE condio);
A) SUBQUERY DE UMA LINHA
Exemplo: Obtenha o nome, profisso e salrio do empregado que possui o menor salrio.
SELECT MIN(sal) FROM emp; {recupera o menor salrio de todos os empregados}
SELECT ename, job, sal FROM emp WHERE sal = (SELECT MIN(sal) FROM emp)
{o resultado acima usado como parmetro nesta query}
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

161

Como as subqueries aninhadas so processadas


Uma subquery composta por duas clusulas SELECT, o SELECT principal e select interno. O comando
SELECT interno executado primeiro, produzindo um resultado. No exemplo acima o resultado 800. O
SELECT principal processado usando o valor retornado pelo SELECT interno. Observao: sempre que o
SELECT interno retorna uma linha da tabela podem ser utilizadas os operadores =, !=, <, <=, >, >=.
Exemplo: Obtenha o nome, profisso, de todos os empregados que possuem a mesma profisso do
empregado BLAKE.
SELECT job FROM emp WHERE ename = 'BLAKE';
SELECT ename, job FROM emp WHERE job = (SELECT job FROM emp WHERE ename =
'BLAKE');
Observao: O SELECT interno retorna a profisso de BLAKE que MANAGER, e o SELECT externo
retorna o nome dos empregados com profisso de MANAGER.
B) SUBQUERIES QUE RETORNAM MAIS DE UMA LINHA DA TABELA
OPERADOR IN
Relembrando, o operador IN testa (verifica) os valores que esto em uma lista de valores.
Exemplo: Obtenha o nome, salrio e nmero do departamento dos empregados que recebem o menor salrio
de cada departamento.
SELECT MIN(sal) FROM emp GROUP BY deptno;
SELECT ename, sal, deptno FROM emp WHERE sal in (SELECT MIN(sal) FROM emp GROUP BY
deptno)
Observao:
Sempre que aparecer uma SUBQUERY, onde, no resultado retornam mais de uma linha da tabela, utiliza-se
o operador IN.
OPERADORES ANY E ALL
Os operadores ANY e ALL so utilizados para subqueries que retornam mais de uma linha da tabela, e
requerem o uso dos operadores igual ( = ), menor ( > ), maior ( < ), menor ou igual (>= ), maior ou igual ( <=
) ou diferente ( !=), aplicado ao resultado de uma subconsulta.
ANY
Compara um valor com cada valor da lista de valores que foi retornado pela subquery.
Exemplo: Obtenha o nome, salrio, profisso e nmero do departamento de todos empregados que recebem
um salrio maior que o menor salrio dos empregados do departamento 30.
SELECT DISTINCT sal FROM emp WHERE deptno = 30;
SELECT ename, sal, job, deptno FROM emp WHERE sal > ANY (SELECT DISTINCT sal FROM
emp WHERE deptno = 30);
Observao: Quando a ANY utilizado, frequentemente a clusula DISTINCT utilizada para prevenir que
a mesma linha seja selecionada vrias vezes.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

162

ALL
Compara um valor com todos os valores da lista de valores retornados pela subquery.
Exemplo: Obtenha o nome, salrio, profisso e nmero do departamento de todos os empregados que
recebem um salrio maior, que todos os salrios dos empregados do departamento 30.
SELECT DISTINCT sal FROM emp WHERE deptno = 30;
SELECT ename, sal, job, deptno FROM emp WHERE sal > ALL (SELECT DISTINCT sal FROM
emp WHERE deptno = 30);
OPERADOR NOT
O operador NOT tambm pode utilizado com os operadores IN, ALL e ANY.
Utilizao do ORDER BY
No possvel utilizar o ORDER BY em um SELECT interno, a regra utilizar somente um ORDER BY
em uma subquery e este deve ser o ltimo comando do SELECT, ou seja no SELECT mais externo.
Aninhamento de subqueries
Tambm possvel aninhar (encadear) vrias queries uma dentro da outra, no existindo limites.
CLUSULA HAVING COM SUBQUERIES ANINHADAS
A clusula WHERE refere-se a uma linha da tabela e o HAVING a um grupo de linhas especificadas na
clusula GROUP BY.
Exemplo: Obtenha o nmero dos departamentos, onde os empregados recebem um salrio mdio maior que
a mdia salarial do departamento 30.
SELECT AVG(sal) FROM emp WHERE deptno = 30;
SELECT deptno, AVG(sal) FROM emp HAVING AVG(sal) > (SELECT AVG(sal) FROM emp
WHERE deptno = 30) GROUP BY deptno;
Exemplo: Obtenha a profisso dos empregados que recebem a mais alta mdia salarial.
SELECT MAX(AVG(sal)) FROM emp GROUP BY job;
SELECT job, AVG(sal) FROM emp GROUP BY job HAVING AVG(sal) = (SELECT
MAX(AVG(sal)) FROM emp GROUP BY job);
Observao: O SELECT interno encontra a mdia salarial par aos grupos de profisses, e a funo MAX
encontra a maior mdia salarial dos grupos, que o valor (5000), este utilizado pela clusula HAVING. A
clusula GROUP BY necessria no SELECT principal para agrupar as profisses.

Recuperao simples
SELECT * FROM emp;
ou
SELECT empno, ename, job, mgr, hiredate, sal, comm, depto FROM emp;
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

163

A linguagem SQL suporta as seguintes expresses simples:


ADIO
SUBTRAO
MULTIPLICAO
DIVISO

(+)
(-)
(*)
(/)

Observao:
Caso a expresso aritmtica contenha mais de um operador, a prioridade *, / e depois +, -, sempre da
esquerda para a direita quando existir vrios operadores com a mesma prioridade. Tambm podem ser
utilizados parnteses para especificar a ordem de execuo dos operadores.

Recuperao usando expresses aritmticas


Recuperar os nmeros dos empregados, salrios e salrio anual.
SELECT empno, sal, sal*12 FROM emp;
SELECT ename, sal +250 * 12 FROM emp;
SELECT ename, (sal + 250) * 12 FROM emp

Apelidos de colunas
Para criar um apelido para uma coluna, entre com o apelido depois do nome da coluna no comando
SELECT.
SELECT ename, sal * 12 SAL_ANUAL, comm FROM emp;

Operador de concatenao
O operador de concatenao permite ligar uma coluna a outra.
SELECT empno||ename EMPREGADO FROM emp;

Manuseio de valores nulos


Sempre que existir um valor nulo na tabela, este deve ser tratado, pois toda expresso feita com valor nulo o
resultado nulo.
Um valor nulo diferente de zero.
A funo NVL converte um valor nulo para outro valor numrico.
SELECT ename, sal, sal * 12 + comm SAL_ANAUAL FROM emp;
SELECT ename, sal, sal * 12 + NVL(comm,0) SAL_ANUAL FROM emp;
A funo NVL (comm, 0) substitui por 0 os valores nulos, para que no afetem a soma. Na multiplicao
utiliza-se 1 no lugar de um valor nulo para no afete a multiplicao.

CLUSULA DISTINTICT
A clusula distinct utilizada para eliminar os valores duplicados na sada (no resultado).
Recuperao no utilizando a clusula DISTINCT:
Obtenha todos os nmeros dos departamentos da tabela EMP.
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )

164

SELECT deptno FROM emp;


Recuperao utilizando a clusula DISTINCT:
Obtenha todos os nmeros dos departamentos da tabela EMP.
SELECT DISTINCT deptno FROM emp;
DISTINCT pode ser utilizado para mltiplas colunas.
SELECT DISTINCT deptno, job FROM emp;

CLUSULA ORDER BY
A clusula ORDER BY utilizada para ordenar (classificar) as linhas da tabela .
A ordem do resultado pode aparecer em ordem decrescente (DESC) ou ascendente (ASC) que default.
A clusula order by sempre deve aparecer por ltimo no comando select.
Obtenha o nome, a profisso, o solrio de todos os empregados em ordem ascendente de nome do
empregado.
SELECT ename, job, sal FROM emp ORDER BY ename;
Obtenha o nome, a profisso e o salrio de todos os empregados em ordem decrescente de nome do
empregado.
SELECT ename, job, sal FROM emp ORDER BY ename DESC;
Obtenha o nome, a profisso e o salrio de todos os empregados em ordem decrescente de profisso e
crescente de salrio.
SELECT ename, job, sal FROM emp ORDER BY job DESC, SAL
Obtenha o nome, a profisso e o salrio de todos os empregados em ordem decrescente de profisso e
salrio.
SELECT ename, job, sal FROM emp ORDER BY job DESC, sal DESC;

CLUSULA WHERE
A clusula WHERE utilizada para especificar a condio ou condies que as linhas selecionadas devem
satisfazer. As condies da clusula WHERE podem ser valores de colunas, valores literais (seqncia de
caracteres), expresses aritmticas ou funes. Seqncia de caracteres e datas devem ser englobadas entre
aspas simples. WHERE especifica a condio desejada, que pode assumir os operadores =, !=, >, >=, <, <=;
operadores booleanos AND, OR e NOT; e parnteses para indicar uma ordem desejada.

OPERADORES LGICOS
A clusula WHERE pode assumir os seguintes operadores lgicos:
Igual
Maior
Maior ou Igual
Menor
Menor ou Igual

(=)
(>)
( >= )
(<)
( <= )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

165

SELECT ename, sal, FROM emp WHERE deptno = 10;


SELECT ename, sal, FROM emp WHERE sal > 2000;

Operadores booleanos
A clusula WHERE pode assumir os seguintes operadores booleanos:
AND;
OR;
NOT.

AND - As duas condies devem ser satisfeitas para que a consulta retorne uma ou mais linhas da tabela.
Sintaxe:
SELECT colunas FROM nome-da-tabela WHERE condio1 AND condio2;

Recuperao Qualificada:
Obtenha os nmeros dos empregados do departamento 20 com salrio maior 1500.
SELECT ename, sal, depto FROM emp WHERE deptno = 20 AND sal > 1500;

OR - Quando uma ou ambas as condies forem satisfeitas.


Sintaxe:
SELECT colunas FROM nome-da-tabela WHERE condio1 OR condio2;
Obtenha os nmeros dos empregados do departamento 20 ou que possuem salrio maior 1500.
SELECT ename, sal, depto FROM emp WHERE deptno = 20 OR sal > 1500;

Usando and e or na mesma consulta


Ao usar AND e OR na mesma consulta, voc geralmente deve usar parntese para tornar a consulta mais
clara. A colocao dos parnteses pode alterar completamente o resultado.
SELECT ename, job, hiredate, sal, deptno FROM emp WHERE sal > 500 AND job ='CLERK' AND
(hiredate='03-DEC-81' OR hiredate='17-DEC-80);
SELECT ename, job, hiredate, sal, deptno FROM emp WHERE sal > 500 AND job = 'CLERK'
OR (hiredate = '03-DEC-81' AND hiredate = '17-DEC-80');

OPERADORES SQL
Operador BETWEEN ...AND ...
O operador BETWEEN..AND... testa os valores da coluna, e recupera os valores que esto entre um valor
mnimo e um valor mximo inclusive especificados no BETWEEN.
Obtenha os nomes e salrios dos empregados que possurem salrios entre os valores 1000 e 2000.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

166

SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 2000;

Operador IN
O operador IN testa os valores da coluna, e recupera somente os valores que esto na lista de valores
especificados pelo operador IN.
Obtenha os nmeros, os salrios e os gerentes dos empregados que possurem os gerentes com os nmeros
7902, 7566, 7788.
SELECT empno, sal, mgr FROM emp WHERE mgr IN (7902, 7566, 7788);
Observao
Caso forem usados caracteres ou data na lista, especific-los entre aspas simples.

Operador LIKE
O operador LIKE permite recuperar linha da tabela sem saber exatamente o valor que est sendo procurado,
utilizando para isso os smbolos (%) e ( _ ). O smbolo de sublinhado ( _ ) usado para representar um nico
caractere. O smbolo de percentagem (%) usado para representar uma cadeia de caracteres de qualquer
tamanho (inclusive zero).
Obtenha os nomes dos empregados que iniciam seu nome com S.
SELECT ename FROM emp WHERE ename LIKE 'S%';
Observao
O LIKE s pode ser usado com cadeia de caracteres ou com dados grficos, e no com dados numricos.

Operador IS NULL
O operador IS NULL testa os valores da coluna, e recupera somente as linhas da tabela que possurem o
valor null.
Obtenha os nmeros dos empregados que no possurem gerente, ou seja o campo nmero do gerente (mgr)
igual a nulo.
SELECT ename, mgr FROM emp WHERE mgr IS NULL;

Utilizando a negao (NOT)


Os operadores BETWEEN...AND..., IN, LIKE, e IS NULL podem ser combinados com o operador de
negao NOT.
Operador
NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL

Significado
no entre dois valores especificados
no entre uma lista de valores
no entre um padro especificado
no igual ao valor null

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

167

R Principais instrues SQL


Instruo SELECT
Instrui o programa principal do banco de dados para retornar a informao como um conjunto de registros.
Sintaxe
SELECT [predicado { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]}
FROM expressotabela [, ...] [IN bancodedadosexterno]
[WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]

A instruo SELECT tem as partes abaixo:


Parte
predicado

Descrio
Um dos seguintes predicados: ALL, DISTINCT, DISTINCTROW ou TOP.
Voc usa o predicado para restringir o nmero de registros que retornam. Se
nenhum for especificado, o padro ser ALL.
Especifica que todos os campos da tabela ou tabelas especificadas so
selecionados.
O nome da tabela que contm os campos dos quais os registros so
selecionados.

*
tabela

campo1, campo2

Os nomes dos campos dos quais os dados sero recuperados. Se voc incluir
mais de um campo, eles sero recuperados na ordem listada.
alias1, alias2
Os nomes que sero usados como ttulos de colunas em vez dos nomes
originais das colunas na tabela.
expressotabela
O nome da tabela ou tabelas contendo os dados que voc quer recuperar.
Bancodedadosexterno O Nome do banco de dados que contm as tabelas em expressotabela se no estiver
no banco de dados atual.
Comentrios
Para executar esta operao, o programa principal de banco de dados procura a tabela ou tabelas
especificadas, extrai as colunas escolhidas, seleciona as linhas que satisfazem o critrio e classifica ou
agrupa as linhas resultantes na ordem especificada. A instruo SELECT no muda os dados no banco de
dados.
SELECT normalmente a primeira palavra em uma instruo SQL. A maior parte das instrues SQL so
instrues SELECT. A sintaxe mnima da instruo SELECT :
SELECT campos FROM tabela
Voc pode usar um asterisco (*) para selecionar todos os campos na tabela. O exemplo abaixo seleciona
todos os campos na tabela Funcionrios: SELECT * FROM Funcionrios;
Se o nome de um campo estiver includo em mais de uma tabela na clusula FROM, preceda-o com o nome
da tabela e o operador . (ponto). No exemplo abaixo, o campo Departamento est nas tabelas Funcionrios e
Supervisores. A instruo SQL seleciona Departamento da tabela Funcionrios e NomeSupv da tabela
Supervisores:
SELECT Funcionrios.Departamento, Supervisores.NomeSupv

FROM

Funcionrios INNER JOIN Supervisores

WHERE Funcionrios.Departamento = Supervisores.Departamento;


Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

168

Ao criar um objeto Recordset, o programa principal de banco de dados do Jet usa o nome do campo da
tabela como o nome do objeto Field no objeto Recordset.
Se voc quiser um nome de campo diferente ou um nome que no esteja implcito na expresso usada para
gerar o campo, use a palavra reservada AS. O exemplo abaixo usa o ttulo Nasc para nomear o objeto Field
retornado no objeto Recordset resultante:
SELECT DataNasc AS Nasc FROM Funcionrios;
Sempre que voc usar funes aggregate ou consultas que retornem nomes de objetos Field ambguos ou
duplicados, voc precisar usar a clusula AS para fornecer um nome alternativo para o objeto Field.
O exemplo abaixo usa o ttulo Contagem para nomear o objeto Field retornado no objeto Recordset
resultante:
SELECT COUNT(FuncionrioID) AS Contagem FROM Funcionrios;
Voc pode usar outras clusulas na instruo SELECT para restringir e organizar posteriormente os seus
dados retornados.

Clusula GROUP BY
GROUP BY opcional. Valores de resumo so omitidos se no houver qualquer funo aggregate SQL na
instruo SELECT. Os valores Null nos campos GROUP BY so agrupados e no omitidos. No entanto, os
valores Null no so avaliados em qualquer funo aggregate SQL. Use a clusula WHERE para excluir
linhas que voc no quer agrupadas e use a clusula HAVING para filtrar os registros aps eles terem sido
agrupados.
A no ser que contenha dados Memo ou OLE Object, um campo na lista de campos GROUP BY pode fazer
referncia a qualquer campo em qualquer tabela listada na clusula FROM. Mesmo que o campo no esteja
includo na instruo SELECT, fornecida a instruo SELECT, inclua pelo menos uma funo SQL. O
programa principal de banco de dados do Jet no pode agrupar campos Memo ou OLE Objects.
Todos os campos na lista de campos SELECT devem ser includos na clusula GROUP BY ou includos
como argumentos em uma funo aggregate SQL.

Clusula HAVING
HAVING opcional. HAVING semelhante a WHERE, que determina quais registros so selecionados.
Depois que os registros so agrupados com GROUP BY, HAVING determina quais registros so exibidos:
SELECT
HAVING

CategoriaID, Sum(UnidadesNoEstoque) FROM Produtos GROUP BY CategoriaID


SUM(UnidadesNoEstoque) > 100 AND LIKE "BOS*";

Uma clusula HAVING pode conter at 40 expresses vinculadas por operadores lgicos, como And ou Or.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

169

Clusula ORDER BY
ORDER BY opcional. Entretanto, se voc quiser exibir seus dados na ordem classificada, voc deve
utilizar ORDER BY. O padro ordem de classificao ascendente (A a Z, 0 a 9). Os dois exemplos abaixo
classificam os nomes dos funcionrios pelo sobrenome.
SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome;
SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome ASC;
Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra reservada DESC ao final de cada
campo que voc quiser classificar em ordem descendente. O exemplo abaixo seleciona salrios e os
classifica em ordem descendente
SELECT Sobrenome, Salrio FROM Funcionrios ORDER BY Salrio DESC, Sobrenome;
Se voc especificar um campo que contm dados Memo ou OLE Objects na clusula ORDER BY, um erro
ocorrer. O programa principal de banco de dados do Jet no classifica campos deste tipo. ORDER BY
normalmente o ltimo item em uma instruo SQL.
Voc pode incluir campos adicionais na clusula ORDER BY. Os registros so classificados primeiro pelo
primeiro campo listado depois de ORDER BY. Os registros que tiverem valores iguais naquele campo so
classificados pelo valor no segundo campo listado e assim por diante.

Clusula WITH OWNERACCESS OPTION


A declarao WITH OWNERACCESS OPTION opcional. O exemplo abaixo habilita o usurio a ver as
informaes de salrio (mesmo que no tenha outra permisso para ver a tabela Folha de Pagamentos) desde
que o proprietrio da consulta tenha tal permisso:
SELECT Sobrenome, Nome, Salrio
OWNERACCESS OPTION;

FROM Funcionrios ORDER

BY Sobrenome WITH

Se, por outro lado, um usurio for impedido de criar ou anexar a uma tabela, voc poder usar WITH
OWNERACCESS OPTION para habilit-lo a executar uma consulta construo de tabela ou consulta
anexao. Se voc quiser reforar as configuraes de segurana do grupo de trabalho e as permisses dos
usurios, no inclua a declarao WITH OWNERACCESS OPTION. Esta opo exige que voc tenha
acesso ao arquivo System.mda associado ao banco de dados. realmente til em implementaes de
multiusurios seguras.

Mais exemplos de instrues SELECT, clusula FROM


Esse exemplo seleciona os campos "Sobrenome" e "Nome" de todos os registros da tabela "Funcionrios".
SELECT Sobrenome, Nome FROM Funcionrios
Esse exemplo seleciona todos os campos da tabela "Funcionrios".
SELECT Funcionrios.* FROM Funcionrios;
Esse exemplo conta o nmero de registros que tm uma entrada no campo "CdigoPostal" e nomeia o campo
retornado como "Tcp".
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )
170

SELECT Count(CdigoPostal) AS Tcp FROM Clientes;


Esse exemplo mostra qual seria o salrio se cada funcionrio recebesse um aumento de 10 porcento. o
altera o valor original dos salrios.
SELECT Sobrenome, Salrio AS Atual, Salrio * 1.1 AS Proposto FROM Funcionrios;
Esse exemplo coloca o ttulo Nome no topo da coluna "Sobrenome". O ttulo Salrio exibido no topo da
coluna "Salrio".
SELECT Sobrenome AS Nome, Salrio FROM Funcionrios;
Esse exemplo mostra o nmero de funcionrios e os salrios mdio e mximo.
SELECT Count(*) AS [Total de Funcionrios], Avg(Salrio) AS [Salrio Mdio], Max(Salrio) AS
[Salrio Mximo] FROM Funcionrios;
Para cada registro, mostra Sobrenome e Salrio no primeiro e ltimo campos. A seqncia de caracteres
"tem um salrio de" retornada como o campo do meio de cada registro.
SELECT Sobrenome, 'tem um salrio de', Salrio FROM Funcionrios;

Exemplo de clusula GROUP BY


Esse exemplo cria uma lista de nomes de departamentos nicos e o nmero de funcionrios em cada um
destes departamentos.
SELECT Departamento,
Departamento;

Count([Departamento])

AS Tbc

FROM Funcionrios GROUP BY

Para cada ttulo de funo nico, calcula o nmero de funcionrios do departamento de Vendas que tm este
ttulo.
SELECT Ttulo, Count(Ttulo) AS Tbc FROM Funcionrios WHERE Departamento = 'Vendas'
GROUP BY Ttulo;
Esse exemplo calcula o nmero de itens em estoque para cada combinao de nmero e cor do item.
SELECT

Item, Sum(Unidades) AS Tbc FROM ItensEmEstoque GROUP BY Item, Cor;

Exemplo de clusula HAVING


Esse exemplo seleciona os ttulos de cargos do departamento de Produo atribudos a mais de 50
funcionrios.
SELECT Ttulo, Count(Ttulo) FROM Funcionrios WHERE Departamento = 'Produo' GROUP BY
Ttulo HAVING Count(Ttulo) > 50;
Esse exemplo seleciona os departamentos que tenham mais de 100 funcionrios.
SELECT Departamento, Count([Departamento]) FROM Funcionrios
GROUP BY Departamento HAVING Count(Departamento) > 100;

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

171

Exemplo de clusula ORDER BY


As instrues SQL mostradas abaixo usam a clusula ORDER BY para classificar os registros em ordem
alfabtica e depois por categoria.
Esse exemplo ordena os registros pelo sobrenome, em ordem descendente (Z-A).
SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome DESC;
Esse exemplo ordena, primeiro, por categoria ID e depois por nome do produto.
SELECT CategoriaID, ProdutoNome, PreoUnit FROM Produtos ORDER BY CategoriaID,
NomeProduto;

Instruo INSERT INTO


Adiciona um ou vrios registros a uma tabela. Isto referido como consulta anexao.

Sintaxe
Consulta anexao de vrios registros:
INSERT INTO destino [IN bancodedadosexterno] [(campo1[, campo2[, ...]])]
SELECT [origem.]campo1[, campo2[, ...]

FROM expressodetabela
Consulta anexao de um nico registro:
INSERT INTO destino [(campo1[, campo2[, ...]])]
VALUES (valor1[, valor2[, ...])
A instruo INSERT INTO tem as partes abaixo:
Parte
destino
bancodedadosexterno
origem
campo1, campo2

expressodetabela

valor1, valor2

Descrio
O nome da tabela ou consulta em que os registros devem ser anexados.
O caminho para um banco de dados externo. Para uma descrio do
caminho, consulte a clusula IN.
O nome da tabela ou consulta de onde os dados devem ser copiados.
Os nomes dos campos aos quais os dados devem ser anexados, se
estiverem aps um argumento destino ou os nomes dos campos dos quais
se deve obter os dados, se estiverem aps um argumento origem.
O nome da tabela ou tabelas das quais registros so inseridos. Este
argumento pode ser um nico nome de tabela ou uma combinao
resultante de uma operao INNER JOIN, LEFT JOIN ou RIGHT JOIN ou de
uma consulta gravada.
Os valores para inserir em campos especficos do novo registro. Cada valor
inserido no campo que corresponde posio do valor na lista: Valor1
inserido no campo1 do novo registro, valor2 no campo2 e assim por diante.
Voc deve separar os valores com uma vrgula e colocar os campos de textos
entre aspas (" ").

Comentrios
Voc pode usar a instruo INSERT INTO para adicionar um nico registro a uma tabela usando a sintaxe
de consulta anexao de um nico registro como mostrado acima. Neste caso, seu cdigo especifica o nome
e o valor de cada campo do registro. Voc precisa especificar cada um dos campos do registro para os quais
um valor deve ser designado e um valor para este campo. Quando voc no especifica cada campo, o valor
padro ou Null inserido nas colunas omitidas. Os registros so adicionados no final da tabela.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

172

Voc tambm pode usar INSERT INTO para anexar um conjunto de registros de outra tabela ou consulta
usando a clusula SELECT ... FROM como mostrado acima na sintaxe consulta anexao de vrios
registros. Neste caso, a clusula SELECT especifica os campos para acrescentar tabela destino
especificada. A tabela de origem ou de destino pode especificar uma tabela ou uma consulta. Se uma
consulta for especificada, o programa principal de banco de dados do Microsoft anexa a qualquer e a todas
as tabelas especificadas pela consulta.
INSERT INTO opcional, mas quando includa, precede a instruo SELECT.
Se sua tabela de destino contm uma chave primria, voc deve acrescentar valores nicos, no Null ao
campo ou campos da chave primria. Caso contrrio, o programa principal de banco de dados do Jet no
anexar os registros. Se voc anexar registros a uma tabela com um campo Counter e quiser numerar
novamente os registros anexados, no inclua o campo Counter em sua consulta. Inclua o campo Counter na
consulta se quiser manter os valores originais do campo. Use a clusula IN para anexar registros a uma
tabela de outro banco de dados. Para achar quais registros sero anexados, antes de voc executar a consulta
anexao, primeiro execute e veja os resultados de uma consulta seleo que use o mesmo critrio de
seleo. Uma operao de consulta anexao copia os registros de uma ou mais tabelas em outra. As tabelas
que contm os registros que voc anexa no so afetadas pela operao de consulta anexao. Em lugar de
acrescentar registros existentes de outra tabela, voc pode especificar o valor de cada campo em um nico
registro novo usando a clusula VALUES. Se voc omitir a lista de campo, a clusula VALUES deve
incluir um valor para cada campo na tabela; caso contrrio, um erro ocorrer em INSERT. Use uma
instruo adicional INSERT INTO com uma clusula VALUES para cada registro adicional que voc
quiser criar.

Exemplo de instruo INSERT INTO


Esse exemplo seleciona todos os registros de uma tabela hipottica "Novos Clientes" e os adiciona tabela
"Clientes" (quando no so designadas colunas individuais, os nomes das colunas das tabelas SELECT
devem corresponder exatamente aos da tabela INSERT INTO).
INSERT INTO Clientes SELECT [Novos Clientes].* FROM [Novos Clientes];
Esse exemplo cria um novo registro na tabela "Funcionrios"
INSERT INTO Funcionrios (Nome,Sobrenome, Ttulo) VALUES ("Andr", "Pereira", "Estagirio");
Esse exemplo seleciona todos os estagirios de uma tabela hipottica "Estagirios" que foram contratados h
mais de 30 dias e adiciona seus registros tabela "Funcionrios".
INSERT INTO Funcionrios SELECT Estagirios.* FROM Estagirios WHERE DataContrato < Now()
- 30;

Declarao UPDATE
Cria uma consulta atualizao que altera os valores dos campos em uma tabela especificada com base em
critrios especficos.
Sintaxe: UPDATE tabela SET valornovo WHERE critrio;
A instruo UPDATE tem as partes abaixo:
Parte
Descrio
tabela
O nome da tabela cujos os dados voc quer modificar.
valornovo
Uma expresso que determina o valor a ser inserido em um campo especfico nos
registros atualizados.
critrio
Uma expresso que determina quais registros devem ser atualizados. S os registros
que satisfazem a expresso so atualizados.
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

173

Comentrios
UPDATE especialmente til quando voc quer alterar muitos registros ou quando os registros que voc
quer alterar esto em vrias tabelas. Voc pode alterar vrios campos ao mesmo tempo. O exemplo abaixo
aumenta o Valor do Pedido em 10 por cento e o valor do Frete em 3 por cento para embarques do Reino
Unido:
UPDATE Pedidos SET ValorPedido = ValorPedido * 1.1, Frete = Frete * 1.03 WHERE PasEmbarque =
'RU';
UPDATE no gera um conjunto de resultados. Se voc quiser saber quais resultados sero alterados,
examine primeiro os resultados da consulta seleo que use os mesmos critrios e ento execute a consulta
atualizao.

Exemplo de instruo UPDATE


Esse exemplo muda os valores no campo "RelatrioPara" para 5 para todos os registros de funcionrios que
atualmente tm valores de RelatrioPara de 2.
UPDATE Funcionrios SET RelatrioPara = 5 WHERE RelatrioPara = 2;
Esse exemplo aumenta o "PreoUnit" de todos os produtos no suspensos do fornecedor 8 em 10 porcento.
UPDATE Produtos SET PreoUnit = PreoUnit * 1.1 WHERE FornecedorID = 8 AND Suspenso = No;
Esse exemplo reduz o PreoUnit de todos os produtos no suspensos fornecidos pela Tokyo Traders em 5
porcento. As tabelas "Produtos" e "Fornecedores" tm uma relao um para vrios.
UPDATE Fornecedores INNER JOIN Produtos ON Fornecedores.FornecedorID = Produtos.FornecedorID
SET PreoUnit = PreoUnit * .95 WHERE NomeEmpresa = 'Tokyo Traders' AND Suspenso = No;

Instruo DELETE
Cria uma consulta excluso que remove registros de uma ou mais tabelas listadas na clusula FROM que
satisfaz a clusula WHERE.
Sintaxe: DELETE [tabela.*] FROM tabela WHERE critrio
A instruo DELETE tem as partes abaixo:
Parte
tabela.*
tabela
critrio

Descrio
O nome opcional da tabela da qual os registros so excludos.
O nome da tabela da qual os registros so excludos.
Uma expresso que determina qual registro deve ser excludo.

Comentrios
DELETE especialmente til quando voc quer excluir muitos registros. Para eliminar uma tabela inteira do
banco de dados, voc pode usar o mtodo Execute com uma instruo DROP.
Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado, quando voc usa DELETE,
apenas os dados so excludos. A estrutura da tabela e todas as propriedades da tabela, como atributos de
campo e ndices, permanecem intactos.
Voc pode usar DELETE para remover registros de tabelas que esto em uma relao um por vrios com
outras tabelas. Operaes de excluso em cascata fazem com que os registros das tabelas que esto no lado
"vrios" da relao sejam excludos quando os registros correspondentes do lado "um" da relao so
excludos na consulta.
Por exemplo, nas relaes entre as tabelas Clientes e Pedidos, a tabela Clientes est do lado "um" e a tabela
Pedidos est no lado "vrios" da relao. Excluir um registro em Clientes faz com que os registros
correspondentes em Pedidos sejam excludos se a opo de excluso em cascata for especificada.
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )
174

Exemplo de instruo DELETE


Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio. Quando a clusula FROM
inclui apenas uma tabela, no necessrio indicar o nome da tabela na instruo DELETE.
DELETE * FROM Funcionrios WHERE Ttulo = 'Estagirio';
Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio e que tambm tenham um
registro na tabela "FolhadePagamento". As tabelas "Funcionrios" e "FolhadePagamento" tm uma relao
um por um.
DELETE Funcionrios * FROM Funcionrios INNER
Funcionrios.FuncionrioID = FolhadePagamento.FuncionrioID
'Estagirio';

JOIN FolhaDePagamento ON
WHERE Funcionrios.Ttulo =

R SQL w Classificando registros no DBGrid com radiogroup


Neste exemplo geraremos vrios resultados no mesmo DBGrid usando. O objetivo mostrar combinao
com case, radiogroup, DbGrid. Ser necessrio ter 3 tabelas: Funcionrios, Cidades e UFs.
Abra um novo formulrio ( new form ).
Insira um componente RadioGroup ( aba Standard ), na propriedade Columns digite o nmero 3, na
propriedade Items digite as 4 linhas abaixo:
Funcionrios - A - Z
Funcionrios - Z - A
Cidades - A - Z
Cidade = 1
Estado - escolher...

Crie as tabelas: Funcionrios, Cidades e Estados

Insira 3 componentes SQL e 3 DataSource, clique em cada componente SQL, defina o Alias na
propriedade DatabaseName que apontar para as tabelas ( ou digite o caminho onde esto as tabelas ), e
defina a propriedade Name de cada componente, veja na tela grfica abaixo ( Funcinarios_QRY,
Cidades_QRY e UF_QRY ), defina as propriedades DataSet de cada _QRY de cada DataSource.
Insira um DBGrid ( aba DataControls ).

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

175

Clique duplo no RadioGroup e no evento OnClick digite o cdigo abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

176

R SQL w Usurio digita linha SQL.

Insira um Formulrio, Query defina o Alias, DataSource


defina o DataSet, RadioGroup, na
propriedade Items (...) digite as 3
linhas que esto no grfico abaixo
da palavra Opes, insira 3 Edits,
na propriedade Text de cada Edit
digite as linhas dos SQLs de acordo
com o exemplo. Clique no DBGrid,
defina a propriedade DataSource
para DaraSourcel.
Se voc j esta familiarizado com
SQL, basta digitar a SQL para gerar
o resultado no DBGrid ( Grid ).

Busca linha SQL do Edit1

Busca linha SQL do Edit2

Busca linha SQL do Edit3


Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

177

R SQL w Filtrando registros com ComboBox.


Uma maneira muito prtica para selecionarmos registros utilizando o componente ComboBox.
Abra um novo formulrio ( new form ).
Insira 2 componentes SQL e 2 DataSource, clique no componente SQL, defina o Alias na propriedade
DatabaseName que apontar para as tabelas ( ou digite o caminho onde esto as tabelas ), defina a
propriedade Name de cada componente - Name do query / datasource = Sigla_Sql Sigla_DS - Name do
query / datasource: Descr_UF_Sql - Descr_UF_DS, clique no componente DataSource e defina o nome
Descr_UF_DS.
Insira um ComboBox ( aba Standard ). - Insira um DBGrid ( aba DataControls ).
Digite o cdigo abaixo nos eventos indicados: ( no evento OnShow do formulrio e no evento OnClick do
Combobox )
Clique em Sigla_Sql, na propriedade
SQL ( Tstrings ...) digite:
SELECT UF FROM "Estados.db" Estados

Clique em Descr_UF_Sql, na
propriedade SQL ( Tstrings ...) digite:
SELECT Descr_UF FROM

Delphi Aplicado - by Jurandir A. Pellin

"Estados.db" Estados

( e-mail: delphiewb@gmail.com )

178

R SQL w Pesquisando salrios com SQL e InputBox


Neste exemplo localizaremos o salrio informado, para isto usaremos SQL e InputBox.
Crie a tabela abaixo.

Insira um formulrio, um componente DbGrid, Query e um DataSource. Clique no Query1, clique na


propriedade DatabaseName e defina o Alias, clique no DataSource, clique na popriedade DataSet =
Query1. Clique no DBGrid, clique na propriedade DataSource = DataSource1. Clique no Query1, clique
em SQL (Strings ...) e digite a linha:
Select Nome, Salario From "Clientes.db" Where Salario = :SalarioX

Os dois pontos ( : ) devem


estar rente ao nome da
varivel SalarioX e no
deve ter espao entre

Digite o cdigo abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

179

Aps clicar no boto Pesquisa ser aberta caixa para digitar um salrio.

R SQL w Navegando nos registros.


Navegando nos registros usando funes SQL e Locate.

Componentes utilizados:
Um Edit, DBGrid, Query,
DataSource e 4 botes
Bitbtn.
Defina a propriedade
DatabaseName do Query e
DataSource, clique no
DBGrid e na propriedade
DataSource defina
DataSource1.
Clique no Query1 e na
propriedade Active defina
True

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

180

Foi digitado a letra h, aps


o cursor posicionar o
ponteiro no primeiro registro
que possuir a letra h.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

181

R SQL w Filtrando registros letras iniciais.


Clique no ComboBox, clique na aba Events, d um clique duplo em OnChange e digite o cdigo abaixo:
Insira um formulrio, um
ComboBox, um DBGrid, um
DataSource e um Query1.
Clique no Query1, clique em
DatabaseName, defina o
Alias, clique no DataSource e
defina o DataSet = Query1,
clique no DBGrid e defina a
propriedade DataSource para
DataSource1, clique em
Query1 e defina a propriedade
Active para True.

Clique no componente Query1, clique no


boto direito, clique em SQL Builder,
selecione o Database que o Alias,
selecione a tabela, marque os campos
Nome, Cidade e Data Nasc, feche a tela
do Sql Builder, clique em Yes.

Adicione os campos no
Query,
Clique no boto direito
Fields Editor, boto
direito Add fields e
adicione os campos
( veja ao lado )

Outra maneira de usar


SQL com variveis.

ComboBox

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

182

Aps digitado a letra m ser listado no Grid o


nome Mike Allan Pellin, se pressionar
backspace, permanecer somente a letra m,
ou seja, listar todos os nomes que iniciarem com
a letra m.

R SQL w Procurando registros com locate

Insira: um form, Edit,


DbGrid, Query, Datasource
e um Bitbtn.
Defina as propriedades dos
componentes: Query,
DataSource e DBGrid
Como definir estas
propriedades j vimos em
vrios exemplos anteriores J
Veja o cdigo fonte abaixo:

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

183

R SQL w Filtrando registros por perdo ( intervalo de datas )


Insira dois componentes Edit ( aba Standard ),
um DBGrid e dois Bitbtn

Insira um componente Query ( aba


DataAccess ). Na propriedade SQL ,
clique em (Tstrings) ... digite as linhas
abaixo nesta ordem:
SELECT
Codigo, Data, Qtde
FROM
"Produtos.db" Produtos
WHERE
(Produtos.Data >= :Data_Inicial) and
(Produtos.Data <= :Data_Final)

Insira um componete
DBGrid
( aba DataControls ), na
propriedade DataSource
defina DataSource1.
Clique no componente
DataSource1 e na
propriedade DataSet defina
Query1.

Na propriedade DatabaseName = Alias


ou o caminho onde est armazenada a
tabela de produtos.

Clique na propriedade Name = Data_Inicial, ser exibida uma telinha, estes dois
parmetros j foram definidos na propriedade SQL , clique em (Tstrings) ... d um clique
duplo em Params, ser aberta a tela acima, defina a propriedade DataType deve ser do tipo
ftDate porque o parmetro do tipo data.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

184

Interpretao do Cdigo Fonte


SELECT Codigo, Data, Qtde
FROM
"Produtos.db" Produtos
WHERE (Produtos.Data >= :Data_Inicial) AND (Produtos.Data <= :Data_Final)

SELECT

Seleciona os campos da tabela cdigo, data e qtde

FROM

Buscar informaes da tabela de produtos.db

WHERE

Onde o campo da tabela data dever ser >= maior ou igual ao


parmetro Dta_Inicial e AND
<= menor ou igual , segundo
parmetro Data_Final

Resultado da filtragem dos dados com SQL

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

185

R SQL w Filtrando por perodo e cidade


Pesquisando registros por registro e dependendo da letra da cidade digitada e se esta existir ser mostrada no
Grid.

Perido de: 01/01/2000 23/10/2000 nenhuma cidade foi informada

Perido de: 01/01/2000 23/10/2000 Digite as letras im

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

186

Clique no componente Query1, clique na propriedade SQL ( Tstrings ... ) e digite a SQL que esta sendo
mostrada em String List Editor.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

187

R SQL w Classificando registros menu PopUP.


Neste exemplo aprenderemos usar o componente PopUp Menu juntamente com Sql, onde classificaremos
registros do Grid.

Insira um componente DBGrid


(aba DataControls). Na propriedade
Datasource deste DBGrid defina
Datasource1 e na propriedade
PopupMenu defina PopupMenu1
Insira um componente Query (aba Data Access).
Clique na propriedade SQL ( TStrings ), ser aberta
uma tela, digite as duas linhas abaixo e clique Ok.
SELECT Func_Codigo, Func_Nome, Func_Salario,
Func_Data_Nasc FROM "Funcionarios.DB" Funcionarios

Insira um componente Datasource (aba Data


Access) e na propriedade DataSet defina
Query1.
Insira um componente PopupMenu (aba Standard). Clique duplo
sobre o cone PopupMenu e na propriedade Caption digite o texto
Lista em ordem de NOME , clique duplo sobre esta opo para
digitar o cdigo fonte (veja o program fonte abaixo)

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

188

Veja o grfico abaixo, nomes esto em ordem ascendente ( A ... Z )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

189

R SQL w Filtrando datas correntes maiores ou iguais.


No exemplo a seguir mostraremos como listar registros que possuem a data maior ou igual ao do sistema (
data corrente ).

Listar datas maiores


ou iguais a data atual
( data do sistema )

Pega data do
sistema, ou seja,
data atual.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

190

R SQL w Filtrando registros com datas pagas.


Crie uma tabela com os campos abaixo: Nome Data_Vencto Data_Pagto e Valor ( $ ).

Insira um formulrio, um DBGRid, Query, DataSource 3 botes BitBtn.


Insira um componente Query e um
Datasource. Clique no DBGrid e
defina a propriedade DataSet para
DataSource1. Clique em Query e
defina a propriedade DatabaseName
com Alias ou caminho onde est a
tabela. Clique em Datasource1, clique
em Dataset e defina Query1.

Pode ser usado:


is null ou is not null

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

191

Registros ainda no pagos:

Todos os registros:

Soma valores dos registros pagos:

Outra forma, mostra total em um Edit ou em um Label

Soma_Total uma
varivel, poderia ser
qualquer nome para
armazenar o total.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

192

R SQL Procurando registro com SQL LIKE e RadioGroup


u Insira um Edit, um BitBtn, um RadioGroup, clique na propriedade Items e digite um abaixo do outro
as seguintes linhas:
Localiza atravs das " letras iniciais "
Localiza atravs da " letras finais "
Localiza " de qualquer letra digitada "
v Insira um DBGrid, insira um Query e um DataSource, clique em Query, clique na propriedade
DatabaseName e defina o Alias onde se encontra a tabela, clique em DataSource e defina Query1
Clique em Query1, clique na
propriedade SQL ( TStrings ),
ser aberta a tela abaixo, digite
a SQL.

Campos
da tabela

Digitge as 3
ltimas linhas

Digite a(s) letra(s) deseja(s) e clique no boto Ok. Um nome inicia com a letra m .

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

193

R Totalizando valores

Clique no Query1, clique em


DatabaseName e defina o Alias ou
o caminho onde esta a tabela, clique
em DataSource1, clique em
DataSet e defina Query1

R Somando salrios da cidade solicitada


Apenas insira dois Edits e um boto, o grid abaixa serve apenas para mostrar as cidades.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

194

R Pesquisando com Query + Like


Basta digitar qualquer letra no campo de pesquisa Letras Iniciaisde que deseja localizar.
Insira um Edit, Query, DataSource1

R Formulrio MDI
Uma interface MDI (Multiple Document Interface) possibilita a visualizao de mais de um documento ou
objeto simultaneamente.
Aplicaes MDI so constituidas geralmente de dois ou mais formulrios: o formulrio principal (MDIform)
que geralmente constitui a janela principal do programa e seus filhos (MDIchild) localizados dentro de sua
rea de trabalho.
Em aplicaes MDI, voc geralmente precisa mostrar mltiplas instncias de um classe de formulrio. Um
formulrio filho de MDI deve ser criado para ser exibido e deve ser destrudo para no mais exib-lo.
Com uma nova aplicao vamos iniciar uma aplicao MDI que possa abrir vrios arquivos de figuras
selecionados pelo usurio.

fsMDIChild

fsMDIChild

fsMDIChild
Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

195

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

196

Veja abaixo as 3 tabelas usadas neste projeto:

File New Application e insira um componente MainMenu ( aba Standard )

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

197

No primeiro formulrio, ou seja, no formulrio do Menu defina a propriedade FormStyle para fsMDIForm

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

198

Cadastro de Clientes
No formulrio Clientes mude a propriedade do formulrio FormStyle para fsMDIChild

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

199

Cadastro de Fornecedores
No formulrio Fornecedores mude a propriedade do formulrio FormStyle para fsMDIChild

Cadastro de Transportadoras
No formulrio Transportadoras mude a propriedade do formulrio FormStyle para fsMDIChild

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

200

Clique em Project Options e passe os formulrios Clientes_Frm, Transp_Frm e Fornec_Frm para o


lado direito da tela abaixo:

R Apaga TODOS os registros da tabela

Digite a procedure
Apaga_Todos_Regs

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

201

R Pesquisa registros em um drop-down


Com este cdigo podemos procurar registros selecionando o campo desejado para a procura.

Digite a funo
Seleciona

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

202

Selecione o campo
que deseja procurar

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

203

R Criando Grid zebrado

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

204

R Criando descrio com balo


No exemplo a seguir criaremos um balo para descrio.

Insira um
componente
Memo

Digite Constantes e
as Varveis.

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

205

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

206

R Encriptografando e decriptografando senhas

R Movendo colunas no DBGrid


Com este cdigo ser possvel mover colunas de um lado para outro.

Digite estas duas linhas

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

207

Digite estas 4 linhas

R Formatando data FormatDateTime

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

208

Identificadores.......................................................................................................................................... 102
With ... do................................................................................................................................................. 102
Array [ ... ] of ........................................................................................................................................... 102
Begin ... end; ............................................................................................................................................ 103
If ... then ... else ... .................................................................................................................................... 103
Goto ... ; ................................................................................................................................................... 103
Case ... of ... else ... end; ........................................................................................................................... 104
Repeat ... until; ......................................................................................................................................... 104
For ... to (downto) ... do ... ; ...................................................................................................................... 104
While ... do ... ;......................................................................................................................................... 105
Break; ou continue...;................................................................................................................................ 105
R Animando formulrio........................................................................................................................... 105
R Como depurar ( encontrar ) possveis erros no programa ?.................................................................... 106
R Depurando erros com Watch List ......................................................................................................... 106
R Como alinhar botes ?.......................................................................................................................... 108
R Como definir tamanho / altura para todos os botes ? .......................................................................... 109
R Abrindo link......................................................................................................................................... 109
R Como programar teclas de funo F1, F2, F3 ... ? .............................................................................. 110
R Atalho ao pressionar Ctrl A .................................................................................................................. 110
R Toca arquivo de som ............................................................................................................................ 110
R Como programar letras, nmeros, teclas de funo ? ............................................................................ 111
R Como por zeros no lado esquerdo de um nmero ?............................................................................... 111
R Como forar abertura do formulrio maximizado ?............................................................................... 111
R Cdigos do teclado em hexadecimal..................................................................................................... 112
R Quais so as propriedades do navegador de dados ?.............................................................................. 113
R Como definir cones para o DBNavegator ?......................................................................................... 114
R Definindo caption, descrio para o navegador de dados ............................................................... 116
R Programando os botes do navegador de registros................................................................................ 117
R Como criar botes para navegar nos registros da tabela ? ..................................................................... 118
R Como calcular percentual em um edit ?............................................................................................. 120
R Como converter textos para nmeros ? ................................................................................................. 121
R Como somar valor flutuante ?............................................................................................................... 122
R Como formatar um nmero em um edit ? .......................................................................................... 122
R Como somar e dividir ? ................................................................................................................. 122
R Como remover ponto decimal ?............................................................................................................ 123
R Como arredondar valor ? ( 1 )............................................................................................................... 123
R Como arredondar valor ? ( 2 ).............................................................................................................. 123
R Como formatar zeros no lado esquerdo do nmero ? ......................................................................... 124
R Como formatar valor ? ......................................................................................................................... 124
R Funo copy ..................................................................................................................................... 124
R Funo pos ....................................................................................................................................... 125
R Como aceitar somente letras em um edit ? ..................................................................................... 125
R Como fazer deciso composta ( variveis ) ? ........................................................................................ 125
R Como usar Case of else end ? ( 1 )..................................................................................... 126
R Case of else end ( 1 )........................................................................................................... 126
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )
209

R Case of else end ( 2 )........................................................................................................... 127


R Case ... of ... else end ( 3 )............................................................................................................... 127
R Atalhos importantssimos do editor de cdigos ( shortcuts ).................................................................. 128
R Como usar componente CheckBox ?................................................................................................ 128
R Diferena de dias - DaysBetween ......................................................................................................... 129
R Como usar If ... else ... end ? ............................................................................................................. 129
R Como usar o operador or ? ( 1 )........................................................................................................ 130
R Como usar o operador or ? ( 2 )........................................................................................................ 131
R Diferena de anos - YearsBetween ....................................................................................................... 131
R Como usar o operador and ?.............................................................................................................. 131
R Com usar os componentes ComboBox e CheckBox ? ....................................................................... 132
R Como formatar data e hora ?.......................................................................................................... 134
R Pesquisando registros com InputBox e SetRange .............................................................................. 135
R Pesquisando registros com InputQuery x InputBox........................................................................ 135
R Gravando registro mediante confirmao Sim ou No. ...................................................................... 137
R Como usar o componente RadioGroup ? ........................................................................................... 137
R Como criar cores personalizadas ( sistema RGB ) ?.............................................................................. 138
R Como filtrar registro em um ListBox ?.............................................................................................. 139
R Abre Outlook ....................................................................................................................................... 140
R Mostra IP atual..................................................................................................................................... 141
R Como criar uma tabela via programao ? ............................................................................................ 141
R Maneiras de procurar registros nas tabelas............................................................................................ 142
PROCURA 1 - Procura registros atravs de um ndice primrio....................................................... 142
PROCURA 2 - Procura registros atravs de um ndice primrio...................................................... 146
PROCURA 3 - Procura registros atravs de um ndice secundrio ................................................... 147
PROCURA 4 - Procura registros atravs de um ndice secundrio ................................................... 148
PROCURA 5 - Procura registros atravs de qualquer campo............................................................ 148
PROCURA 6 - Procura registros atravs de qualquer campo............................................................ 149
R O que SQL ? SQL w Structured Query Language........................................................................... 149
R SQL w Como classificar registros com SQL ? ...................................................................................... 150
R SQL w Procurando registro com SQL................................................................................................... 151
R SQL w Procurando registro com parmetro.......................................................................................... 151
R SQL w Procurando registro com SQL e InputBox:.............................................................................. 152
R SQL w Procura datas maiores ou iguais ao do sistema .......................................................................... 152
R SQL w Pesquisando ms dia-ms-ano ......................................................................................... 153
R SQL w SQL Interativo ( visual ) com SQL Builder ............................................................................. 154
R SQL w Filtrar registros letras iniciais ou perodo............................................................................ 157
R SQL w Filtra registros por valor e nome......................................................................................... 158
R Principais instrues SQL .................................................................................................................... 168
Instruo SELECT.................................................................................................................................... 168
Clusula GROUP BY ............................................................................................................................... 169
Clusula HAVING ................................................................................................................................... 169
Clusula ORDER BY ............................................................................................................................... 170
Clusula WITH OWNERACCESS OPTION............................................................................................ 170
Mais exemplos de instrues SELECT, clusula FROM ........................................................................... 170
Exemplo de clusula GROUP BY............................................................................................................. 171
Exemplo de clusula HAVING................................................................................................................. 171
Exemplo de clusula ORDER BY............................................................................................................. 172
Instruo INSERT INTO .......................................................................................................................... 172
Exemplo de instruo INSERT INTO....................................................................................................... 173
Declarao UPDATE................................................................................................................................ 173
Exemplo de instruo UPDATE ............................................................................................................... 174
Instruo DELETE ................................................................................................................................... 174
Exemplo de instruo DELETE................................................................................................................ 175
Delphi Aplicado - by Jurandir A. Pellin
( e-mail: delphiewb@gmail.com )
210

R SQL w Classificando registros no DBGrid com radiogroup ............................................................... 175


R SQL w Usurio digita linha SQL. ......................................................................................................... 177
R SQL w Filtrando registros com ComboBox........................................................................................... 178
R SQL w Pesquisando salrios com SQL e InputBox............................................................................ 179
R SQL w Navegando nos registros. .......................................................................................................... 180
R SQL w Filtrando registros letras iniciais. ........................................................................................... 182
R SQL w Procurando registros com locate ............................................................................................ 183
R SQL w Filtrando registros por perdo ( intervalo de datas ) .................................................................. 184
R SQL w Filtrando por perodo e cidade................................................................................................... 186
R SQL w Classificando registros menu PopUP. ................................................................................... 188
R SQL w Filtrando datas correntes maiores ou iguais............................................................................ 190
R SQL w Filtrando registros com datas pagas. .................................................................................... 191
R SQL Procurando registro com SQL LIKE e RadioGroup................................................................ 193
R Totalizando valores .............................................................................................................................. 194
R Somando salrios da cidade solicitada .................................................................................................. 194
R Pesquisando com Query + Like ............................................................................................................ 195
R Formulrio MDI................................................................................................................................... 195
R Apaga TODOS os registros da tabela ................................................................................................... 201
R Pesquisa registros em um drop-down ................................................................................................... 202
R Criando Grid zebrado ........................................................................................................................... 204
R Criando descrio com balo................................................................................................................ 205
R Encriptografando e decriptografando senhas......................................................................................... 207
R Movendo colunas no DBGrid ............................................................................................................... 207
R Formatando data FormatDateTime ....................................................................................................... 208

Delphi Aplicado - by Jurandir A. Pellin

( e-mail: delphiewb@gmail.com )

211