Академический Документы
Профессиональный Документы
Культура Документы
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.
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:
( e-mail: delphiewb@gmail.com )
102
Goto ... ;
Transfere a execuo de um programa para o ponto determinado pelo Label. A sintaxe do comando : GOTO {Label};. Ex:
( e-mail: delphiewb@gmail.com )
103
Ex:
( e-mail: delphiewb@gmail.com )
104
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
( e-mail: delphiewb@gmail.com )
105
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.
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.
( e-mail: delphiewb@gmail.com )
107
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
( e-mail: delphiewb@gmail.com )
108
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.
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.
( e-mail: delphiewb@gmail.com )
109
( e-mail: delphiewb@gmail.com )
110
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 )
( e-mail: delphiewb@gmail.com )
111
= $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;
( e-mail: delphiewb@gmail.com )
112
Propriedades do TBNavigator.
Apaga o registro.
Altera o registro.
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
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
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.
( e-mail: delphiewb@gmail.com )
115
( e-mail: delphiewb@gmail.com )
116
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.
( e-mail: delphiewb@gmail.com )
117
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.
( e-mail: delphiewb@gmail.com )
118
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.
( e-mail: delphiewb@gmail.com )
119
( e-mail: delphiewb@gmail.com )
120
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.
( e-mail: delphiewb@gmail.com )
121
( e-mail: delphiewb@gmail.com )
122
( e-mail: delphiewb@gmail.com )
123
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.
( e-mail: delphiewb@gmail.com )
125
Exemplo:
( e-mail: delphiewb@gmail.com )
126
( e-mail: delphiewb@gmail.com )
127
( e-mail: delphiewb@gmail.com )
128
( 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.
( e-mail: delphiewb@gmail.com )
130
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
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
( e-mail: delphiewb@gmail.com )
133
Exemplos de Formatos DIA ShortDateFormat ShortDateFormat ShortDateFormat ShortDateFormat MES ShortDateFormat ShortDateFormat ShortDateFormat ShortDateFormat ANO ShortDateFormat ShortDateFormat HORA ShortDateFormat ShortDateFormat ShortDateFormat ShortDateFormat ShortDateFormat
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
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';
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:
( e-mail: delphiewb@gmail.com )
134
Sero mostradas duas caixas de dilogo pedindo pelo cdigo inicial e final.
( 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
( e-mail: delphiewb@gmail.com )
136
Insira um formulrio, um radiogroup, na propriedade Columns digite o valor 2 para fazer duas colunas dentro do RadioGroup, um Edit e um Label.
( e-mail: delphiewb@gmail.com )
137
( e-mail: delphiewb@gmail.com )
138
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.
( 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:
( e-mail: delphiewb@gmail.com )
140
R Mostra IP atual
( e-mail: delphiewb@gmail.com )
141
Tabela criada
( 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 )
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.
( 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.
Mb_IconWarning + Mb_Ok
Constante - Caption. Caption = Erro Erro
AsString: Converte varivel para String ( texto ). FieldByName: Pega o nome do Campo
( 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
( e-mail: delphiewb@gmail.com )
147
Filter
( e-mail: delphiewb@gmail.com )
148
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 ?
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
DESCendente.
( e-mail: delphiewb@gmail.com )
150
Insira um componente Edit e um Bitbtn, digite as linhas de cdigo abaixo no evento OnClick.
Xnome uma varivel. Passaremos o parmetro para localizar o que for digitado no Edit.
( e-mail: delphiewb@gmail.com )
151
( e-mail: delphiewb@gmail.com )
152
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
( e-mail: delphiewb@gmail.com )
153
Clique em Query1,
clique no boto direito, clique em SQL Builder, ser aberta a tela abaixo:
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.
( e-mail: delphiewb@gmail.com )
154
Clique no raio
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.
( e-mail: delphiewb@gmail.com )
156
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
( 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));
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
( 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.
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.
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;
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 )
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;
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;
( e-mail: delphiewb@gmail.com )
167
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
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.
( 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.
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.
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;
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;
( e-mail: delphiewb@gmail.com )
171
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.
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.
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
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 ).
( e-mail: delphiewb@gmail.com )
175
( e-mail: delphiewb@gmail.com )
176
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 ).
( e-mail: delphiewb@gmail.com )
( e-mail: delphiewb@gmail.com )
178
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
( e-mail: delphiewb@gmail.com )
179
Aps clicar no boto Pesquisa ser aberta caixa para digitar um salrio.
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
( 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.
( e-mail: delphiewb@gmail.com )
181
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 )
ComboBox
( 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.
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:
( e-mail: delphiewb@gmail.com )
183
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.
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.
( e-mail: delphiewb@gmail.com )
184
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
( e-mail: delphiewb@gmail.com )
185
( 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.
( e-mail: delphiewb@gmail.com )
187
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)
( e-mail: delphiewb@gmail.com )
188
( e-mail: delphiewb@gmail.com )
189
( e-mail: delphiewb@gmail.com )
190
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.
( e-mail: delphiewb@gmail.com )
191
Todos os registros:
Soma_Total uma varivel, poderia ser qualquer nome para armazenar o total.
( e-mail: delphiewb@gmail.com )
192
Campos da tabela
Digite a(s) letra(s) deseja(s) e clique no boto Ok. Um nome inicia com a letra m .
( 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
( e-mail: delphiewb@gmail.com )
194
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 )
( e-mail: delphiewb@gmail.com )
196
( e-mail: delphiewb@gmail.com )
197
No primeiro formulrio, ou seja, no formulrio do Menu defina a propriedade FormStyle para fsMDIForm
( e-mail: delphiewb@gmail.com )
198
Cadastro de Clientes No formulrio Clientes mude a propriedade do formulrio FormStyle para fsMDIChild
( 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
( 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:
( e-mail: delphiewb@gmail.com )
201
( e-mail: delphiewb@gmail.com )
202
( e-mail: delphiewb@gmail.com )
203
( e-mail: delphiewb@gmail.com )
204
( e-mail: delphiewb@gmail.com )
205
( e-mail: delphiewb@gmail.com )
206
( e-mail: delphiewb@gmail.com )
207
( 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
( e-mail: delphiewb@gmail.com )
211