Você está na página 1de 150

 Procurando registros com “Dbgrid e SetRange” ?

No exemplo a seguir veremos com filtrar registros em uma tabela usando componentes DBGrid e SetRange.

 Insira um Form, File, New Form.


 Insira um Label1, clique no label1, pressione F11 e digite Código Inicial:
 Insira um Label2, clique no label2, pressione F11 e digite Código Final:
 Insira um componente Edit1 (aba Standard).
 Insira um componente Edit2 (aba Standard).
 Insira um Bitbtn (aba Additional), tecle F11, na propriedade Caption digite Procurar,
na propriedade Name, mude o nome BitBtn1 para Bit_Procura
 Selecione o formulário, tecle ESC 3 vezes para cancelar possíveis objetos selecionados, na propriedade
Name digite Pequisa_Frm.
Insira um componente Table ( aba DataAccess).

Insira um DBGrid ( aba DataControls ), clique no DBGrid, File, Use Unit e selecione Clientes, na
propriedade DataSource informe DataSource1

Clique na propriedade DatabaseName e


defina o Alias, defina propriedade
TableName = Clientes.db, clique em
Table1, clique no botão direito Fields
Editor Add Fields Ok
( para adicionar os campos )

Clique no Datasource1 e na propriedade


Dataset defina Table1.

Clique duplo sobre o botão Procurar e digite as seguintes linhas de código:

Outra maneira SEM usar “With … do”

Como padrão o Delphi executa sempre o primeiro formulário (formulário pai), para executar o form do Grid
por primeiro selecione opção que está na barra de títulos, Project – Options – selecione o formulário
Pesquisa_Frm ( nosso formulário ) e arraste-o posicionando-o por primeiro, clique OK, finalmente tecle F9
para executar o programa.

Como padrão o Delphi mostra no Edit1 e


Edit2 o texto Edit1 e Edit2, para apagar
pressione F11, clique na propriedade na
propriedade Text apague o texto Edit1.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 325


 Como procurar registros em um DBGrid ?
No exemplo a seguir estamos fazendo a procura pela coluna “Nome”, ou seja, basta digitar as letras iniciais do
nome que desejar localizar na coluna Nome, a medida que for localizado algum nome, este será exibido no
Label1, para apagar conteúdo campo use “backspace”.

Crie um índice secundário para o campo Nome, visto que a pesquisa será feita pelo Nome.

 Crie uma tabela com


os campos DBGrid.

 Abaixo da seção Private digite a


ProcuraX: string;

Clique no DBGrid, clique Options,


clique na sub-opção dgEditing =
Insira um Label1 False, e na propriedade
ReadOnly = True.

 Clique no DBGrid e no evento OnKeyPress digite o código abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 326


 Como ler / buscar “valores” da tabela para Edit ?
Veja abaixo maneiras para ler ( mostrar ) campos em um Edit. No campo Table1Codigo.AsString; usamos o conversor
AsString porque o conteúdo a ser exibido no Edit deve ser texto. Todos os códigos abaixo foram definidos no evento
OnClick do botão Bitbtn.

Para mostrar o código / número


que esta armazenado na tabela
1ª forma: em um Edit é preciso antes
converter o NÚMERO para
TEXTO ( AsString )

Table1 = tabela.
Codigo = nome do campo.
Table1Codigo.AsString
AsString ( converte para string – texto )
2ª forma:

3ª forma:

O número seis [6] indica que é o sexto campo da tabela. Estes números devem estar de acordo com a criação dos campos
do DataBase Desktop. Vamos ler o campo o conteúdo do campo Nome e mostrá-lo na tela, em um Edit.

 Insira um
componente Edit e
um Bitbtn, na
propriedade Name
digite Bit_Le_Nome.

Apo clicar OK o
nome será
mostrado no Edit
Box.

Value: pega o “valor” ou “conteúdo”


do campo e mostra no Edit2.

Para associar outros tipos de campos que não são texto a uma caixa de edição ( campo que aceita somente strings ),
devemos utilizar as propriedades de conversão do componente TField :
AsBoolean, AdDateTime, AsFloat, AsInteger e AsString:
Vamos ler um valor e mostrá-lo em
um Edit ( em uma string ). Lembre-
se, antes devemos converte-lo para
texto – string.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 327


 Lendo conteúdo do campo
No exemplo a seguir leremos o conteúdo do campo Estado Civil, se o conteúdo for a letra ”C”, será mostrada
a palavra “Casado” caso contrário “Solteiro”.

 Crie a tabela abaixo ( use o Database Desktop )

 Crie o formulário de cadastro.

Serão aceitas somente


as letras C e S.

 Clique no componente DataSource1, clique no evento OnDataChange e digite o código abaixo:

Se for digitada a letra C será


mostrada a palavra Casado em azul
com o tamanho da fonte de 15

Se for digitada a letra S será mostrada


a palavra Solteiro em vermelho com
o tamanho da fonte de 20

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 328


Se o salário que contiver na
tabela for igual a 100, será
mostrada a mensagem
Salário OK ! em verde com
o tamanho da fonte de 12.

 Maneiras de ler campos


Insira um componente
DBGrid, Table e um
DataSource. Defina as
propriedades de cada um
destes componentes, já
aprendemos anteriormente

Insira 5
componentes
Labels e 5 Bitbtn.

Foi inserido um
DBGrid para mostrar
os registros que estão na
tabela.

Insira 5 labels, na propriedade


Caption de cada um digite o
texto que esta em amarelo.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 329


Digite o código abaixo no evento OnClick do botão OK.

Na propriedade Caption
de cada botão serão
Selecione o formulário e no evento OnShow digite o código abaixo:
mostradas as 5 maneiras
de como ler o conteúdo
de um campo.

 Como “editar / alterar” um registro ?


O Dataset precisa estar em modo de edição para possibilitar a atualização dos dados. Para isso você precisa
utilizar o método Edit e ao final utilize o método Post para gravar o registro alterado. As linhas de código
abaixo podem ser digitadas no evento OnClick de um BitBtn.

Verificando o estado da tabela, se estiver no modo de “edição” ou “inserção” gravará o registro. O código
abaixo foi definido no evento OnClick de um botão Bitbtn:

 Como criar atalho com a combinação “Ctrl + A” ?


Selecione o formulário corrente e defina a propriedade KeyPreview para o valor True e no evento
OnKeyDown digite o código abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 330


 Destacando opção selecionada no RadioGroup
Veja como destacar um item selecionado em um DBGrid.

Digite o código abaixo no


evento OnClick do
RadioGroup.

 Como desabilitar opções do RadioGroup ?

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 331


 Pesquisando registro com DBEdit ou Edit
Um truque para pesquisar registro no campo Código.

 Crie a tabela abaixo com o Database Desktop

 Crie o formulário abaixo. Analise a seguinte situação: No campo Código não é possível “efetuar pesquisa”,
visto que o componente DBEdit não permite tal ação. Para pesquisar um código terá que inserir um
componente Edit.

 Mova o componente DBEdit para o lado direito do formulário, apenas para não removê-lo do projeto, ao
lado da label Código insira um componente Edit.

Componente movido. No momento


Componente
não precisamos apagá-lo.
EDIT que foi
inserido.

Observe atentamente o código fonte do formulário acima, e cada um dos seus eventos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 332


Criando código
automaticamente,
autoincrement

Consulta_Frm é a tela de pesquisa


rápida que faremos adiante.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 333


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 334
Neste campo você poderá digitar um código
para realizar pesquisa, porém se fosse no
componente ao lado ( setinha vermelha ), isto
não seria possível.

Agora, criaremos uma segunda tela para facilitar a pesquisa dos registros.

Clique no componente
RadioGroup, clique na
propriedade Items, será aberta
uma tela, digite Código e
Nome um abaixo do outro
como no exemplo acima, após
Clique no botão, clique Ok.
clique nan
propriedade
ModalResult e
defina mrOK

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 335


Clique duplo no registro selecionado transportará
do Grid para a tela de Cadastro.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 336


 Relacionamento ( N – N ) - ( Ex: 1 )
O exemplo a seguir mostra como cadastrar um funcionário que trabalha em várias empresas.

Crie as tabelas abaixo:

Funcionários.db Empresas.db

Func_Empresa.db

 File – New Application – remove file from Project – yes (remova o formulário em branco que o Delphi
abriu ).

 Crie um Alias chamado de Relacionamento ( Database – Explore – Object – New – Standard – Ok –


digite o nome Relacionamento – no lado direito , opção Path digite o caminho onde estão armazenadas as
tabelas (C:\Delphi Madruga\Sys 2\dados ) – Apply e Ok para gravar.

 Crie o formulário de entrada de dados, use o Database - FormWizard para criar a tabela de Funcionários
e Empresas. Clique o Formulário e defina as propriedades básicas: Caption = Cadastro de Funcionários,
Name = Func_Frm, clique no componente Table1, pressione F11, na propriedade DataBaseName defina o
alias Relacionamento, Name para Funcionarios_TB, clique no DataSource1, pressione F11, mude a
propriedade Name para Funcionarios_DS
Veja o cadastro de Funcionários abaixo:

 Insira um componente Label e altere a propriedade Caption para Empresas.

 Insira dois componentes Table e dois DataSource. Clique em Table1 defina a propriedade Databasename
= Relacionamento ( alias ), a propriedade Name para Empresas_TB, defina a propriedade TableName =
Empresas.db, clique no DataSource1 e mude a propriedade Name para Empresas_DS.

Clique em Table2, defina a propriedade Databasename = Relacionamento ( alias ), a propriedade Name para
Func_Empresas_TB, TableName = Func_Empresas.db, clique no DataSource2 e mude a propriedade
Name para Func_Empresas_DS, clique duplo em Func_Empresas, será aberta uma pequena tela mostrando
os campos, clique botão direito, clique em Add Fields e OK, clique novamente botão direito, clique em New
Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 337
Field ( vamos criar um campo temporário para mostrar o nome da empresa em um drop-down. Com drop-
down será mais prático), será aberta uma tela para definir nome e tamanho do campo, preencha campos como
tela abaixo:

O campo temporário é
relacionado com o
campo da tabela ( veja
ao lado ).

 Insira um DBGrid ( aba DataControls ), na propriedade DataSource defina Func_Empresas_DS, clique


duplo sobre o DbGrid, será abeta uma tela onde definiremos as colunas dos dados que serão exibidos:

Clique no
primeiro ícone
amarelo ( Add
New – Ins ),
clique duas vezes
para criar duas
colunas, clique
em FieldName e
defina o nome do
campo a ser
mostrado, clique
no + da opção
Title para alterar
o Caption para
Código
Empresa.
DBGRid

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 338


 Defina os relacionamentos, clique Func_Empresas_TB, clique em MasterSource e defina
Funcionarios_DS, clique em MasterFields para definir o relacionamento, veja abaixo:

Func_Cod é o
campo do Código
do Funcionário
que que foi criado
na tabela
Fun_Empresa.db
que serve para fazer
o relacionamento.
1
2

Veja o
relacionamento.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 339


Clique no DBNavigator, clique na
propriedade DataSource e defina
Funcionarios_DS

Insira um Label e na propriedade


Caption digite Empresas.

Tabela de Empresas.

Clique no DBGrid, defina a Esta é a tabela


propriedade DataSource intermediária, somente para
fazer o relacionamento.
defina Func_Empresas_DS.

Crie o formulário de entrada de dados para cadastrar algumas empresas ( utilize o FormWizard )


Para selecionar uma empresa clique no final do campo Nome Empresa, será aberta uma lista drop-down.

<< Abrindo duas tabelas >>

Um funcionário poderá ser


cadastrado em várias empresas.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 340


 Relacionamento ( 1 : 1 ) - ( Ex: 1 )
Temos duas tabelas, de Alunos e de Professores. Na tabela Alunos cadastraremos o Professor para um
aluno selecionado. Objetivo deste exemplo é mostrar relacionamento de 1 para 1 ( 1 : 1 ).

Relacionamento:
A tabela Alunos deverá conter um
campo para o relacionamento. Desta
forma ligaremos o campo
Alu_Cod_Relaciona com o campo
Profe_Cod.

 File – New application – Project – Remove from Project, selecione a Unit1 e Yes.

 Defina o Alias, aqui Madruga.

 Clique em Database – Form Wizard para criar os dois formulários Alunos e Professores, veja abaixo
como ficou o formulário de entrada de dados para o Cadastro de Alunos.

 Altere as propriedades básicas


do Formulário, Table, Name,
DataSource e Caption.

 Use o Form Wizard para


gerar o formulário de entrada
de dados para os Professores.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 341


 Estamos na tabela dos Alunos, adicionaremos um componente DBLookupComboBox2 ( aba Data
Controls ) para fazer o relacionamento entre os Professores e Alunos. Clique File • Use Unit • Professores

Como funciona este relacionamento?

Um Aluno terá apenas


Um Professor
por isto se chama relacionamento de 1 para 1

Insira um componente Table, defina a


propriedade DatabaseName = Alias
( ou caminho das tabelas ), altere a
propriedade Name para Profe_TB,
clique em TableName, defina o nome
da tabela para Professores.db, clique
Insira um componente duplo sobre Profe_TB, clique em
DBLookupComboBox1 Add fields e Ok para adicionar todos
( aba Data Controls ) e defina as os campos.
propriedades mostradas ao lado. Clique em DataSource1, clique na
propriedade DataSet, defina
Profe_TB, altere a propriedade Name
para Profe_DS.

O campo Professores poderá


ficar em branco.

Relacionamento
Alunos Professores
1:1
Alun_Cod_Aluno Profe_Cod
Alun_Cod_Relaciona

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 342


 Como criar relatório com relacionamento “Professores e Alunos” usando SQL ?

 File – New – Other e clique na opção Report, será aberto um formulário como o que está abaixo:

 Clique duplo no meio


deste formulário, será aberta
uma tela para configurar
tamanho do papel e outros.

 Após clicar no
botão OK será
incluído 3 bandas.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 343


 Para forçar quebra ( agrupamento ) por Professores precisamos incluir a banda que fará esta quebra, uma
banda do tipo QRGroup.

 Na propriedade do formulário Name altere o nome de QuickReport1 para QReport_Aula.

 Insira na banda Page Header um componente QRSysData, mude a propriedade Data ( qrsTime ) para
qrsReportTitle, onde será impresso o título do relatório via programação. Mais para direita da banda insira
outro QRSysData, mude a propriedade Data para qrsDateTime ( para imprimir a data e a hora ), insira outro
QRSysData, mude a propriedade Data para qrsPageNumber ( para imprimir número da página ).

 Clique na banda Column Header, insira um componente QRLabel, mude a propriedade Caption para
Nome do Professor.

Insira um componente SQL ( Query ), clique no componente Query, clique no botão direito, clique em
SQL Builder, na opção Database informe o Alias, na opção Table escolha a tabela de Professores e a tabela
de Alunos. Posicione o ponteiro do mouse sobre o campo Prof_Codigo e arraste-o até o campo
Alun_Cod_Relaciona, note o “traço” indicando o relacionamento, veja o gráfico abaixo:

Para fazer o relacionamento, clique na tabela de Professores, clique


no campo Prof_Codigo e arraste até o campo Alun_Codigo.

Ao clicar no “raio” será


mostrado o resultado SQL
que foi gerado.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 344



Clique no formulário do relatório QReport_Aula, na propriedade DataSet defina Query, na propriedade
Active defina True.

 Insira um componente QRDBText na banda Group Header, na propriedade DataSet defina Query, e na
propriedade DataField = Profe_Nome, agora clique na banda Group Header, clique na propriedade
Expression, clique botão Database field, clique em Query, clique em Profe_Nome, Ok e Ok.

Clique OK para
finalizar.

 Clique na banda Detail, insira um componente QRDBText, altere a propriedade DataSet para Query,
DataField para Alun_Nome.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 345


 No formulário Menu insira um botão Bitbtn e no evento OnClick digite o código abaixo:
Precisamos dizer ao formulário Menu achar o formulário do relatório, clique em File, Use e QReport.
File – use – Qreport

Mostra relatório na tela,


podendo também
imprimir.

Após clicar no botão Relatório 1 será mostrado o resultado abaixo:

Relatório de Professores

Note a quebra ( agrupamento ), a primeira


coluna dos Professores e a segunda
Alunos. Clique na banda Group Header,
clique na propriedade Child, defina o
valor para True, será inserido mais uma
banda chamada HasChild, insira um
componente QRLabel e na propriedade
Capiton digite Nome do Aluno.
Professor

Nomes dos Alunos do


professor Jurandir

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 346


Veja abaixo após inserir Child para mostrar o cabeçalho Nome do Aluno.

Note que a cada quebra


de Professor é
impresso o cabeçalho
Nome do Aluno

Para visualizar o código SQL que foi gerado pelo SQL Builder, clique no componente Query1, clique em
SQL Strings ( ... ) , veja abaixo:

SELECT
Professores.Prof_Nome,
Alunos.Alun_Nome
FROM
"professores.db" Professores
INNER JOIN
"alunos.db" Alunos
ON
(Professores.Prof_Codigo = Alunos.Alun_Cod_Relaciona)
GROUP BY
Professores.Prof_Nome, Alunos.Alun_Nome
ORDER BY
Professores.Prof_Nome, Alunos.Alun_Nome

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 347


 Relacionamento ( 2 )
 Crie as duas tabelas.

 Crie o formulário de entrada de dados para a Agenda. O campo código não precisa ser posto no formulário
visto que é um campo auto-increment.
Como padrão o nome é Table, mude a
propriedade Name para Agenda_TB e
o DataSource para Agenda_DS.
Clique em Agenda_TB, defina a
propriedade DatabaseName = Alias,
TableName = Agenda.db e defina
Active para True.
Clique em Agenda_DS e defina o
DataSet para Agenda_TB.

 Abaixo do campo nome insira um DbGrid, um Table e um Datasource.

Como padrão o nome é Table, mude a


propriedade Name para
Compromissos_TB e o DataSource para
Agenda_DS. Clique em Compromissos
_TB, defina a propriedade DatabaseName
= Alias, TableName = Compromissos.db
e defina Active para True.

Relacionando campos:
Clique em Compromissos_TB, clique na
propriedade MasterSource e defina
Insira um DBGrid, clique na Agenda_DS, clique em MaterFields ( será
propriedade DataSource e aberta a tela abaixo ), clique no campo
defina Compromissos_DS. Comp_Cod_Relaciona, clique no campo
Agen_Codigo e clique no botão Add e Ok.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 348


 Clique no formulário Agenda e abra as tabelas no evento OnCreate e no evento OnEnter do DBGrid.

 Se o registro Jurandir for removido, todos seus compromissos também serão removidos.

 Alias ( 1 )

 Insira um componente DataBase


( aba BDE ), clique duplo sobre este
componente, será aberta uma tela, veja
abaixo:

 Digite o nome do Alias  Clique e selecione o


desejado, aqui, Madrugada. driver Standard.

 Defina as propriedades do Database1

 Digite o caminho onde estão


as tabelas de dados.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 349


 Observe atentamente
cada evento 

 Alias ( 2 )
Selecione o formulário corrente e no evento OnCreate digite as linhas de código abaixo, insira também um
componente Session ( aba BDE ). Insira um componente Session ( aba BDE – no delphi 6.0 ).

Digite o código abaixo no evento OnCreate.

Dados é o nome da sub-


pasta onde contem todas as
tabelas de dados

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 350


 Integridade referencial ( Paradox )
Exemplo: Temos um Cadastro de Cidades e um Cadastro de Funcionários. Cada registro gravado no
Cadastro de Funcionários terá uma cidade relacionada ( buscaremos a cidade do Cadastro de Cidades ),
portanto, todos os registros do Cadastro de Funcionários terão várias cidades “filhas”. Se alguma cidade for
excluída do Cadastro de Cidades criará registros órfãos no Cadastro de Funcionários, e isto JAMAIS pode
acontecer. A “integridade referencial” NÃO permite registros órfãos no Cadastro de Funcionários, ou no
caso, em qualquer outra tabela.
Registro nr 1
1º registro Cidade “filha”
Cadastro de Cidades
Cadastro de Funcionários
Código: 1
Código: 1 Cidade: Timbó
Nome funcionário: Mike Allan
Cidade: Timbó
Registro nr 2

2º registro Cidade “filha” Cadastro de Cidades

Cadastro de Funcionários Código: 2


Cidade: Blumenau
Código: 2
Nome funcionário: Eric Tomas
Cidade: Timbó

3º registro Cidade “filha”

Cadastro de Funcionários Integridade:

Código: 3 No Cadastro de Cidades se tentar excluir a


Nome funcionário: Jurandir cidade de Blumenau ou Timbó o programa ( ou
Cidade: Blumenau banco de dados ) NÃO deverá permitir. Se isto
acontecer, teremos 3 registros no Cadastro de
Funcionários sem suas respectivas cidades !
Lembre-se, o campo cidade do Cadastro de
Funcionários esta relacionado com o Cadastro
de Cidades, que é o local onde buscamos as
cidades.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 351


 Crie as duas tabelas abaixo com o utilitário Database Desktop.

Cadastro de Funcionários Cadastro de Cidades

 Formulário de Funcionários. Funcionários: Insira um componente


Table, defina a propriedade
DatabaseName = Alias X,
Name = Funcionario_TB,
TableName = Funcionários.db, clique
em Funcionário_TB, clique no botão
direito, Add All Fields, clique em
Funcionário_DS, na propriedade
DataSet defina Funcionários_TB.

Cidades: Insira um componente Table,


defina a propriedade
DatabaseName = Alias X,
Name = Cidades_TB,
TableName = Cidades.db, clique em
Cidades_TB, clique no botão direito,
Add All Fields
clique em Cidades_DS, na propriedade
DataSet defina Cidades_TB.

Cidade: Insira um componente DBLookupComboBox1, clique


nele e defina as propriedades abaixo:
DataSource = Funcionário_DS
DataField = Func_Cod_Relaciona_City ( campo relaciona )
ListSource = Cidades_DS ( Datasource )
ListField = Cid_Cidade ( campo a ser listado )
KeyField = Cid_Cod ( campo chave )

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 352


 Abra o utilitário Database Desktop, clique em File, clique em Working Directory e defina o caminho
onde estão as tabelas.

 Abra a tabela de Funcionários, clique em Table, clique em Restructure, será aberta a tela abaixo, role até
a opção Referential Integrity ( integridade referencial ) e clique, clique no botão Define ( que surgirá ).

Clique na Tabela
Cidades, clique na
setinha apontando
para esquerda, clique
no botão OK, será
solicitado um nome
Clique no campo que para a integridade,
relacionaremos digite o nome
Func_Cod_Relaciona_City, Func_City.
clique na setinha pra direita.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 353


Nome da integridade

Insira um botão do tipo Bitbtn e no evento OnClick digite o código abaixo:

Ao clicar no Navegador de registros retornará a Ao clicar no botão Excluir será mostrada


Caixa de mensagem de erro abaixo: caixa de mensagem abaixo.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 354


 Sistema básico com alguns módulos
 Tela senha de acesso. Tela de acesso, o usuário terá 3 chances para digitar a senha corretamente, caso
contrário o programa abortará.

Insira um componente MaskEdit,


defina a propriedade PasswordChar
diitando um asterisco ( * ), ou algum
outro caracter que será mostrado no
campo da senha.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 355


Cria o fundo gradiente no
formulário da senha.

 Crie um menu para os programas.

Insira um PopUpMenu, clique duplo sobre este


objeto e defina duas opções – Sócios e
Empresas: Clique na propriedade Caption, digite
Sócios, na propriedade Name digite Socios2.
Ao clicar no botão direito haverá um atalho para
os dois programas. Clique no formulário
Módulo Principal, clique na propriedade
PopupMenu e defina PopupMenu1.

Clique duplo no componente MainMenu1


e defina as propriedades: Clique na
propriedade Caption, no lado direito digite
Cadastros, na propriedade Name, digite
Cadastros1, agora defina as propriedades
para Sócios, Empresas, Recibos e Sair.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 356


Formulários abaixo são carregados para memória dinamicamente ( de forma + rápida ).

Outra maneira:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 357


 Defina os formulários que serão carregados de maneira dinâmica: Project – Options – Forms e posicione
os formulários a serem carregados dinamicamente para o lado direito da tela ( coluna = Available forms ).

 Criaremos um modulo onde conterá os componentes de dados:

Insira 3 componentes Table e 3 DataSources e


definas as propriedades DatabaseName = Alias,
TableName = Sócios_TB, clique em Sócios_DS
defina o DataSet = Sócios_TB e a propriedade
Name = Sócios_DS.

Como padrão os nomes serão Table1, Table1 e


Table3, DataSource1, DataSource2 e
DataSource3, mude as propriedades de acordo
com o exemplo.

No Cadastro de Sócios
criaremos a numeração de
registros automaticamente
( via programa ). Na seção
Private crie a variável
NrProx

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 358


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 359
 Crie a tabela Cadastro de Sócios com os campos abaixo:

O primeiro Edit é
utilizado apenas para
localizar registros, não é
campo que faz parte da
tabela.

Insira um
Clique no campo código e na propriedade
ReadOnly = True . Desta forma não será possível
StatusBar, clique
“digitar” o código. Lembre-se que foi criado uma duplo, clique no
variável para criar o código automaticamente – botão amarelo 7
auto-incrementador. vezes (Add new )
para criar as
divisões.

Nesta divisão
será mostrado
a quantidade
de registros
que estão na
tabela.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 360


Ao fechar o formulário e se for
alterado algum campo, antes de
fechar será solicitada confirmarção
para a gravação ou não do registro
corrente.

Localizará pelo Código do


Sócio ou através do Nome
( o campo Nome é um índice
secundário ).

Soma quantidade de
registros que há na tabela e
mostrará na barra inferior.

Soma todos os
salários da tabela e
mostra no Label10.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 361


No campo Edit_Localiza
será aceito somente “letras”.

Se for ativada uma


das 3 teclas abaixo,
estas serão mostradas
na barra de status:

Caps, Del ou
NumLock.

Ao excluir o
registro corrente.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 362


Verifica se registro
esta em edição ou
alteração, grava o
registro e toca um
som do tipo .wav

No campo Nome Sócio será


aceito somente letras.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 363


Ao clicar no botão será
localizado um Sócio
através do seu código.

Procura registro
através do nome
informado.

Apaga TODOS os
registros da tabela
mediante confirmação.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 364


Navega nos registros,
permitindo apagar o
registro, usar setinha
para cima e para
baixo etc.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 365


 Crie a tabela Cadastro de Recibos com os campos abaixo:

Insira um componente DBLookupComboBox1


( aba DataControls ) e defina as propriedades
de acordo com o gráfico.

Insira um segundo DBLookupComboBox2


para a Empresa e definas suas propriedades.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 366


Esta é uma maneira prática para selecionar registros. Ao
clicar no botão acima ( setinha vermelha ) será aberta uma
tela ( veja abaixo ), serão listados todos os Sócios
cadastrados, digite as letras iniciais do Sócio que deseja
procurar ou clique sobre ele, após clique no botão OK, o
registro será transportado para a tela de Cadastro de
Recibos.

 Crie a tela para pesquisar Nomes, após encontrar o Nome este será transportado para a tela de Recibos.

Insira um DBGrid, clique duplo


sobre o Grid, insira duas
colunas clicando na pastinha
amarela ( Add new ) e defina a
propriedade FieldName =
Nome_Socio e Cidade.

Insira um botão Bitbtn e na propriedade


ModalResult defina o valor para MrOk

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 367


Indice secundário.

Veja abaixo, foram digitadas as letras JUR, o cursor esta posicionado no registro JURANDIR PELLIN.

Ao clicar OK o registro selecionado


JURANDIR PELLIN será transportado para a
tela de Recibos no campo Nome Sócio.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 368


 Filter  Procurando registros
Crie um Cadastro com os campos Nome e Data de Aniversário. Com o Filter é possível pesquisar registros
registros através de qualquer campo.
Na linha Uses digite a
biblioteca DateUtils.

Insira um componente
RadioGroup ( Standard )

No campo Edit digite


somente: dia ou o mês
ou o ano.

Clique no componente Clientes_TB,


clique no evento OnFilterRecord e
digite o código.

O campo Data_Aniver não é


campo de índice secundário,
é apenas um mero campo.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 369


Resultado do código da página anterior:

Segue abaixo outra maneira:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 370


 Mesmo campo para procura e grava registro
Na situação a seguir usaremos um único campo para procurar um registro e também para gravá-lo. Após o
usuário digitar um código que já existe, este registros será trazido para memória.

 Crie a tabela abaixo:

 Crie o formulário abaixo, insira dois componentes Tables e dois DataSources. Nos dois Tables abaixo
usaremos a tabela de ClientesX ( uma única tabela ).

Clique em Table1, defina as propriedades DatabaseName = Alias, clique em TableName = ClientesX.db,


clique em Name defina o nome Clientes_TB, clique em DataSource, defina o nome Clientes_DS, clique na
propriedade DataSet = Clientes_TB, propriedade Name = Clientes_DS, clique em Clientes_TB e defina
Active para True.

Clique em Table2, defina as propriedades DatabaseName = Alias, clique em TableName = ClientesX.db,


clique em Name defina o nome Table_Aux_TB, clique em DataSource, defina o nome
DataSource_Aux_DS, clique na propriedade DataSet = Table_Aux_TB, propriedade Name =
DataSource_Aux_DS, clique em Table_Aux_TB e defina Active para True.

 Código fonte do programa acima:


Insira um DBNavigator,
clique na propriedade
DataSource defina
Clientes_DS.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 371


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 372
 Registro duplicado não permitido
Como evitar a duplicação de registros ? Uma pessoa ou registro pode ter somente um único código.

 Crie uma tabela. O campo código é “ I “ ( Long Integer )

 Clique no componente Table1, clique no evento OnPostError e digite o código abaixo:

Outra forma:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 373


 CGC  Como validar ?
Após sair do campo CGC ( perder o
foco do campo ), será mostrada uma
menssagem confirmando validade do
CGC digitado.

Função Right

Função Cgc

DBEdit5 é o campo onde


digitamos o número do CGC.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 374


 CPF  Como validar ?

O conteúdo digitado no
campo do CPF será
verificado no evento
OnExit, ou seja, quando
perder o foco do campo.

 TryStrToFloat  Como aceitar somente valor ?

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 375


 Como reajustar todos os “salários” de uma tabela ? ( 1 )
Mostra como efetuar “reajuste salarial” em todos os registros da tabela com um determinado percentual
utilizando os componentes SpinEdit ( aba Samples ), ProgressBar ( aba Win32 ).

Insira um componente
SpinEdit ( aba Samples ).

Insira uma ProgressBar ( aba Win32 ).

Retângulos pontilhados são


usados pela ProgressBar.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 376


 Como reajustar todos os “salários” de uma tabela ? ( 2 )
Atualizará todos os preços unitários da tabela no percentual informado.

Insira uma ProgressBar ( aba Win32 )

A linha em vermelho
mostra como arredondar
o valor.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 377


 Como somar todos os “salário” ?
Após clicar será lido todos os registros da tabela e somará todos os campos salário na variável Total.

No evento OnClick do botão Calcula ( Bit_Calc_Salarios ) digite o código abaixo.

 Como fazer barra de título piscante ?


Insira um Timer ( aba System ), clique duplo sobre
Timer e digite o código abaixo. Este código fará com
que a barra de título pisque sem parar.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 378


 Como criar um campo temporário com relacionamento e pesquisa ?

No exemplo a seguir veremos como criar “campo temporário”, relacionamentos e mais uma maneira de
pesquisar registros.

 Crie as duas tabelas abaixo: Na tabela Alunos.db há um campo chamado de Alun_Cod_Relaciona ( este
campo não ficará visível no formulário de Cadastros de Alunos, finalidade deste campo, é unicamente fazer o
relacionamento), que será o campo usado para fazer o relacionamento da tabela de Alunos com a tabela
Professores.

Tabela: Alunos.db Tabela: Professores.db

 Use o Form Wizard para criar o formulário de entrada de dados para cadastrar os Alunos.

Altere as propriedades básicas do


formulário: Caption para Cadastro de
Alunos, Name para Alunos_Frm.
Altere as propriedades dos componentes
de dados, Table1 para Alunos_TB,
DatabaseName = Alias, TableName
para Alunos.db, DataSource para
Alunos_DS, DataSet para Alunos_DS.

Estas são as propriedades básicas para


personalizarmos o formulário.

 Agora vamos fazer o relacionamento para buscarmos o nome do professor.

Insira um componente DBEdit, defina duas propriedades, DataSource para Alunos_DS, DataField para
Alun_Cod_Relaciona.

Insira um Table e um DataSource, altere os nomes destes componentes: Table para Profe_TB, DataSource
para Profe_DS. Clique Profe_TB, defina a propriedade DatabaseName = Alias, TableName para
Professores.db ( nome da tabela ). Clique em Profe_DS, DataSet defina Profe_TB e Name para Profe_DS.

Vamos criar o campo temporário para “mostrar” o nome do professor. Clique no componente Alunos_TB,
clique no botão direito, clique em New Field, será mostrado uma tela para definir o nome do campo, tipo,
tamanho etc , veja na página a seguir:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 379


Observe com atenção cada opção da tela abaixo. Digite o nome do campo ( Nome_Profe_Temp ), String
porque é um campo “texto”, o tamanho é de “20 caracteres”, tipo de campo “lookup, ou seja, campo tipo
drop-down”, campo chave é “Alun_Cod_Relaciona” ( campo que foi criado na tabela de Alunos ), DataSet é
Profe_TB, chave de pesquisa “Profe_Codigo”, o que será resultado ( nome do campo que será mostrado ),
nome do professor ( Profe_Nome ).

Clique no componente Alunos_TB,


clique duplo, será aberto a tela
acima com todos seus campos.
Sempre escrevo “Temp” no final do
nome do campo para diferenciar um
campo físico de um campo
temporário ☺

 Abaixo está o campo temporário Nome_Profe_Temp, arraste-o para dentro do formulário.

Arraste o campo para


dentro do formulário

Traduzindo caixa campo temporário:


Name............. : nome do campo ( temp - temporário ).
Type.............. : tipo do campo – string = texto.
Size................ : tamanho do campo ( 20 caracteres ).
Lookup ......... : veja no lado direito – drop-down.
Keyfiels......... : nome campo para relacionar.
Dataset.......... : dataset-Professores para buscar o nome do Professor.
Lookup keys. : chave primaria campo Professor.
Result field ... : resultará mostrando o nome do Professor.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 380


 Agora vamos inserir um componente Bitbtn ( botão ) para abrir a tela de pesquisa dos professores, nomeie
este botão para Bit_Procura e no evento OnClick digite o código abaixo:

Adiante criaremos um
formulário para filtrar os
registros chamado de
Localiza_Frm.

 Insira um novo formulário, na propriedade Name defina o nome para Localiza_Frm.


Insira um componente
DBGrid, um Edit e 3
botões do tipo BitBtn.

Clique no botão OK, altere a


propriedade ModalResult para
mrOK.

Clique duplo sobre o DBGRid, será aberta a tela


ao lado, insira uma coluna ( add new ) ( setinha
vermelha ), veja na página seguinte mais
propriedades ...

 Clique no DBGrid, defina a propriedade ReadOnly para True, lembre-se, o Grid serve somente para
mostrar os nomes dos professores, e não para cadastrar, alterar ou excluir.

Clique no primeiro item


( 0 – Prof_Nome ), defina o nome do
campo na propriedade FieldName e
mais abaixo a propriedade Caption
Nome do Professor.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 381


No evento OnChange do Edit digite o código abaixo. Note na linha With foi informado Profe_Frm para
indicar que o componente ( table – tabela ) Profe_TB está no formulário de Professores.

Abra a tabela de Professores e


crie um índice secudário
chamado de Inome_profe

Quando for aberto o formulário de consulta de professores o cursor estará posicionado no Edit para
imediamtamente iniciar a procura de um possível nome de professor.

Digite as linhas abaixo nos


respectivos eventos,
OnShow e OnClick.

Se você esta na tela de pesquisa de


Professores, e se o professor que estiver
procurando não existir, clique no botão
“Professores” para cadastrar novos
“teachers”

 PageControl e SatusBar  Controle de páginas e Barra de status


Usaremos o componente PageControl ( aba Win32 ) e o componente SatatusBar ( aba Win32 ).
 Insira um formulário ( New Form )
 Insira um PageControl, clique no botão direito, clique na opção New Page para inserir novas páginas ou
abas.

 Clique no centro do form para


selecionar a TabSheet1 ( página ), na
propriedade Caption altere o nome de
TabSheet1 para Empresas, este passo
deve ser repetido para as outras duas
Tabsheets 2 e 3. Altere também a
propriedade Name de cada TabSheet1
para TabSheet_Empresa,
TabSheet_Funcionarios
TabSheet_Cidades.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 382


 Selecione o formulário, na propriedade Caption digite Page Control e na propriedade Name digite
PageControl_Frm.

 Insira 3 componentes Table e 3 componentes DataSource. Já aprendemos anteriormente as propriedades


básicas que devem ser definidas para os componentes Table e Datasource.

Passos: Clique no primeiro Table, clique na propriedade DatabaseName e digite o Alias ou caminho onde
estão armazenadas as tabelas, clique na propriedade Name e digite Emp_TB, defina a propriedade
TableName = Empresas.DB. Clique no componente DataSource1, na propriedade DataSet defina Emp_TB
, na propriedade Name = Emp_DS. Clique em Emp_TB, clique no botão direito, Fields Editor, clique direito,
Add fields e clique OK.

Todos os passos acima deverão ser repetidos para as duas outras tabelas (Tables e Datasources ) - (
Funcionários e Cidades ).

 Clique duplo no componente Func_TB, será aberta uma pequena tela mostrando os campos, selecione-os,
clique no primeiro campo ( Func_Cod ), mantenha a tecla Ctrl pressionada e clique nos campos desejados,
clique na área azul ( note que todos os campos selecionados ), arraste-os para dentro da TabSheet_Empresas,
solte-os, estes serão posicionados no corpo do TabSheet_Empresas. Este processo é feito para definir os
campos, é apenas uma forma rápida, caso contrário teríamos que definir campo a campo ☺.

Insira um DBNavigator ( aba Data


Controls ), defina a propriedade
DataSource para Func_DS.

 Clique no TabSheet_Empresas, insira dois botões Bitbtn para navegar nos registros.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 383


Insira uma StatusBar ( aba Win32 ), esta ficará posicionada no rodapé da tela corrente, clique duplo sobre
ela e clique 4 vezes na pastinha amarela ( Add new ), para inserir 4 divisões na StatusBar.


Veja abaixo o programa fonte completo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 384


Veja abaixo vários posicionamentos das “abas ou palhetas”, altera a propriedade TabPosition.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 385


No exemplo abaixo há apenas um DBNavigator1 ( navegador de registros ), no exemplo anterior havia um
navegador para cada cadastro.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 386


No evento OnChange do PageControl digite o código abaixo:

Inserindo ícones para os Tabs (abas): Na barra de componentes do Delphi – aba Win32
selecione o componente ImageList, clique duplo para selecionar os ícones desejados,
selecione PageControl, na propriedade Images clique para definir ImageList1. Após será
definido automaticamente os ícone para cada Tab (de acordo com a numeração) ☺

Clique nesta
Clique no PageControl e
região para
na propriedade Image
melhor selecionar
defina o componente
a PageControl.
ImageList1.

 CEP  Como formatar ?

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 387


 PopMenu  Como criar menu ?
Cria um menu de atalho ao clicar no botão direito do mouse.

 Na aba Standard , insira um componente PopupMenu, selecione o campo código EditCodigo, na


propriedade PopupMenu deste campo informe PopupMenu1, desta forma quando o ponteiro do mouse
estiver sobre este campo e se clicado no botão direito do mouse será aberto o menu de atalho. Para definir
opções no PopupMenu, clique duplo sobre PopupMenu, será aberta uma outra tela, no primeiro Caption
informe Cor de fundo e no segundo Caption informe Cor da letra.
Clique duplo para definir
as procedures que serão
no evento onclick.

Após clique duplo sobre


PopupMenu será aberto uma
tela para definir os Captions e
Eventos.

Ao clicar o
botão direito.

 WAV  Como reproduzir um arquivo de som do tipo “.wav”


Para reproduzir sons no formato WAV é simples. Na linha Uses inclua a cláusula MMSystem.

 Crie um botão chamado de Som, no evento OnClick digite a linha de código abaixo: O arquivo de som
aqui é Dog.Wav, poderia ser qualquer outro arquivo.

SND_ASYNC Executa o som assincronicamente, a função retorna assim que inicia o som.
SND_NODEFAULT Especifica que se o som não pode ser tocado a função não toca o som padrão.
SND_MEMORY Use se o som está em um arquivo de recursos.
SNDLOOP Especifica que o som não deve para de tocar até que outro som seja chamado.
SND_NOSTOP Faz com que o som não possa ser interrompido por outro, retorna FALSE se isto
ocorrer.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 388


 Splash Screen  Como criar tela de abertura ?
Criando tela de abertura do sistema.

 Insira um form.
 No ícone View Unit abra seu projeto.

Insira uma figura, aba


Additional – Image, na
propriedade Picture escolha
um arquivo de imagem.

 Como carregar uma imagem .bmp quando carregar o form ?

Insira um componente Image ( aba


Additional ), um componente
OpenPictureDialog
( aba Dialogs )

Imagem deve
estar na pasta do
projeto corrente.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 389


 Como adicionar um percentual em um valor ?
Temos 3 campos edits, no primeiro campo será digitado um valor, no segundo um percentual e no terceiro edit
será armazenado o total já acrescido do percentual, ou seja, valor atualizado. Teremos um problema por causa
do uso do “ponto” ( 100.22 ).

Para resolver este problema precisamos fazer uma pequena função para remover o “ponto” do valor ( 100.22 )

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 390


Solução do “ponto” no valor ( 100.20 )

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 391


 Encriptografando senha

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 392


 DBGrid e SQL  Um único DbGrid com resultados diferentes
Neste exemplo usaremos um DBGrid, e faremos vários DataSources, fazendo combinações com
para retornar um resultado no Grid.

Tabela: Produtos.db

 Vamos criar um Modulo de dados para concentrar todos os componentes Query. Insira um
DataModule, na propriedade Name defina o nome DM_Qr. Clique em File – New – DataModule,
insira 8 Query ( plural queries ), defina os nomes de acordo com o gráfico abaixo. Defina a
propriedade DatabaseName seu alias para cada Query do projeto corrente.

As Query ( queries ) abaixo serão usadas adiante para


fazermos os relatórios. Cada DataSource que esta no formulário
Grid deverá ser associado com um
Query do módulo DM_Qr. Clique em
File – Use Unit e selecione DataModulo.
Clique em Produtos_Todos_DS, clique
na propriedade DataSet e associe com
seu respectivo Query ou,
Produtos_Todos_Qr.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 393


Agora vamos definir os códigos de SQLs para cada Query que será utilizado.

Clique no componente Query1, clique na propriedade SQL, clique no lado direito em TStrings (...) e
digite o código SQL para cada componente ( Query1, Query2 ... )

Query1 Query2
SELECT SELECT
Prod_Codigo, Prod_Codigo,
Prod_Descricao, Prod_Descricao,
Prod_Qtde, Prod_Qtde,
Prod_Data, Prod_Data,
Prod_Obs Prod_Tipo
FROM FROM
"Produtos.db" Produtos "Produtos.db" Produtos
WHERE WHERE
(Prod_codigo >= :Cod_Inicial) and (Prod_codigo <= :Cod_Final) (Prod_Data >= :Data_inicial) and (Prod_Data <= :Data_Final)
and (Prod_Tipo = :Tipo)

Query3 Query4

Não digite nada ☺ Não digite nada ☺

Query5 Todos_Produtos_Qr

SELECT
Prod_Codigo,
Prod_Descricao,
Prod_Qtde,
Prod_Data,
Prod_Tipo
FROM
"Produtos.db" Produtos
WHERE
(Prod_Data >= :Data_Inicial) and (Prod_Data <= :Data_Final)

Produtos_Maior_Que_Qr Todos_Produtos_Igual_Qr

 Insira um segundo DataModulo, na propriedade Name defina o nome DM, insira 1 Table e 1
DataSource, defina o nome ( name ) do componente de acordo com o gráfico abaixo, clique em
Produtos_TB, na propriedade DatabaseName defina o Alias ( ou caminho da tabela ), clique na
propriedade TableName, defina o nome da tabela que será usada aqui Produtos.db, clique duplo
em Produtos_TB, clique no botão direito, clique em Add fields e Ok.

No evento OnCreate do DM ( DataModulo ) abra a tabela de Produtos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 394


 Crie o formulário de Produtos para dar entrada aos produtos.

Estando no DM ( Data Module ), clique em Produtos_TB, defina o


DatabaseName = Alias, defina a propriedade Name = Produtos.db, clique em
Produtos_TB, clique no botão direito, clique em Add fields e Ok, selecione
todos os campos, arraste-os para dentro do formulário, clique na propriedade
Active e defina o valor True. Esta é uma rápida maneira para criar o formulário
de entrada de dados para os Produtos, a propósito, já vimos ☺

 Insira um Form, um DbGrid, 7 Datasources, 19 botões BitBtn e10 Edit. Adiante veremos as
propriedades que deverão ser definidas para cada um dos componentes que estão no formulário.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 395


Produtos – código fonte

No formulário de Produtos, no evento


OnClose digite este código. Ao fechar o
formulário será verificado o registro se
foi inserido ou alterado e será solicitada
confirmação.

Abaixo segue os código utilizados no formulário


Seleções ( veja o formulário na página anterior )
Seleções – código fonte do programa

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 396


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 397
No início do programa, na cláusula Private digite a linha Procedure Limpa_Grid;

Digite a procedure abaixo:

SUM () Soma
AVG () Média
MAX () Máximo
MIN () Mínimo
COUNT(*) Conta registros

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 398


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 399
Selecionará o código que
for digitado no Edit5.Text.

Localiza uma descrição ou outra.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 400


RegsX é uma variável.

 Relatório com
Vamos criar os relatórios do programa que criamos na página anterior usando SQL.

 Crie um formulário para seleção. Insira um formulário, 3 botões Bitbtn, 8 edit ( edits ) e um
componente RadioGroup. Criaremos 5 formulário para os relatórios

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 401


 Relatório  Lista “todos” os registros.

Dataset:
DM_Qr.Todos_Produtos_Qr

Atenção ! DM_Qr é o módulo onde


contém todos os Query
( queries ) utilizados neste exemplo,
portanto, este deve vir por primeiro
para indicar a origem de todos os
outros Query.
Associe cada QRDBText com o seu respectivo campo
DM_Qr.Produtos_Todos_Qr ...

Todos_Produtos_Q
Todos_Produtos_Qr

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 402


 Relatório  Listará todos os registros “iguais” ao código solicitado.

Dataset:
DM_Qr.Todos_Produtos_Igual_QR

Todos_Produtos_Igual_Qr

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 403


 Relatório  Listará todos os registros “por período”

Dataset:
DM_Qr.Query1

Query1

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 404


 Relatório  Listará por “data e tipo”
Dataset:
DM_Qr.Query2

Query2

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 405


 Relatório  Listará “perído e opção selecionada”

Dataset:
DM_Qr.Query5

Query5

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 406


Faremos um relatório com quebra por datas ( período )
Clique em Query_Data, clique na propriedade DatabaseName e defina o Alias, neste caso Dm_Sqls

Clique na região branca


e defina o DataSet para
Query_Data

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 407


Group Header: Insira uma banda QrGroup, insira nesta banda um QrExpr, clique em QrExpr e na proprieade
Expression digite Query_Data.Prod_Data, clique na banda QrGroup e na propriedade
Expression digite Query_Data.Prod_Data

Group footer: Insira um componente QrExpr, clique em QrExpr e na propriedade Expression digite
SUM(Query_Data.Prod_Qtde), clique na propriedade ResetAfterPrint e defina o valor para
True.

Summary Insira um componente QrExpr, clique em QrExpr e na propriedade Expression digite


SUM(Query_Data.Prod_Qtde), clique na proprieade ResetAfterPrint e define o valor para
True . Insira um QrSysData, mude a propriedade Data para qrsDetailCount, na propriedade
Text digite Regs:

Adicione dois Edit e um


botão do tipo Bitbtn

Formulário do relatório.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 408


Resultado

 Rotinas  Como criar ?


Como o próprio nome sugere “rotinas”, ou seja, pedaços / trechos de linhas de código que são muito usadas
em vários programas do seu projeto. Um arquivo de rotinas pode conter várias rotinas. Uma rotina pode conter
várias linhas de código e terá um único nome. Quando precisar chamar uma rotina em outro programa não
repita linhas de código, digite apenas o nome da rotina desejada. Veja adiante um exemplo ( básico ):

 File • New • Unit

Você terá o código abaixo padrão:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 409


 Rotina Mensagem

Crie uma nova rotina. File – New – Unit. Como padrão o Delphi
atribui o nome de Unit1, salve o arquivo que conterá todas as suas
rotinas com o nome de Rotina_Exemplo

Onde estão as mensagens.

Este é o nome da procedure.

 Usando rotina acima


 Abra seu programa (ou projeto) para aplicar a rotina que acabamos de criar.
 Clique em Add to project (+) e adicione o arquivo de rotina ( Rotina_Exemplo )
 File Use Unit e selecione o arquivo de rotinas.

Resultado da rotina. Quando perder o foco


será mostrada a caixa de mensagem.

 Rotina cores  Para mudar cores dos campos


Criaremos uma rotina para mudar a cor do campo quando “sair / perder o foco “ do campo corrente.

 Crie um arquivo para armazenar as rotinas. File New Unit Ok e digite o conteúdo a seguir, salve a Unit
com o nome Minhas_Rotinas.

unit Minhas_Rotinas;
interface Digite esta
uses dbctrls, Graphics; linha

// DbCtrls = dentro deste há as definições do Objeto TDbEdit


// Graphics = dentro deste há as definições das cores clYellow etc

Procedure Entra_Cor(Sender : TObject);


Procedure Sai_Cor(Sender : TObject);

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 410


Digite a rotina Entra_Cor abaixo Digite a rotina Sai_Cor abaixo
Implementation do item Implementation
da rotina Entra_Cor.

Procedure Entra_Cor(Sender : TObject); Procedure Sai_Cor(Sender : TObject);


begin begin
With TDBEdit(Sender) do With TDBEdit(Sender) do
begin begin
Color := clYellow; Color := clBlue;
Font.Color := clRed; Font.Color := clRed;
end; end;
end; end;

 Abra um formulário, na segunda linha dos Uses digite Minhas_Rotinas, para abrir o arquivo das rotinas.
 Selecione os objetos (campos) código e Nome apenas:
Clique no campo Código, no evento OnEnter digite Entra_Cor(Sender);
Clique no campo Código, no evento OnExit digite Sai_Cor(Sender);
Clique no campo Nome, no evento OnEnter digite Entra_Cor(Sender);
Clique no campo Nome, no evento OnExit digit: Sai_Cor(Sender);

Quando for clicado no campo Nome do


Produto a cor da letra e do fundo
mudarão. Quando for clicado no próxmo
campo a cor retornará ao normal.

 Como somar, multiplicar e totalizar em um DBGrid ?

 Crie a tabela. Clique em Tools Database


Desktop File New Table Paradox 7
Ok digite os campos como no gráfico ao
lado, após grave clicando no botão SaveAs,
nome do arquivo Movtos.

Insira um DBNavigator (aba


Lembre-se: Quando DataControls), na propriedade
Note que a coluna Total está vazia. Para
os dados estão gerar o total criaremos um campo virtual DataSource informe
visíveis é porque a (temporário), ou seja, fará o calculo Datasource1.
propriedade do table somente quando o programa for
Active está com o executado – não é um campo físico da
valor True. tabela.

Insira um componente DBGrid


( aba DataControls) , na
propriedade DataSource
informe DataSource1.

Veja adiante as linhas de


código dos Labels.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 411


Clique em Table1, no DabaseName defina o Alias “Cálculos”, propriedade TableName é Movtos.db. Clique no
ícone DataSource1, propriedade Dataset defina Table1. Selecione o ícone Table1, no evento OnCalcFields digite
a seguinte linha: Table1Total_Cal.Value := Table1Qtde.Value * Table1Preco.Value;

Vamos criar um campo temporário para o total, posicione o


ponteiro do mouse sobre Table1, clique no botão direito do
mouse, clique em Fields Editor, clique no botão direito, clique
New Field, digite o novo campo ( Total_Cal ).

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 412


 Data Module  O que é ?
Com este recurso podemos concentrar vários componentes, como: Table, Datasource, Query etc em um único
módulo e apontar o DataModule para os formulários. Se não utilizar DataModule, você sempre terá que
definir estes componentes em cada formulário utilizado.

 File – New Application  Crie duas tabelas, Fornecedores e Clientes

Fornecedores Clientes

 File – New Application, será inserido um formulário, insira dois componentes DBGrid, na propriedade
Name defina o nome para Data_Module_Frm.

Este formulário foi


salvo com o nome
Modulo_Grid.pas

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 413


 Vamos criar um módulo de dados. File • New • DataModule.

Mude a propriedade
Name para DM_Dados

 Insira no Data Module dois componentes Table e dois DataSources.

Grave a unit como o


nome de
Modulo_Dados.pas

 Clique no Table1, propriedade Name para Professores_TB, DatabaseName para Madruga ( Alias ),
TableName para Professores.DB, clique em DataSource1, mude a propriedade Name para
Professore_DS, e o DataSet para Professores_TB.

 Clique no Form onde estão os dois DBGrids, File, Use unit, abra a unit dos módulos que foi nomeada
Modulo_Dados, clique no DBGrid dos professores, na propriedade DataSource defina Professores_DS.

Clique no DM_Modulo e no evento OnCreate digite: Professores_TB.Open;


Clique no Table2, propriedade Name para Alunos_TB, DatabaseName para Madruga ( Alias ),
TableName para Alunos.DB, clique em DataSource1, mude a propriedade Name para Alunos_DS,
DataSet para Alunos_TB

 Clique no Form onde estão os dois DBGrids, File, clique em Use unit, abra o formulário dos módulos
que foi nomeado de Modulo_Dados, clique no DBGrid dos professores, na propriedade DataSource
defina Alunos_DS.

 Clique no DM_Modulo e no evento OnCreate digite: Alunos_TB.Open;

 Conteúdo do DataModule, veja abaixo o evento OnCreate:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 414


 Abaixo esta o módulo de dados ( DM_Dados ):

 DBGrid pronto com as duas tabelas no mesmo formulário.

Cadastro de
Professores.

Cadastro de
Alunos.

 Como ativar e desativar vários botões do navegador ?


No exemplo a seguir aprenderemos a “ativar” e “desativar” botões das operações básicas para gerenciar os registros de
uma tabela.

 Abra um novo formulário, insira 10 botões do tipo SpeedButton ( aba Additional ).

Para alinhar o ícone no topo


altere a propriedade Layout
e defina blGlyphTop.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 415


 Crie a tabela de Clientes.

 Digite o código fonte abaixo em seus respectivos eventos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 416


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 417
Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 418
Procura registro pelo código.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 419


Não permitirá gravar conteúdo
vazio no campo data estiver.

 Como animar “titulo” janela corrente ?

O texto da barra de título


estará em constante rolagem
para o lado esquerdo da tela.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 420


 ActionList  Como fazer várias ações ao mesmo tempo ?
Com o componente ActionList várias ações poderão ser feitas ao mesmo tempo. A seguir veremos um
exemplo simples de navegar nos registro da tabela com operações básicas como : incluir, excluir, consultar e
navegar nos registros.

 Insira um form, e 8 botões Bitbtn, insira um Table, um DataSource e um ActionList ( aba Standard ).

 Clique duplo no componente


ActionList1, clique na opção New
Standard Action, será a tela abaixo...

 Após clicado na opção


New Standard Action
será mostrada a tela ao
lado ( direito ), clique em
DataSet e Ok.

 Clique em Dataset
selecione as ações, first
( primeiro), prior ( anterior )
etc... como esta no gráfico,
após clique Ok

Estas ações já estão


disponíveis no Delphi.

Ações que foram


selecionadas.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 421


 Clique no primeiro botão, se já escreveu um
 Clique na propriedade Action,
texto para o Caption, tipo “Anterior”, será
clique no dropdown e escolha a opção
convertido para inglês, clique na propriedade
DataSetPrior ( o botão será para
Caption e altere novamente para português.
posicionar no registro Anterior ).

Cada botão terá uma ação a


ele associado.

Após ter associado todos os botões execute e teste. Quando o ponteiro estiver no início da tabela o botão
Anterior e Primeiro estarão desabilitados ( desativados ), este controle é feito automaticamente.

Outro exemplo: Insira dois botões Bitbtn no formulário, um botão “esconde barra” e outro “mostra barra”.

 Clique na pastinha amarela para


criar novas ações, mude o nome do
Caption e da propriedade Name.
Clique no componente ActionList1,
na propriedade State defina
asSuspendedEnabled.

 Clique no botão “Esconde barra”, clique na


propriedade Action, está no lado direito, selecione no
dropdown a opção Action1_Esconde_Barra, clique
na aba Events, clique duplo no evento OnClick e
digite o código que está na página seguinte, clique no
botão “Mostra barra” e repita os passos aqui
descritos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 422


 Como fazer uma tabela “passo a passo” ?
Crie os campos Código, Nome,
Endereço, Cidade, Salário e Data
usando o Database Desktop. Insira um
Form, insira 6 componentes Edit (aba
Standard), não use o Form Wizard.
Este exemplo mostra como usar
Fieldbyname e Value para gravar
registros.

Insira um componente Table e um


Datasource (aba Data Access). Defina
um Alias. Clique no Table, clique no
botão direito, Fields Editor, botão
Digite o código abaixo direito Add Fields e Ok.

Ao clicar no botão Lê - Value


será mostrado o registro na
tela ( memória ), após clique
nas setinhas para navegar nos
registros.

AsString = converte o
conteúdo para texto e
mostra no Edit1.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 423


O conteúdo que está no
Edit1 será movido para o
campo Código na tabela
(Table1).

Antes de mover o conteúdo do


Edit1, este precisa ser
convertido para inteiro, isto
que o Código é um valor
inteiro.

Pega os valores da tabela e


mostra na tela ( no Edit1 ).

Converte o conteúdo do
campo Salário para texto,
para exibi-lo no campo
Edit5.

Limpa todos os
campos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 424


 Recibo  Como criar ?
Criaremos um programa para recibos. Crie a tabela abaixo após defina o Alias de nome Recibo_Dados.
 Crie a tabela abaixo:

Defina o Alias a propriedade


TableName ... já vimos anteriormente
em várias situações como fazer isto.

 Crie o formulário abaixo com respectivos campos.

Ao clicar será aberta uma


Insira um componente tela de seleções para
SpinEdit ( aba Samples ) imprimir o Relatório.

 Digite o código fonte abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 425


 File – New – Other e clique em Report, clique duplo no formulário para configurá-lo, veja o gráfico
abaixo:

 Insira 4 QRDBText. Clique em Nr_Recibo, clique na propriedade Name, defina o nome para
QRDBText_Nr_Recibo, está sendo exibido o nome Nr_Recibo porque o campo foi associado a tabela e este
nome foi definido na tabela ( nomeação dos campos ). Para associar os campos, clique em QRDBText1, clique
em DataSet, defina Frm_Recibo_Dados.Recibo_TB, clique em DataField e defina o nome do campo
Nr_Recibo.

Os passos acima ( item 5 ) deverão ser seguidos para todos os campos deste relatório.
Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 426
Formulário do relatório:

Definindo linhas: Clique na banda Page


Header, clique em Frame, defina o
valor das propriedade DrawBottom e
DrawTop para True, defina a largura
do fio na propriedade Width para 2.

Para os campos valor e


histórico insira dois
componentes QRRichText1,
defina a largura e altura destes
de acordo com este exemplo.

 Crie uma unidade chamada Extensos. File – New – Unit. ( veja rotina adiante )

 Digite o código fonte abaixo do formulário Recibos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 427


Resultado do programa:

Segue abaixo a rotina de extenso usada no exemplo acima ( File – New – Unit e salve o arquivo com o nome
Extenso )

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 428


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 429
Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 430
 Como criar Contas a Pagar “ básico “ ?
Criaremos um cadastro para Contas a Pagar e algumas telas de seleção de impressão para os relatórios com
quebra / agrupamento de data.

 Crie a tabela abaixo com os índices secundários.

Crie os índices
secundários.

Obs, o índice secundário INr_Cheque_Data_Vencto é composto por dois campos – Nr_Cheque e a


Data_Vencto

Indíce secundário formado por


dois campos:
Clique nos campos Nr_Cheque e
IData_Vencto, defina o nome do
índice secundário de
INr_Cheque_Data_Vencto.

 Tela Contas a Pagar ( programa básico ).

 Digite o código fonte abaixo:

No botão Imprimir, imprimirá


todos os registros da tabela. Este
relatório se encontra no final deste
projeto.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 431


 Crie a tela de critérios de acordo com exemplo abaixo, defina o nome ( Name ) de Opcoes1_Frm .

Listará registros somente com


intervalo de código, ou somente
pelo período.

Se for clicado na
opção Por Código.

Se for clicado na opção


Por Data de Vencto.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 432


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 433
 Crie o formulário abaixo - Rel_Contas_Pagar2. ( File – New – Other – Report ).

No formulário abaixo aumentei a largura das bandas para melhor identificar seus nomes

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 434


 Após clique duplo no formulário do relatório será aberta a tela abaixo.

 Listará os números dos cheques no intervalo de 1 até 200

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 435


Listará o período de 10/01/2002 até 10/01/2002 ( ou seja, de um único dia )

Foi selecionada a opção


Por Data de Vencto, os
campos Código Inicial e
Código Final foram
ocultos.


Segundo formulário do relatório: Agora faremos outro formulário que conterá mais combinações de
filtragem de dados. Com o formulário abaixo poderemos listar pelo intervalo de código e por período.

Opção
selecionada,
Por Código

Opção
selecionada,
Por Data e
Vencto

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 436


Opção selecionada
é Por Código e
Data de Vencto

Veja abaixo a distribuição dos campos e os nomes dos objetos:

Insira as bandas de acordo


com o gráfico abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 437


Listará intervalo de código de 10 até 50

Listará o período: 10/01/2002 até 10/01/2002 ( ou seja, de um único dia )

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 438


Listará intervalo de código de 10 até 30 e no período de 10/01/2002 até 10/01/2002

O código abaixo refere-se ao formulário acima:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 439


O código abaixo refere-se a tela de opções acima:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 440


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 441
Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 442
 Relatório  Imprimindo conteúdo de um RadioGroup.
Este exemplo mostra como imprimir no relatório opções que foram definidas em um Radiogroup.

 Crie a tabela abaixo:

Campo que será


usado no
RadioGroup.

 Crie o formulário de entrada de dados.

Insira um DBRadioGroup, no Caption digite


Opções, clique na propriedade DataSource e defina
DataSource1, DataField defina o campo
Estado_Civil, clique em Values e digite os
números 1, 2 e 3 - “um abaixo do outro”, na
propriedade Items digite um abaixo do outro
Casado, Solteiro e Divorciado

 No botão Relatório digite o código abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 443


 Crie o formulário do relatório. File – New – Other – Report e Ok.

Insira um componente Table,


defina a propriedade
DatabaseName = Alias,
propriedade TableName =
Agenda.db, clique duplo sobre
o componente Table1, clique
no botão direito, Add Fields e
OK.
Clique na região branca do
formulário do relatório ( veja
Insira um componente QRLabel setinha verde ), clique na
para imprimir o estado civil. propriedade DataSet e defina
Table1

 Digite o código abaixo no evento BeforePrint:

Mais um exemplo
usando Case ... of

Lembre-se, neste campo foi cadastrado apenas os números 1, 2 e


3 e não a descrição “Solteiro, Casada ou Divorciado”)

Outra forma
 Resultado do relatório:

Veja o Conteúdo do
campo do RadioGroup.
RadioGroup.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 444


 Relatório  Listando por intervalo de datas
Vamos imprimir registros somente do período selecionado.

 Estamos na tela de cadastro e desta chamaremos a tela de seleção do relatório.

No botão “Abre tela de Seleção do Relatório Data” digite a linha abaixo no evento OnClick:

 Crie a tela abaixo para entrar com as datas ( clique no ícone Form ).

Insira dois componentes MaskEdit, clique na


propriedade EditMask, será aberta uma tela
para formatar o campo.
Usamos MaskEdit para formatar o campo data
ou seja, basta digitar apenas o dia, mês e ano, as
barras serão postas pelo MaskEdit.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 445


 Continuando página anterior, clique duplo sobre o botão Relatório, no evento OnClick digite o código
abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 446


 Crie o formulário do relatório abaixo – File – New – Other – Report - Ok

 Insira um componente Table1,


defina DatabaseName = Alias,
TableName = Agenda.db, clique em
Active defina o valor para True.

 Insira um componente
QRSysData1 ( aba QReport )
e altere a propriedade Data
para qrsReportTitle.

 Defina as propriedades de cada objeto,


 Clique no formulário, clique no Nome (QRDBText2 ), defina a
onde esta apontando o propriedade DataSet para Table1 e
balão, clique na propriedade DataField para Nome. Estes passos deverão
DataSet e defina Table1. ser feitos para os objetos Código, Nome e
Data_Nasc.

Listando todos os registro da tabela:

Listando registros por período : 01/01/1977 – 30/12/1978

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 447


 Arquivo texto  Como salvar relatório em formato texto ?

Insira o
componente
QRTextFilter
( aba QReport )

QReport_Agenda é o relatório.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 448


 Como mudar cor quando salário for menor que R$ 100 ?
Se o salário for menor que R$ 100,00 a cor será vermelha e se for maior a cor será azul.

 Crie uma tabela que contenha os campos abaixo:

 Clique no componente DataSource1, clique no evento OnDataChange e digite o código abaixo:

Observe o campo Salário:

Salário maior que R$ 100,00

Salário menor que R$100,00

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 449


 Preview  Como criar preview personalizado para seu relatório ?
 Crie o formulário abaixo, cadastre 40 registros, pois com esta quantidade de registros proporcionará melhor
visualização no “preview”.

 Digite a linha abaixo no início do formulário Agenda na seção Private:

Digite.

 Crie o formulário abaixo – File – New – Other – Report - Ok

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 450


Selecione o formulário do relatório QReport_Agenda, no evento OnPreview digite as linhas abaixo:

Na linha Uses incluir QRPrntr

Explicação das linhas acima:

Preview_PersonalizadoX_Frm = nome do formulário do relatório com “preview” personalizado.


QRPreview1 = nome do objeto onde serão visualizados os registros.

 A seguir vamos criar o formulário “preview”. Insira um novo formulário, clique no ícone New Form e
insira os objetos abaixo de acordo com cada balão explicativo:

Insira 10 botões Bitbtn, observe no


Insira dois componentes
programa fonte seus nomes
SpinEdit ( aba Samples ).
( propriedade Name ).

Insira um
componente
ProgressBar.
( aba Win 32 )
Insira um componente
QRPreview1 ( aba QReport ).

Insira uma StatusBar ( aba


Win32 ), clique duplo sobre esta
e crie 3 divisões clicando no
botão Add New ( Ins ).

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 451


Parte inicial do programa do formulário “preview” personalizado.

Digite

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 452


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 453
Veja na página seguinte o resultado ... ☺ cool ...

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 454


Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 455
Devido a quantidade de registros o relatório abaixo resultou 3 páginas:

Paginando relatório – Página # 1

Observe: O conteúdo da
banda PageHeader é
impressa em todas as folhas,
já o conteúdo da banda Title é
impressa somente na primeira
folha, compare as 3 telas.

Página # 2

Página # 3

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 456


 Como ler/mudar valor de um RadioGroup ?
 Temos o formulário Agenda, este formulário já foi feito anteriormente. No campo Radiogroup será clicado
para informar o estado civil, se for Solteiro receberá o valor 1, Casado ( valor 2 ) e Divorciado ( valor 3 ).
Você verá no DBGrid apenas números tornando a leitura um pouco difícil para o usuário. Agora mostraremos
o estado civil escrevendo “Solteiro, Casado ou Divorciado”, e não representado por números.

 Precisamos fazer um campo calculado para mostrar a coluna Estado Civil e sua descrição por extenso e não
através da representação numérica.
Insira um novo formulário, um Table,
defina a propriedade DatabaseName =
Alias, TableName = Agenda.db, clique
no DataSource1, clique na propriedade
DataSet e defina Table1, clique no
DBGrid e defina DataSource1. Insira um
RadioGroup, clique na opção Items e
digite as palavras a seguir uma abaixo da
outra: Solteiro, Casado e Divorciado,
clique na propriedade Columns e digite o
número 3.

 Clique duplo sobre o componente


Table1, clique no botão direito,
clique em New fields, será aberta
uma tela para definir o nome do
campo calculado, tipo e tamanho.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 457


Criando campo temporário:

Campo calculado
que foi criado.

 Clique no DBGrid, crie 3 colunas, clique na primeira coluna, pressione F11 para alternar para as
propriedades, clique na propriedade FieldName e defina o campo Nome, repita este passo para os outros dois
campos.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 458


 Outra maneira de fazer o código da página anterior:
 Clique duplo no componente Table1, será aberta uma pequena tela listando todos os campos, clique no
campo Estado_Civil ( o conteúdo será Solteiro - receberá o valor 1 ), Casado ( valor 2 ) e Divorciado ( valor
3 ), pressione F11 para alternar para aba Events, clique duplo no evento OnGetText e digite o código abaixo:

Ao carregar o DBGrid será mostrada a descrição por extenso e não em forma de números ☺

 Abrindo programa via parâmetros


Para abrir o segundo programa somente mediante senha.

 Crie um formulário simples e salve o projeto com o nome Programa_par1.Exe.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 459


 Na barra de títulos do Delphi, clique em Run, Parameters, será aberta a tela abaixo, digite a senha no
campo Parameters.

 Pressione a combinação Ctrl F12, clique no nome do projeto Programa_par1 e Ok.

 Veja abaixo o código da unit Programa_par1. ( unit do projeto )

Digite o conteúdo que esta


no quadro pontilhado.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 460


 Crie o segundo formulário:

 No evento OnClick do botão acima digite as linhas de código abaixo:

O programa sera aberto


através de um
parâmetro, neste
exemplo, senha123

 Estando com o Windows Explorer aberto, clique duplo sobre o programa Programa_par1.exe, é mostrada
a caixa de diálogo de erro.

Ao clicar no programa Programa_par2.exe, abrirá o segundo programa.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 461


 Concatenar  Como concatenar / juntar caracteres ?
Imprime vários campos como se fossem um único.

Ex: 1000-2A/10F=20V

 Veja como imprimir vários campos concatenando-os.

 Crie um formulário como exemplo abaixo, insira 4 componentes DBEdit ( aba Data Controls ), associe
cada DBEdit com a propriedade DataSource = Bancos_DS e DataField = Banco_Parte1.

Altere as propriedades básicas do formulário:


Caption para CÓDIGOS, Name para
Concatenar_Frm. Altere as propriedades
dos componentes dos dados, Table1 para
Bancos_TB, DatabaseName = Alias,
TableName = Alunos.db, DataSource =
Bancos_DS, DataSet = Bancos_DS. Estas
são as propriedades básicas para personalizar
o formulário.

Insira 4 Edits para fazer a pesquisa do


registro, após preenchido os 4 edits
clique no botão Procura.

Estamos executando um
Findkey em vários campos
chaves primárias.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 462


 Crie o formulário para o relatório, listaremos os códigos. Crie o campo calculado Codigo_Temp para
concatenar ( juntar ) os códigos. Para criar, clique duplo sobre Table1, clique no botão direito, clique New
field, será aberta a tela baixo, digite os campos:

 Clique no componente Table1, clique no evento OnCalcFields e digite o código abaixo:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 463


 Relatório  Imprime somente registro que esta na memória
 Crie um formulário com os campos abaixo.

Imprimirá o
registro que esta na
memória ( tela ).

Codigo é o nome
do campo da tabela.

 Crie o formulário para imprimir o registro selecionado. File – New – Other – Report – Ok. Insira um
componente QRLabel, clique na propriedade Caption e digite Relatório Agenda. Insira quatro componentes
QRLabel, clique no Caption do primeiro componente e digite Código, nomeie todos os outros objetos de
acordo como o exemplo abaixo.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 464


 Clique em File, Use Unit, clique em Agenda2 para abrir o formulário da Agenda.

 Clique na banda Detail e no evento BeforePrint digite o código abaixo:

Imprime somente o registro que esta na memória ( na tela ).

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 465


 Como proteger seu projeto ? ( 1 ) ( mais segura ☺ )
 Criaremos uma rotina para criptografar ( codificar ) o progra a ser protegido. Crie uma Unit com o código
fonte abaixo, grave-a com o nome Rotina_EWB. File – New – Unit.

Palavra ou termo que será


codificada, neste exemplo a
palavra é Sistema .

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 466


 Configure o Delphi para que ele possa enchergar a unit de rotina Rotina_EWB.pas. Clique em Tools –
Environment options.

 Clique no botão,
será aberta a tela
abaixo:

 Clique neste campo, apague o


conteúdo da linha corrente e cole o
caminho/path que esta sua rotina,
aqui:

C:\Delphi Madruga\Exemplo
JURA'S BOOK\Protege
projeto\Sistema
XYZ\Rotina_EWB.pas

após clique

Add e Ok

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 467


Veja tela abaixo, unit Rotina_EWB.pas foi adicionada.

 Crie um novo formulário ( ou projeto ) e coloque 3 labels e digite os textos abaixo.


Este será o sistema / projeto a ser protegido contra cópias.

 Pressione Ctrl F12 para abrir a lista das units, clique na unit Sis_Vendas e OK.

Protege.exe, tela abaixo,


programa que ativa a
proteção do programa.

Seu sistema. Sistema


que será protegido

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 468


 Digite o texto que está entre o retângulo pontilhado:

 Crie um novo projeto ( Protege_Meu_Software ) - File – New – Application. Após ter digitado
programa fonte abaixo, compile-o e execute-o no computador do desenvolvedor ( programador ) para
proteger o sistema, ou seja, será pego o serial da máquina do desenvolvedor e criptografá-lo, certamente o
serial NUNCA será igual ao de outra máquina ☺ espero ☺. Caso alguém copiar o projeto Sis_Vendas e
tentar rodar em outra máquina este não funcionará.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 469


Digite as funções abaixo
da diretiva {$R *.DFM}
Na região onde a setinha
vermelha está apontando.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 470


 Alguém copiou o projeto Sis_Vendas ilegalmente e tentou rodar em outra máquina, será mostrada a caixa
de diálogo abaixo e o programa será abortado / interrompido.

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 471


 Como proteger seu programa ? ( 2 )
Uma dica muito simples para "camuflar" uma proteção em seu sistema.

Esta dica é boa se você mesmo for implementar a solução no computador do cliente.

* Crie um arquivo qualquer, de preferência com extensão .dll, .vxd, .udf ou .ins (para deixar o pirateador
confuso), dentro do diretório do \Windows ou \Windows\System;

Desta forma o sistema só roda se encontrar este arquivo (como já disse, pode ser qualquer nome).

Digite o código abaixo no evento OnCreate.

 Como pedir senha na abertura do programa ? ( 3 )


É uma maneira de forçar digitação da senha antes de abrir a tela principal do sistema.

Digite o código abaixo no evento OnCreate:

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 472


 Procurando registros com “Dbgrid e SetRange” ?............................................................................................ 325
 Como procurar registros em um DBGrid ?....................................................................................................... 326
 Como ler / buscar “valores” da tabela para Edit ? ............................................................................................ 327
 Lendo conteúdo do campo ................................................................................................................................ 328
 Maneiras de ler campos .................................................................................................................................... 329
 Como “editar / alterar” um registro ?................................................................................................................ 330
 Como criar atalho com a combinação “Ctrl + A” ? .......................................................................................... 330
 Destacando opção selecionada no RadioGroup................................................................................................ 331
 Como desabilitar opções do RadioGroup ? ...................................................................................................... 331
 Pesquisando registro com DBEdit ou Edit........................................................................................................ 332
 Relacionamento ( N – N ) - ( Ex: 1 )................................................................................................................ 337
 Relacionamento ( 1 : 1 ) - ( Ex: 1 ) ................................................................................................................... 341
 Como criar relatório com relacionamento “Professores e Alunos” usando SQL ? .......................................... 343
 Relacionamento ( 2 )......................................................................................................................................... 348
 Alias ( 1 ) .......................................................................................................................................................... 349
 Alias ( 2 ) .......................................................................................................................................................... 350
 Integridade referencial ( Paradox ) .................................................................................................................. 351
 Sistema básico com alguns módulos................................................................................................................. 355
 Filter  Procurando registros ............................................................................................................................ 369
 Mesmo campo para procura e grava registro .................................................................................................... 371
 Registro duplicado não permitido..................................................................................................................... 373
 CGC  Como validar ? ..................................................................................................................................... 374
 CPF  Como validar ? ..................................................................................................................................... 375
 TryStrToFloat  Como aceitar somente valor ? .............................................................................................. 375
 Como reajustar todos os “salários” de uma tabela ? ( 1 ) ................................................................................. 376
 Como reajustar todos os “salários” de uma tabela ? ( 2 ) ................................................................................. 377
 Como somar todos os “salário” ?...................................................................................................................... 378
 Como fazer barra de título piscante ? ............................................................................................................... 378
 Como criar um campo temporário com relacionamento e pesquisa ? .............................................................. 379
 PageControl e SatusBar  Controle de páginas e Barra de status .................................................................... 382
 CEP  Como formatar ?.................................................................................................................................... 387
 PopMenu  Como criar menu ?........................................................................................................................ 388
 WAV  Como reproduzir um arquivo de som do tipo “.wav” ......................................................................... 388
 Splash Screen  Como criar tela de abertura ? ................................................................................................. 389
 Como carregar uma imagem .bmp quando carregar o form ? .......................................................................... 389
 Como adicionar um percentual em um valor ? ................................................................................................. 390
 Encriptografando senha .................................................................................................................................... 392
 DBGrid e SQL  Um único DbGrid com resultados diferentes ....................................................................... 393
 Relatório com.................................................................................................................................................... 401
 Relatório  Lista “todos” os registros............................................................................................................... 402
 Relatório  Listará todos os registros “iguais” ao código solicitado................................................................ 403
 Relatório  Listará todos os registros “por período” ........................................................................................ 404
 Relatório  Listará por “data e tipo”................................................................................................................. 405
 Relatório  Listará “perído e opção selecionada” ............................................................................................ 406
 Rotinas  Como criar ? ..................................................................................................................................... 409

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 473


 Rotina Mensagem ............................................................................................................................................. 410
 Usando rotina acima ......................................................................................................................................... 410
 Rotina cores  Para mudar cores dos campos................................................................................................... 410
 Como somar, multiplicar e totalizar em um DBGrid ?.................................................................................... 411
 Data Module  O que é ? .................................................................................................................................. 413
 Como ativar e desativar vários botões do navegador ?..................................................................................... 415
 Como animar “titulo” janela corrente ? ............................................................................................................ 420
 ActionList  Como fazer várias ações ao mesmo tempo ?............................................................................... 421
 Como fazer uma tabela “passo a passo” ? ........................................................................................................ 423
 Recibo  Como criar ? ...................................................................................................................................... 425
 Como criar Contas a Pagar “ básico “ ?............................................................................................................ 431
 Relatório  Imprimindo conteúdo de um RadioGroup..................................................................................... 443
 Relatório  Listando por intervalo de datas...................................................................................................... 445
 Arquivo texto  Como salvar relatório em formato texto ?.............................................................................. 448
 Como mudar cor quando salário for menor que R$ 100 ?................................................................................ 449
 Preview  Como criar preview personalizado para seu relatório ? .................................................................. 450
 Como ler/mudar valor de um RadioGroup ?..................................................................................................... 457
 Abrindo programa via parâmetros .................................................................................................................... 459
 Concatenar  Como concatenar / juntar caracteres ?........................................................................................ 462
 Relatório  Imprime somente registro que esta na memória ............................................................................ 464
 Como proteger seu projeto ? ( 1 ) ( mais segura ☺ ) ....................................................................................... 466
 Como proteger seu programa ? ( 2 ) ................................................................................................................ 472
 Como pedir senha na abertura do programa ? ( 3 )........................................................................................... 472

Delphi Aplicado  by Jurandir A. Pellin – Timbó – SC (E-mail: delphiewb@gmail.com) 474

Você também pode gostar