Anda di halaman 1dari 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 Low High SizeOf Valor de Retorno Primeiro elemento Aponta para o ltimo elemento 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 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 vk_NumPad0 vk_NumPad1 vk_NumPad2 vk_NumPad3 vk_NumPad4 vk_NumPad5 vk_NumPad6 vk_NumPad7 vk_NumPad8 vk_NumPad9 vk_Multiply vk_Add vk_Subtract = $01; = $02; = $03; = $04; = $08; = $09; = $0C; = $0D; = $10; = $11; = $12; = $13; = $14; = $1B; = $20; = $21; = $22;

= $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_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;

= $60; // Blocos de nmeros (lado direito do teclado) = $61; = $62; = $63; = $64; = $65; = $66; = $67; = $68; = $69; = $6A; // multiplicao = $6B; // adio = $6D; // subtrao vk_Separator = $6C; // separador vk_Decimal = $6E; // decimal

vk_NumLock vk_Scroll

= $90; = $91;

Delphi Aplicado - by Jurandir A. Pellin

( 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: Insira um Bitbtn e no evento OnClick digite o cdigo

Delphi Aplicado - by Jurandir A. Pellin

( 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 MES ShortDateFormat ShortDateFormat ShortDateFormat ShortDateFormat ANO ShortDateFormat ShortDateFormat HORA ShortDateFormat 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

:= '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"

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

Formato "23/01/2000" Ano "2000

:= '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 ) Insira um componente Bitbtn, clique duplo neste boto e digite as linhas de cdigo ao lado no evento OnClick.

Delphi Aplicado - by Jurandir A. Pellin

( 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.
( e-mail: delphiewb@gmail.com )

Delphi Aplicado - by Jurandir A. Pellin

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 MB_APPLMODAL

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

MB_SYSTEMMODAL

MB_TASKMODAL

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


Constante Texto, ou seja, Cliente no existe

Mb_IconWarning + Mb_Ok
Constante - Caption. Caption = Erro Erro

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. Escolha a tabela Clientes.DB.

Delphi Aplicado - by Jurandir A. Pellin

( 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. 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 )

Digite os campos da tabela e o nome da tabela.

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 163

( e-mail: delphiewb@gmail.com )

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 (=) (>) ( >= ) (<) ( <= )
( e-mail: delphiewb@gmail.com )

Delphi Aplicado - by Jurandir A. Pellin

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

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

campo1, campo2

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 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 (" ").

expressodetabela

valor1, valor2

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 177

( e-mail: delphiewb@gmail.com )

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 "Estados.db" Estados

Delphi Aplicado - by Jurandir A. Pellin

( 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 FROM WHERE

Seleciona os campos da tabela cdigo, data e qtde Buscar informaes da tabela de produtos.db 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 195

( e-mail: delphiewb@gmail.com )

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