Escolar Documentos
Profissional Documentos
Cultura Documentos
DE
LINGUAGEM E
TCNICAS
DE
PROGRAMAO II
NDICE
CRIANDO BANCO DE DADOS
05
05
06
06
06
06
11
12
13
15
17
18
19
1.13) Exerccios
21
CRIANDO ALIASE
23
2.1) Delphi x BD
23
23
24
2.4) Exerccios
28
CRIANDO PROJETOS
29
29
29
30
32
32
34
34
34
36
CRIANDO CADASTROS
5.1) Configurando componentes Data Access
38
38
41
49
56
57
5.6) Exerccios
61
62
62
62
66
66
70
70
75
75
6.9) Exerccios
77
78
78
78
80
81
81
81
84
87
89
8.6) Exerccios
89
CRIANDO RELATRIOS
90
90
90
95
95
9.5) Exerccios
104
104
Mark Juliani
CAPITULO I
CRIANDO BANCO DE DADOS
1.1)
Modelo de Dados
Antes de escolhermos o Banco de Dados que iremos utilizar, necessrio
CURSOS
ALUNOS
Onde:
CURSOS
CAMPO
COD_CURSO
NOME_CURSO
TIPO
I
A
TAM
50
REQ
SIM
SIM
CH
PK
-
TIPO
I
I
A
A
D
I
I
TAM
50
01
REQ
SIM
SIM
SIM
SIM
SIM
SIM
SIM
CH
PK
FK
-
ALUNOS
CAMPO
COD_ALUNO
COD_CURSO
NOME_ALUNO
SEXO_ALUNO
DT_NASC
SERIE
PERIODO
Campo:
Tipo:
Tam:
Tamanho do campo
Req:
CH:
Mark Juliani
ferramenta do prprio banco de dados, como o Access, mas se a base de dados for
Paradox, ou dBase, voc pode usar o Database Desktop, um utilitrio que vem com o
Delphi e permite a criao desses tipos de bancos de dados.
1.4)
1.5)
Pgina 7 de 108
Mark Juliani
Para criarmos uma tabela, basta clicarmos no menu FILE / NEW / TABLE
conforme mostra figura abaixo:
Pgina 8 de 108
Mark Juliani
Nome do
Campo Da
Tabela
Tipo
Dado
Campo
de
do
Tamanho do
Campo
Indicador de
Chave
Primria
Propriedades
da Tabela
Indicador de
Campo
Requerido
Como exemplo, vamos montar a tabela de CURSOS, descrita no item 1.1 desta
apostila:
Pgina 9 de 108
Mark Juliani
Mark Juliani
DEFAUT VALUE: para colocar um valor padro no campo quando for inserido um
registro na tabela.
Como prximo passo, deveremos salvar nossa tabela, para isso s clicar no
boto SAVE AS, e aparecer a seguinte tela:
Nesta tela, deveremos escolher o local onde iremos salvar nossa tabela e
escolhermos um nome para esta tabela. No exemplo, estou salvando a tabela na pasta
BANCO DE DADOS e o nome dela ser CURSOS. Lembrando que para nomes de
tabelas, geralmente no utilizamos espaos nem caracteres especiais e adotamos o
padro maisculo e nome no plural.
Aps clicarmos no boto SALVAR, a tela acima ser fechada, e ser
apresentada a primeira tela apresentada neste item.
Agora, vamos criar nossa tabela de ALUNOS, para isso, basta seguirmos todos
os passos mencionados no item 1.5:
Pgina 11 de 108
1.6)
Mark Juliani
Pgina 12 de 108
Mark Juliani
abrir a tabela, para isso, basta clicarmos no menu FILE / OPEN / TABLE, conforme
mostra figura abaixo:
Pgina 13 de 108
Mark Juliani
Aps clicarmos neste menu, abrir uma tela para localizarmos nossa tabela:
Basta localizarmos o local onde a tabela foi salva, clicarmos na tabela desejada e
clicar no boto abrir. A tabela ser aberta no Database Desktop confome mostra figura
abaixo e para podermos modificar as propriedades e campos da tabela, s clicar no
boto RESTRUCTURE ou no menu TABLE / RESTRUTUCTURE.
Pgina 14 de 108
1.8)
Mark Juliani
Propriedades da Tabela
Neste item, veremos as propriedades de uma tabela paradox. Para que vejamos a
tela abaixo, precisaremos abrir uma tabela j criada, para isso, basta seguirmos o que foi
descrito no item anterior. As propriedades da tabela esto situadas no canto superior
esquerdo da janela conforme mostra a figura abaixo.
Mark Juliani
exemplo a tabela ALUNOS filha da tabela CURSOS, pois elas esto relacionadas
entre si.
Pgina 16 de 108
Mark Juliani
Mark Juliani
Pgina 18 de 108
Mark Juliani
Pgina 19 de 108
Mark Juliani
Pgina 20 de 108
Mark Juliani
Esta propriedade pode ser definida para qualquer tabela. Vamos definir uma
senha para a tabela de CURSOS. Para isso devemos abrir a tabela de CURSOS.
Basta digitar uma senha, sua confirmao e clicar no boto OK. Ateno para o
boto AUXILIAR PASSWORDS. Quando clicamos neste boto, aparece uma outra
janela.
Pgina 21 de 108
Mark Juliani
CIDADES
ESTADOS
PAISES
REGIOES
Onde:
REGIOES
CAMPO
COD_REGIAO
NOME_REGIAO
TIPO
I
A
TAM
50
REQ
SIM
SIM
CH
PK
-
Pgina 22 de 108
Mark Juliani
PAISES
CAMPO
COD_PAIS
NOME_PAIS
SIGLA_PAIS
TIPO
I
A
A
TAM
50
03
REQ
SIM
SIM
SIM
CH
PK
-
TIPO
I
I
A
A
TAM
50
03
REQ
SIM
SIM
SIM
SIM
CH
PK
FK
-
TIPO
I
I
I
A
I
D
$
TAM
+
50
REQ
SIM
SIM
SIM
SIM
SIM
SIM
SIM
CH
PK
FK
FK
-
ESTADOS
CAMPO
COD_ESTADO
COD_PAIS
NOME_ESTADO
SIGLA_ESTADO
CIDADES
CAMPO
COD_CIDADE
COD_ESTADO
COD_REGIAO
NOME_CIDADE
QT_HABITANTES
DT_FUNDACAO
RENDA_MENSAL
Crie as Tabelas
Pgina 23 de 108
Mark Juliani
CAPITULO II
CRIANDO ALIASE
2.1)
Delphi x BD
Para a fazer a comunicao da linguagem de programao DELPHI com o
O que um ALIASE
Um ALIASE um nome mais amigvel que voc escolhe para referenciar o
Pgina 24 de 108
Mark Juliani
teremos que alterar uma linha de cdigo sequer no nosso programa, basta apenas
redirecionar o ALIASE para o novo caminho.
2.3)
Pgina 25 de 108
Mark Juliani
Pgina 26 de 108
Mark Juliani
Pgina 27 de 108
Mark Juliani
Nesta tela, devemos escolher o local onde est o nosso Banco de Dados e
quando as tabelas estiverem sendo visualizadas no lado direito da janela, basta clicar no
boto OK. No nosso exemplo, aps o clique a tela ficar assim:
Pgina 28 de 108
Mark Juliani
Exerccios
Crie um ALIASE chamado AL_CIDADES para o exerccio do captulo anterior.
Pgina 29 de 108
Mark Juliani
CAPITULO III
CRIANDO PROJETOS
3.1)
PROJECT1 (veja figura abaixo). Este projeto composto por um formulrio chamado
FORM1.
Cidades criado no captulo I. Vamos ento montar o formulrio principal para o nosso
projeto modelo. Para montarmos o formulrio principal, utilizaremos o FORM1 criado
pelo Delphi quando inicializamos o nosso projeto.
Vamos fazer com que o nosso formulrio principal fique conforme a figura
abaixo:
Pgina 30 de 108
Mark Juliani
Pgina 31 de 108
Mark Juliani
Salvando o Projeto
Para salvarmos o nosso projeto, basta clicarmos no boto
(Save All) ou
Pgina 32 de 108
Mark Juliani
Sempre que criarmos um novo formulrio para o nosso projeto, necessrio que
salvemos este formulrio e para isso basta clicarmos sempre no boto SAVE ALL. Mas
lembre-se, este janela de salvar arquivo mostrada anteriormente, s aparece quando
estivermos salvando um arquivo pela primeira vez.
3.4)
Fechando o Projeto
Para fechar o nosso projeto, basta clicarmos no menu FILE / CLOSE ALL,
3.5)
Abrindo o Projeto
Para abrirmos o nosso projeto, basta clicarmos no menu FILE / OPEN
Mark Juliani
Nesta janela, basta localizar o projeto no local onde ele foi salvo, clicar com o
mouse em cima do nome do arquivo e pressionar o boto ABRIR.
Pgina 34 de 108
Mark Juliani
CAPITULO IV
CRIANDO DATA MDULE
4.1)
nosso projeto salvo anteriormente conforme foi mostrado no captulo III. Com o projeto
aberto, basta clicarmos no menu FILE / NEW.
Pgina 35 de 108
Mark Juliani
Vamos agora salvar o nosso projeto, clicando no boto SAVE ALL. Ateno,
com o nosso DataModule nunca foi salvo aparecer uma janela pedindo o local onde
iremos salvar-lo, basta escolher o mesmo local onde encontra-se salvo o nosso projeto,
dar um nome para o arquivo (UDM) e clicar no boto salvar, conforme mostra figura
abaixo:
Pgina 36 de 108
4.3)
Mark Juliani
com um Banco de Dados, comum que este projeto contenha vrios formulrios, da o
fato de que devemos renomear estes formulrios com um nome mais apropriado.
Digamos que tenhamos um projeto que contenha 30 formulrios, e na hora de salvar o
usurio tenha deixado os nomes sugeridos pelo Delphi (FORM1, FORM2, FORM3,
etc). Como vamos saber posteriormente que formulrio trata-se do cadastro de Cidades,
a menos que a pessoa tenha uma excelente memria, isto vai ficar extremamente
complicado. Por falar em vrios formulrios, como devemos fazer para manipular estes
vrios formulrios no Delphi.
Basta clicarmos no boto
Pgina 37 de 108
Mark Juliani
Pgina 38 de 108
Mark Juliani
CAPITULO V
CRIANDO CADASTROS
5.1)
do exerccio do captulo I.
Como foi dito, no Data Module ficaro os componentes de acesso a dados
encontrados na paleta de componentes DATA ACCESS. Para comearmos a montar o
nosso cadastro, deveremos colocar um componente TABLE e um componente
DATASOURCE em nosso Data Module que dever ficar da seguinte forma:
Pgina 39 de 108
Mark Juliani
Pgina 40 de 108
Mark Juliani
Aps aparecer a tela, clique com o boto direito do mouse dentro desta tela e
selecione o menu ADD FIELDS, conforme mostra a figura a seguir:
Aps clicar neste menu, aparecer a seguinte tela, mas ateno, se ocorrer algum
erro nesta operao, significa que o seu componente TABLE ou o seu ALIASE no foi
configurado corretamente:
Esta tela contem todos os campos criados em sua tabela, basta clicar no boto
OK e a tela anterior ficar da seguinte forma:
Pgina 41 de 108
Mark Juliani
Sempre que for modificado, excludo ou includo algum campo em sua tabela do
banco de dados, os campos da janela mostrada na figura acima devero ser retirados
(clicar no campo e pressionar a tecla Delete) e adicionados novamente.
5.2)
nosso formulrio de cadastro de REGIES, para isso basta clicar no menu FILE / NEW
FORM. Observem que um novo formulrio foi criado em nosso projeto.
Como os componentes de Acesso a Dados esto contidos no Data Mdule, o
nosso formulrio de cadastro dever utilizar o Data Mdule. Para fazermos esta relao
entre o formulrio de Cadastro e o Data Mdule, deveremos fazer o seguinte:
Primeiramente deveremos selecionar o formulrio de cadastro e depois clicar no menu
FILE / USE UNIT conforme mostra figura abaixo:
Pgina 42 de 108
Mark Juliani
Para que nossa tela de Cadastro de Regies fique com a aparncia da tela acima,
precisaremos modificar algumas propriedades:
Caption : Cadastro de Regies (Texto que aparece na barra de ttulo)
BorderStyle: bsSingle (no permite que o usurio altere o formato da janela)
Name: frmCad_Regioes (nome mais amigvel para o formulrio)
Position: poDesktopCenter (faz com que o formulrio aparea no centro da tela)
Vamos agora colocar os botes que sero responsveis pela manipulao dos
dados em nossa tabela, para isso utilizaremos o componente TOOLBAR da paleta
WIN32
.
Pgina 43 de 108
Mark Juliani
Para adicionar botes na barra, clique com o boto direito do mouse em cima da
barra e clique no menu NEW BUTTON.
Para adicionar separadores na barra, clique com o boto direito do mouse em
cima da barra e clique no menu NEW SEPARATOR.
Pgina 44 de 108
Mark Juliani
BTNPRIMEIRO
BTNANTERIOR
BTNPROXIMO
BTNULTIMO
BTNNOVO
BTNEDITAR
BTNEXCLUIR
BTNSALVAR
BTNATUALIZAR
BTNCANCELAR
BTNSAIR
Vamos agora, adicionar HINTS aos nossos botes. Para isso altere a propriedade
SHOWHINT para TRUE (faz com que aparece um texto ao se passar com o mouse em
cima de um boto) e depois digite o texto que voc quer que aparea na tela na
propriedade HINT de cada boto. Sugesto de HINTS para os botes:
Primeiro Registro
Registro Anterior
Prximo Registro
ltimo Registro
Novo Registro
Editar Registro
Excluir Registro
Salvar Registro
Atualizar Registro
Cancelar Registro
Sair do Formulrio
Pgina 45 de 108
Mark Juliani
Vamos agora colocar algumas imagens em nossos botes. Como as imagens dos
botes sero as mesmas para todas as telas de cadastros, poderemos utilizar o Data
Mdule para isso.
Visualize o formulrio do Data Mdule e insira o componente ImageList
da
paleta WIN32. Nosso Data Mdule dever ficar com a seguinte aparncia:
Pgina 46 de 108
Mark Juliani
Pgina 47 de 108
Mark Juliani
Pgina 48 de 108
Mark Juliani
Para que o nosso formulrio fique com est aparncia, basta colocar dois
componentes LABEL (
DBEDIT (
FIRST
PRIOR
NEXT
LAST
Mark Juliani
APPEND
INSERT
POST
REFRESH
CANCEL
ou alterado.
DELETE
EDIT
atual.
Mtodos para manipulao da tabela
RECORDCOUNT
tabela.
RECNO
tabela.
EOF
BOF
OPEN
abre a tabela.
CLOSE
fecha a tabela.
Pgina 50 de 108
Mark Juliani
//btnPrimeiro
procedure TfrmCad_Regioes.btnPrimeiroClick(Sender: TObject);
begin
//posiciona a tabela no primeiro registro
DM.tblRegioes.First;
//habilita-desabilita botes
btnPrimeiro.Enabled
:= false;
btnAnterior.Enabled
:= false;
btnProximo.Enabled
:= true;
btnUltimo.Enabled
:= true;
end;
//btnAnterior
procedure TfrmCad_Regioes.btnAnteriorClick(Sender: TObject);
begin
//posiciona a tabela no registro anterior
DM.tblRegioes.Prior;
//habilita-desabilita botes
btnProximo.Enabled
:= true;
btnUltimo.Enabled
:= true;
//verificando se a tabela esta no primeiro registro
if DM.tblRegioes.Bof then
begin
btnPrimeiro.Enabled
:= false;
btnAnterior.Enabled
:= false;
end;
end;
//btnProximo
procedure TfrmCad_Regioes.btnProximoClick(Sender: TObject);
begin
//posiciona a tabela no prximo registro
DM.tblRegioes.Next;
//habilita-desabilita botes
btnPrimeiro.Enabled
:= true;
btnAnterior.Enabled
:= true;
//verifica se a tabela est no ultimo registro
if DM.tblRegioes.Eof then
begin
btnProximo.Enabled
:= false;
btnUltimo.Enabled
:= false;
end;
end;
Pgina 51 de 108
Mark Juliani
//btnUltimo
procedure TfrmCad_Regioes.btnUltimoClick(Sender: TObject);
begin
//posiciona a tabela no ltimo registro
DM.tblRegioes.Last;
//habilita-desabilita botoes
btnPrimeiro.Enabled
:= true;
btnAnterior.Enabled
:= true;
btnProximo.Enabled
:= false;
btnUltimo.Enabled
:= false;
end;
//btnNovo
procedure TfrmCad_Regioes.btnNovoClick(Sender: TObject);
begin
//inclui um novo registro na tabela
DM.tblRegioes.Insert;
end;
//btnEditar
procedure TfrmCad_Regioes.btnEditarClick(Sender: TObject);
begin
//coloca um registro da tabela em edio
DM.tblRegioes.Edit;
end;
//btnExcluir
procedure TfrmCad_Regioes.btnExcluirClick(Sender: TObject);
begin
//exibe mensagem de confirmao - comando Application.Messagebox
if Application.MessageBox('Excluir Registro?', 'Excluso',
mb_applmodal+mb_iconquestion+mb_yesno+mb_defbutton1) = 6 then
begin
//verificao de erro ao excluir um registro
try
//exclui um registro da tabela
DM.tblRegioes.Delete;
except
//mensagem de erro
Application.MessageBox('Erro ao Excluir Registro.', 'Aviso',
mb_applmodal+mb_iconinformation+mb_ok+mb_defbutton1);
end;
end;
end;
Pgina 52 de 108
Mark Juliani
//btnSalvar
procedure TfrmCad_Regioes.btnSalvarClick(Sender: TObject);
begin
//mensagem de confirmao - comando Application.MessageBox
if Application.MessageBox('Salvar Registro?', 'Salvar',
mb_applmodal+mb_iconquestion+mb_yesno+mb_defbutton1) = 6 then
begin
//verificao de erro ao salvar registro
try
//salva um registro que estiver sendo includo ou alterado
DM.tblRegioes.Post;
except
//mensagem de erro
Application.MessageBox('Erro ao Salvar Registro.', 'Aviso',
mb_applmodal+mb_iconinformation+mb_ok+mb_defbutton1);
end;
end;
end;
//btnAtualizar
procedure TfrmCad_Regioes.btnAtualizarClick(Sender: TObject);
begin
//mensagem de confirmao - comando Application.MessageBox
if Application.MessageBox('Atualizar Registro?', 'Atualizar',
mb_applmodal+mb_iconquestion+mb_yesno+mb_defbutton1) = 6 then
begin
//verificao de erro ao atualizar registro
try
//atualiza um registro que estiver sendo includo ou alterado
DM.tblRegioes.Refresh;
except
//mensagem de erro
Application.MessageBox('Erro ao Atualizar Registro.', 'Aviso',
mb_applmodal+mb_iconinformation+mb_ok+mb_defbutton1);
end;
end;
end;
//btnCancelar
procedure TfrmCad_Regioes.btnCancelarClick(Sender: TObject);
begin
//cancela um registro que estiver sendo includo ou alterado
DM.tblRegioes.Cancel;
end;
Pgina 53 de 108
Mark Juliani
//btnSair
procedure TfrmCad_Regioes.btnSairClick(Sender: TObject);
begin
//fechar o formulario
Close;
end;
Os cdigos abaixo devem ser utilizados para que a tabela de regies seja aberta
ou fechada. Para melhor funcionamento do programa, no recomendvel deixar uma
tabela (componente TABLE) sempre aberta, pois isso pode vir ocasionar erros
gravssimos no Banco de Dados. O ideal abrir a tabela quando o formulrio de
cadastro for aberto e fecha-la quando o mesmo formulrio for fechado. Para fazer os
cdigos abaixo, precisaremos utilizar o evento ONSHOW (abertura do formulrio) e
ONCLOSE (fechamento do formulrio) do nosso formulrio de cadastro. Para isso
basta clicar no formulrio de cadastro desejado, selecionar a paleta de EVENTOS do
OBJECT INSPECTOR, localizar o evento desejado e dar um duplo clique com o mouse
sobre a caixa de texto branca em frente do nome do evento.
Mark Juliani
Insert
Append
dsInsert
dsBrowse
Post
Cancel
Delete
dsEdit
Edit
dsInsert
dsEdit
dsBrowse
Mark Juliani
btnExcluir.Enabled
:= false;
btnSalvar.Enabled
:= true;
btnAtualizar.Enabled := true;
btnCancelar.Enabled
:= true;
btnSair.Enabled
:= false;
end;
end
//seno a tabela vai estar no estado de visualizao (dsbrowse)
else
begin
//habilita-desabilita determinados botoes
with frmCad_Regioes do
begin
btnPrimeiro.Enabled
:= true;
btnAnterior.Enabled
:= true;
btnProximo.Enabled
:= true;
btnUltimo.Enabled
:= true;
btnNovo.Enabled
:= true;
btnEditar.Enabled
:= true;
btnExcluir.Enabled
:= true;
btnSalvar.Enabled
:= false;
btnAtualizar.Enabled := false;
btnCancelar.Enabled
:= false;
btnSair.Enabled
:= true;
end;
end;
end;
end;
Com os cdigos acima, reparem como ficam os botes do nosso formulrio de
cadastro quando estivermos inserindo um registro.
Com isso, conclumos o nosso formulrio de cadastro, mas vale lembrar que
existem vrias formas de se fazer um cadastro, o que foi passado neste captulo apenas
uma delas.
Pgina 56 de 108
Mark Juliani
com que o nosso formulrio principal chame o nosso formulrio de cadastro, pois afinal,
pra isso que existe um formulrio principal. Para isso devemos selecionar o nosso
formulrio principal e clicar no item de menu que vai estar chamando o nosso
formulrio de cadastro.
Mark Juliani
cadastros do DELPHI. Com esse assistente podemos criar rapidamente de forma bem
simples um cadastro. Vejamos como devemos utilizar este assistente:
Vou tomar como exemplo, o cadastro de Regies, somente para efeitos
explicativos, pois o mesmo j foi desenvolvido.
Para acionarmos o assistente, devemos clicar no menu DATABASE / FORM
WIZARD.
Mark Juliani
Pgina 59 de 108
Mark Juliani
Pgina 60 de 108
Mark Juliani
Pgina 61 de 108
Mark Juliani
Exerccios
Montar os formulrios de Cadastros de Pases, Estados e Cidades sem a
utilizao do assistente Form Wizard e fazer com estes sejam chamados atravs do
formulrio principal.
Pgina 62 de 108
Mark Juliani
CAPITULO VI
MSCARAS, CAMPOS LOOKUPS E CAMPOS CALCULADOS
6.1)
O que so Mscaras?
Mscaras so aqueles caracteres que complementam determinados campos
padres, evitando assim que o usurio tenha que digitar caracteres desnecessrios.
Por exemplo: Em nosso Cadastro de Cidades existe um campo chamado
DT_FUNDACAO, que a data de fundao da cidade. Sempre que o usurio for digitar
a data de fundao da cidade, este ter que digitar as barras / que compem a data.
Como toda data possui este caractere de barra / padro, poderamos definir uma
mscara para que o usurio digite apenas os valores numricos da data.
Poderamos tomar como exemplo diversos outros tipos de campos, tipo CPF,
CEP, TELEFONE, etc.
6.2)
Definindo Mscaras
Para facilitar a explicao, utilizaremos como exemplo o nosso formulrio de
cadastro de cidades.
Sempre que formos definir uma mscara de um determinado campo de uma
tabela, precisaremos definir esta mscara no componente TABLE que est
referenciando a tabela. Como vamos definir a mscara do campo DT_FUNDACAO da
tabela de CIDADES, precisaremos localizar o componente TABLE utilizado para isto.
Vamos ento abrir o Data Mdule do nosso projeto:
A figura acima, mostra o Data Mdule do nosso projeto aps todos os cadastros
terem sido feitos. Reparem que existe um componente TABLE para cada tabela do
Pgina 63 de 108
Mark Juliani
Clique agora sobre o boto com 3 pontinhos que apareceu na frente desta
propriedade:
Pgina 64 de 108
Mark Juliani
Mark Juliani
Com a mscara definida (IMPUT MASK) e o teste feito (TEST IMPUT) basta
clicarmos no boto OK e pronto, nossa mscara acaba de ser definida.
Pgina 66 de 108
Mark Juliani
banco de dados, para mostrar campos existentes em outras tabelas. Por exemplo: No
nosso projeto exemplo, temos a nossa tabela de ESTADOS, esta tabela possui apenas o
campo COD_PAIS, mas no possui o campo NOME_PAIS. Este campo lookup,
permite que a gente possa visualizar o campo NOME_PAIS na tabela de ESTADOS
sem que este tenha sido definido no banco de dados, usando apenas para isso, o campo
de ligao entre as duas tabelas, o COD_PAIS.
Vejamos a nossa tela de cadastro de ESTADOS:
que mostre o nome do Pas, precisaremos abrir o nosso Data Mdule e selecionarmos a
tabela de ESTADOS.
Pgina 67 de 108
Mark Juliani
Mark Juliani
Pgina 69 de 108
Mark Juliani
Basta clicar no boto OK. Reparem que na janela que contem os campos
existentes na tabela surgiu um novo campo.
Pgina 70 de 108
Mark Juliani
Vale a pena mencionar que um campo lookup no pode ser digitado pelo
usurio, no caso do cadastro, o usurio vai digitar um cdigo e aparecer o nome do pas
na frente. O campo lookup apenas de visualizao.
6.5)
que mostre a idade em anos de fundao da cidade, precisaremos abrir o nosso Data
Mdule e selecionarmos a tabela de CIDADES.
Pgina 71 de 108
Mark Juliani
Mark Juliani
Basta clicar no boto OK. Reparem que na janela que contem os campos
existentes na tabela surgiu um novo campo.
Pgina 73 de 108
Mark Juliani
Aps o duplo clique na caixa de texto branca que aparece em frente ao evento, o
Delphi abrir o Editor de Cdigos para podemos fazer o cdigo de clculo para o
campo. O cdigo para calcular a quantidade de anos a partir de uma determinada data
o seguinte:
//codigo do campo calculado de idade da cidade
procedure TDM.tblCidadesCalcFields(DataSet: TDataSet);
//variavel auxiliar para armazenar a data
var
Aux_Data : Real;
begin
//pegar a data atual e diminuir da data desejada
Aux_Data := Date - tblCidadesDT_FUNDACAO.Value;
//pegar o resultado e dividir pelo numero de dias do ano
Aux_Data := Aux_Data / 365.25;
//fazer com que o campo criado receba a idade calculada
tblCidadesIDADE.Value := IntToStr(Trunc(Aux_Data)) + ' anos';
Pgina 74 de 108
Mark Juliani
end;
Vamos agora abrir o nosso formulrio de cadastro de Cidades e adicionar o
nosso campo calculado.
Pgina 75 de 108
Mark Juliani
Vale a pena mencionar que um campo calculado no pode ser digitado pelo
usurio, no nosso exemplo, o usurio vai digitar somente a data de fundao e o campo
calculado ira mostrar a idade desta cidade. O campo calculdo apenas de visualizao.
6.7)
Componente DBLookupCombobox?
Como estamos falando de campos lookups e campos calculados, no poderia
que o usurio do nosso programa, ao invs de digitar o cdigo de um pas para cadastrar
um estado, selecione este pas atravs de uma lista com todos os pases cadastrados.
Primeiramente vamos ter que abrir o nosso formulrio de cadastro de Estados.
Pgina 76 de 108
Mark Juliani
Mark Juliani
Exerccios
Criar um campo calculado que mostre o texto RENDA ALTA para Cidade
que possua uma renda maior que 100.000.000 e RENDA BAIXA caso
possua valor inferior.
Pgina 78 de 108
Mark Juliani
CAPITULO VII
CRIANDO CONSULTAS SIMPLES
7.1)
7.2)
Mark Juliani
Componente
GROUPBOX
Componente
RADIOGROUP
Componente
LABEL
Componente
BUTTON
Componente
EDIT
Esta consulta dever permitir que o usurio localize uma REGIO por CDIGO
ou por NOME. O cdigo do boto localizar dever ficar da seguinte forma:
Pgina 80 de 108
Mark Juliani
Pgina 81 de 108
Mark Juliani
CAPITULO VIII
CRIANDO UM FORMULRIO DE CONSULTA
8.1)
Componente Query
Para que nossa consulta fique com uma maior velocidade, utilizaremos o
Pgina 82 de 108
Mark Juliani
NAME
forma:
Pgina 83 de 108
Mark Juliani
nesta tela que deveremos utilizar a linguagem SQL para selecionar os dados
da(s) tabela(s) desejada(s). No nosso exemplo, estamos utilizando a tabela de
REGIOES.
Pgina 84 de 108
Mark Juliani
regies. Vamos ento criar o novo formulrio. Clique no menu FILE / NEW FORM e
um novo formulrio ser criado em nosso projeto. Agora vamos salvar a UNIT deste
novo formulrio com o nome de Con_Regioes.Vamos deixar este formulrio com a
seguinte aparncia:
Componente
RADIOGROUP
Componente
BUTTON
Componente
DBGRID
. Vamos agora
Pgina 85 de 108
Mark Juliani
Aparecer a janela acima. Como nossa tabela de regies possui dois campos
(COD_REGIAO, NOME_REGIAO), vamos ter que adicionar duas colunas em nosso
DBGRID, para isso, clique no boto representado por uma pastinha amarela. Cada
clique no boto corresponde a um campo que ser visualizado.
Pgina 86 de 108
Mark Juliani
Para que as colunas do DBGRID no fiquem com o nome dos campos da tabela,
basta selecionar a propriedade TITLE da coluna e alterar o CAPTION da mesma.
Pgina 87 de 108
Mark Juliani
Mark Juliani
with DM.qryRegioes do
begin
//vamos agora alterar a propriedade SQL do componente QUERY de
//acordo com a opo feita pelo usurio
//fechando o componente QUERY
Close;
//limpando a propriedade SQL
SQL.Clear;
//adicionando novo conteudo na propriedade SQL
SQL.Add('SELECT * FROM REGIOES WHERE');
//verificando opcao escolhida pelo usurio
if RadioGroup1.ItemIndex = 0 then
begin
//se o usurio escolheu a opcao CDIGO
//filtrar o codigo e ordernar por codigo
SQL.Add(' COD_REGIAO = '+Edit1.Text+' ORDER BY COD_REGIAO');
end
else if RadioGroup1.ItemIndex = 1 then
begin
//se o usurio escolheu a opcao NOME
//filtrar o nome e ordernar por nome
SQL.Add(' NOME_REGIAO LIKE '+#39+Edit1.Text+'%'+#39+
' ORDER BY NOME_REGIAO');
end;
//abrindo o componente QUERY
Open;
//verificando se achou algum registro
if RecordCount = 0 then
begin
//se no achou, exibir mensagem
ShowMessage('Nenhum Registro Encontrado.');
end;
Edit1.SelectAll;
Edit1.SetFocus;
end;
end;
Vejamos agora com vai ficar o cdigo do boto LOCALIZAR e do boto SAIR.
O boto localizar dever fechar o formulrio de Consulta e abrir o formulrio de
Cadastro correspondente com o registro que foi selecionado na consulta.
//codigo do boto Sair
procedure TfrmCon_Regioes.Button3Click(Sender: TObject);
begin
//fechando o formulario
Close;
end;
Pgina 89 de 108
Mark Juliani
com que o nosso formulrio principal chame o nosso formulrio de consulta. Para isso
devemos selecionar o nosso formulrio principal e clicar no item de menu que vai estar
chamando o nosso formulrio de consulta.
Exerccios
Montar os formulrios de Consulta de Pases, Estados e Cidades.
Pgina 90 de 108
Mark Juliani
CAPITULO IX
CRIANDO RELATRIOS
9.1)
9.2)
Pgina 91 de 108
Mark Juliani
Componente
RADIOGROUP
Componente
BUTTON
Para que o nosso formulrio fique de acordo com a figura acima, precisaremos
modificar algumas propriedades:
BorderStyle: bsSingle
Caption : Relatrio de Regies
Name: frmRel_Regioes
Position : poDesktopCenter
Vamos tambm modificar a propriedade NAME dos botes para melhor
entendimento nas futuras explicaes:
BtnImprimir, btnVisualizar e btnSair
Todo relatrio deve ser ligado a um componente DATASET, ento antes de
comearmos a preparar o relatrio, precisamos fazer primeiro, sua consulta SQL. Para
preparar sua consulta, precisaremos de um componente QUERY, que pode ou no ser
um outro componente j utilizado. O relatrio que iremos montar ser uma listagem das
regies cadastradas, e poder ser impresso em ordem de CODIGO ou ALFABETICA e
tambm poder ser IMPRESSO ou VISUALIZADO na tela. Para concluirmos nosso
relatrio, vamos utilizar o mesmo componente QUERY utilizado na consulta de regies
(qryRegioes). Antes de prosseguirmos vamos criar um novo formulrio em nosso
projeto e salvar a sua UNIT com o nome de QR_Regioes, mudar a propriedade NAME
deste formulrio para frmQR_Regioes e colocar um componente chamado QUICKREP
neste formulrio. Este componente est localizado na paleta QREPORT e
representado pelo cone
Pgina 92 de 108
Mark Juliani
neste novo formulrio que iremos montar o nosso relatrio de regies, mas,
por enquanto, deixemos este formulrio de lado e vamos voltar ao nosso formulrio de
filtro.
Mark Juliani
Mark Juliani
Agora, ao invs de dar um duplo clique na caixa de texto branca que aparece em
frente ao evento, vamos selecionar o evento OnClique do boto Imprimir que j foi
feito.
Pronto, agora quando dermos o duplo clique no boto Visualizar o cdigo fonte
j estar l.
Outro fato interessante no cdigo fonte do boto imprimir o seguinte: Reparem
que para se chamar um relatrio no utilizamos os comandos SHOW e SHOWMODAL,
e sim PRINT (imprimir) e PREVIEW (visualizar).
Pgina 95 de 108
Mark Juliani
com que o nosso formulrio principal chame o nosso formulrio de filtro. Para isso
devemos selecionar o nosso formulrio principal e clicar no item de menu que vai estar
chamando o nosso formulrio de filtro.
Criando o Relatrio
O Delphi possui vrias ferramentas para se fazer relatrios. Em nosso projeto
Pgina 96 de 108
Mark Juliani
Pgina 97 de 108
Mark Juliani
Pgina 98 de 108
Mark Juliani
agora,
alguns
dos
componentes
mais
utilizados
da Paleta
QUICKREPORT, so eles:
QUICKREPORT: representa o relatrio
QRGROUP: componente para agrupar relatrio
QRLABEL: componente para escrever no relatrio, similar ao LABEL.
QRDBTEXT: componente para mostrar os dados do DATASET relacionado.
QREXPR: componente para mostrar campos calculados. (contadores, somas, etc.)
QRSYSDATA: componente para mostrar num. Pginas, Data, Hora, etc.
QRSHAPE: componente para fazer figuras geomtricas. (linhas, crculos, etc.)
QRIMAGE: componente para mostrar imagens.
Como j foi dito, vamos montar o nosso relatrio utilizando estes componentes.
Basta clicar nos componentes e colocar no local desejado (Detail, Sumary, etc.).
Pgina 99 de 108
Mark Juliani
) em nosso
Mark Juliani
Mark Juliani
na propriedade EXPRESSION.
Mark Juliani
):
Mark Juliani
Vamos agora, mostrar o cdigo fonte necessrio para o que qrlOrdem, utilizado
em nosso relatrio, mostre a ordem de impresso escolhida pelo usurio. Todo cdigo
que formos fazer em nosso relatrio, deve pertencer a uma determinada banda. Vou
agora mostrar os dois eventos mais importantes destas bandas:
Evento BEFORE PRINT: neste evento, devem ficar os cdigos que sero
executados antes da banda desejada ser impressa.
Evento AFTER BRINT: neste evento, devem ficar os cdigos que sero
executados depois que a bando desejada for impresa.
Para fazermos com que a ordem de impresso selecionada pelo usurio aparea
no componente QRLABEL chamado QRLORDEM, devemos colocar o cdigo abaixo
no evento BEFORE PRINT da banda PAGEHEADER, mas porque? Devido ao fato do
componente esta contido na banda PAGEHEADER e que o texto s pode ser
modificado antes da banda ser impressa.
//codigo do evento BeforePrint da banda PageHeader
procedure TfrmQR_Regioes.PageHeaderBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
//codigo para mostrar a ordem de impressao escolhida pelo usuario
qrlOrdem.Caption := frmRel_Regioes.RadioGroup1.Items.Strings[
frmRel_Regioes.RadioGroup1.itemIndex];
end;
Pgina 104 de 108
Mark Juliani
Exerccios
Montar os formulrios de Filtro de Relatrio e Relatrios de Pases, Estados e
Cidades.
9.6)
Relatrios Agrupados
Como exemplo, vamos pegar o nosso relatrio de regies e agrupa-lo por letra
Mark Juliani
Vamos agora colocar algum texto para aparecer no inicio de cada grupo, para
isto, basta colocar os componentes desejados dentro da banda QRGROUP.
Mark Juliani
Mark Juliani