Você está na página 1de 41

Criando uma apli

ao om Delphi 7
Prof. Mar elo C. Mussel
5 de agosto de 2012

Apostila Delphi 7

Sumrio
1 Introduo

2 Organizando a apli ao

3 Ban o de Dados

3.1
3.2

O DER - Diagrama de Entidade e Rela ionamentos


Utilizando o IBExpert para riar o Ban o de Dados
3.2.1 Criando o BD da apli ao . . . . . . . . .
3.2.2 Criando as Tabelas . . . . . . . . . . . . . .
3.2.3 Criao das Chaves Estrangeiras . . . . . .
3.2.4 S ript SQL . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

DataModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Conexo om o SGBD . . . . . . . . . . . . . . . . . . . . . . . .
Criando a interfa e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inserindo os omponentes para edio dos dados . . . . . . . . . . . . . .
Codi ando o boto Sair . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ajustando a ini ializao da apli ao . . . . . . . . . . . . . . . . . . .
Trabalhando om ClientDataSet . . . . . . . . . . . . . . . . . . . . . . .
Controlando os botes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tela Cadastro de CDs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Trabalhando om ampos autoin rement . . . . . . . . . . . . . . . . . .
Ajustando a ini ilializao da apli ao . . . . . . . . . . . . . . . . . . .
Clusula Try - Ex ept - Finally . . . . . . . . . . . . . . . . . . . . . . .
4.11.1 Try - Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.2 Try - Ex ept . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Codi ando o Boto Novo para as abas Estilo, Artista e Msi a . . . . .
4.12.1 Entendendo o digo . . . . . . . . . . . . . . . . . . . . . . . . .
Codi ando o Boto Salvar para as abas Estilo, Artista e Msi a . . . .
4.13.1 Entendendo o digo . . . . . . . . . . . . . . . . . . . . . . . . .
Ajustando o omponente dbNavigator . . . . . . . . . . . . . . . . . . .
Implementando a funo de pesquisa tabela Musi a . . . . . . . . . . .
4.15.1 Fun o para formatao da exibio do ampo digo da msi a
4.15.2 Realizando a onsulta no BD . . . . . . . . . . . . . . . . . . . .
4.15.3 Evento On li k boto Pesquisa . . . . . . . . . . . . . . . . . . .
4.15.4 Entendendo o digo . . . . . . . . . . . . . . . . . . . . . . . . .
Codi ao do boto Novo CD . . . . . . . . . . . . . . . . . . . . . . .
4.16.1 Entendendo o digo . . . . . . . . . . . . . . . . . . . . . . . . .
Boto Salvar CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prevenindo erros que podem o orrer em tempo de exe uo . . . . . . .
Implementando o boto editar . . . . . . . . . . . . . . . . . . . . . . . .
Implementando o boto ex luir . . . . . . . . . . . . . . . . . . . . . . .
Implementando o boto an elar . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

4 A Apli ao
4.1

4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15

4.16
4.17
4.18
4.19
4.20
4.21

5 Gerador de Relatrios
5.1
5.2
5.3

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

Fortes Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Criando o Relatrio para a Tabela de Estilos . . . . . . . . . . . . . . . . . . . . . . .
Implementando o Boto Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
4
5
6
7

10

10
10
13
16
19
19
19
20
21
23
23
23
24
24
25
25
25
26
28
28
28
29
31
31
31
32
33
33
34
36
38

39
39
40
41

Apostila Delphi 7

Introduo

Nos aptulos a seguir, riaremos uma apli ao om o objetivo de atalogar Cds. Para desenvolver
nosso Sistema de Cadastro de Cds, utilizaremos o Delphi 7, SGBD Firebird e gerador de relatrios
Fortes Report.

Organizando a apli ao

Crie uma pasta em seu dis o lo al : om o nome de CadastroCDS.


Dentro da pasta re m riada, rie as seguintes subPastas: \Ban oDados e \Programa.
O objetivo organizarmos onde  ar o Ban o de Dados e onde  aro nossos arquivos de digo.

Ban o de Dados

3.1 O DER - Diagrama de Entidade e Rela ionamentos


Figura 1: Diagrama de Entidade e Rela ionamentos

Para este sistema seguiremos o seguinte prin pio:


Cada CD ter um ni o estilo, e ada estilo poder perten er a vrios CDs (1:N)
Cada CD ter um ni o artista, e ada artista poder perten er a vrios CDs (1:N)
Cada CD poder ter uma ou vrias msi as, e ada msi a poder perten er a um ou vrios CDs
(N:N)

3.2 Utilizando o IBExpert para riar o Ban o de Dados


IBExpert uma ferramenta para administrao de ban os de dados Interbase e Firebird.
Permite riar e geren iar usurios e tabelas.
A verso gratuita para testes. Caso tenha interesse em obter a verso ompleta, dirija-se ao site
o ial da IBExpert e adquira o geren iador. Com IBExpert possvel: analisar dados, opiar objetos
de Ban os de Dados, utilizar ferramentas de SQL, omparar Ban os de Dados ou tabelas de Ban os

Apostila Delphi 7

de Dados, bem omo a opo de Database designer, para riar tabelas.


Obtenha a verso de Testes nesse link: http://ibexpert.net/ibe/index.php?n=Main.DownloadFree
Sua Instalao bem simples, no havendo ne essidade de detalhamento.

3.2.1 Criando o BD da apli ao


Abra o IBExpert e sele ione riar novo Ban o de Dados:

Figura 2: IbExpert - Criao do Ban o de Dados

Preen ha os ampos onforme a gura: 2

Figura 3: IbExpert - Registrando o Ban o de Dados

A seguir registre o Ban o de Dados, onforme gura 3

Apostila Delphi 7

3.2.2

Criando as Tabelas

Conforme a gura 4, lique om o boto direito em Tables e preen ha os ampos:

Figura 4: IbExpert - Criao das tabelas

Para os ampos  have primrias de ada tabela, usaremos o re urso auto-in remento do SGBD.
Para isto sele ione o ampo AutoIn na linha orrespondente ao Cod_Estilo, e o IBExpert abrir
a tela para riao do Generator e da trigger responsveis pelo in remento automti o de nossa
have primria. Figura: 5

Figura 5: IbExpert - Criao do ampo om AutoIn remento

Complemente a riao da tabela om o ampo des _estilo Figura: 6, e onrme a riao da


tabela atravs do ommit. Figura: 7
Crie as demais tabelas, seguindo os passos des ritos nesta seo.
A riao das (FKs) - Chaves estrangeiras, ser des rito a seguir.

Apostila Delphi 7

Figura 6: IbExpert - Criao dos ampos

Figura 7: IbExpert - Commit

3.2.3

Criao das Chaves Estrangeiras

A utilizao das haves estrangeiras, que nos permitem estabele er o rela ionamento entre as
tabelas do nosso BD.
O IBExpert fa ilita nosso trabalho para a riao destes rela ionamentos. Para isto, om a tabela
sele ionada, a essaremos a aba Constraints - Foreign Keys, Figura: 8

Apostila Delphi 7

Figura 8: IbExpert - Foreign Keys

3.2.4

S ript SQL

Caso prera exe utar o s ript, diretamente no Ibexpert, basta a essar a opo Tools - S ript Exe utive e exe ute o digo abaixo.
/******************************************************************************/
/* Generated by IBExpert */
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES NONE;
SET CLIENTLIB 'C:\Program Files\Firebird\Firebird_2_1\bin\fb lient.dll';
CREATE DATABASE 'C:\CadastroCDs\Ban oDados\CadastroCDs.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET NONE;
/******************************************************************************/
/* Generators */
/******************************************************************************/
CREATE GENERATOR GEN_ARTISTA_ID;
SET GENERATOR GEN_ARTISTA_ID TO 0;
CREATE GENERATOR GEN_CD_ID;
SET GENERATOR GEN_CD_ID TO 0;
CREATE GENERATOR GEN_ESTILO_ID;
SET GENERATOR GEN_ESTILO_ID TO 0;
CREATE GENERATOR GEN_MUSICA_ID;
SET GENERATOR GEN_MUSICA_ID TO 0;

Apostila Delphi 7

/******************************************************************************/
/* Tables */
/******************************************************************************/
CREATE TABLE ARTISTA (
COD_ARTISTA INTEGER NOT NULL,
NOME_ARTISTA VARCHAR(100) NOT NULL
);
CREATE TABLE CD (
COD_CD INTEGER NOT NULL,
TITULO VARCHAR(100) NOT NULL,
COD_ESTILO INTEGER NOT NULL,
COD_ARTISTA INTEGER NOT NULL
);
CREATE TABLE CD_MUSICA (
COD_CD INTEGER NOT NULL,
COD_MUSICA INTEGER NOT NULL
);
CREATE TABLE ESTILO (
COD_ESTILO INTEGER NOT NULL,
DESC_ESTILO VARCHAR(50) NOT NULL
);
CREATE TABLE MUSICA (
COD_MUSICA INTEGER NOT NULL,
NOME_MUSICA VARCHAR(100) NOT NULL
);
/******************************************************************************/
/* Primary Keys */
/******************************************************************************/
ALTER TABLE ARTISTA ADD CONSTRAINT PK_ARTISTA PRIMARY KEY (COD_ARTISTA);
ALTER TABLE CD ADD CONSTRAINT PK_CD PRIMARY KEY (COD_CD);
ALTER TABLE ESTILO ADD CONSTRAINT PK_ESTILO PRIMARY KEY (COD_ESTILO);
ALTER TABLE MUSICA ADD CONSTRAINT PK_MUSICA PRIMARY KEY (COD_MUSICA);
/******************************************************************************/
/* Foreign Keys */
/******************************************************************************/
ALTER TABLE CD ADD CONSTRAINT FK_CD_1 FOREIGN KEY (COD_ESTILO) REFERENCES ESTILO (COD_ESTILO);
ALTER TABLE CD ADD CONSTRAINT FK_CD_2 FOREIGN KEY (COD_ARTISTA) REFERENCES ARTISTA (COD_ARTISTA);
ALTER TABLE CD_MUSICA ADD CONSTRAINT FK_CD_MUSICA_1 FOREIGN KEY (COD_CD)

Apostila Delphi 7

REFERENCES CD (COD_CD);
ALTER TABLE CD_MUSICA ADD CONSTRAINT FK_CD_MUSICA_2 FOREIGN KEY (COD_MUSICA)
REFERENCES MUSICA (COD_MUSICA);
/******************************************************************************/
/* Triggers */
/******************************************************************************/
SET TERM ;
/******************************************************************************/
/* Triggers for tables */
/******************************************************************************/
/* Trigger: ARTISTA_BI */
CREATE TRIGGER ARTISTA_BI FOR ARTISTA
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new. od_artista is null) then
new. od_artista = gen_id(gen_artista_id,1);
end

/* Trigger: CD_BI */
CREATE TRIGGER CD_BI FOR CD
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new. od_ d is null) then
new. od_ d = gen_id(gen_ d_id,1);
end

/* Trigger: ESTILO_BI */
CREATE TRIGGER ESTILO_BI FOR ESTILO
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new. od_estilo is null) then
new. od_estilo = gen_id(gen_estilo_id,1);
end

/* Trigger: MUSICA_BI */
CREATE TRIGGER MUSICA_BI FOR MUSICA
ACTIVE BEFORE INSERT POSITION 0
as
begin

Apostila Delphi 7

10

if (new. od_musi a is null) then


new. od_musi a = gen_id(gen_musi a_id,1);
end

SET TERM ; 

A Apli ao
Ini ie o Delphi, e om uma nova apli ao em tela vamos salvar nosso projeto.

Salve o projeto e a primeira unit na pasta riada: :\CadastroCDS\Programa om os nomes Uprin ipal.pas e CadastroCds.dpr.
Para fazermos nossa apli ao ter a esso ban o de dados, o Delphi possui um objeto hamado
DataModule.

4.1 DataModule
O que um DataModule?
Os objetos do tipo DataModule servem omo um repositrio para o armazenamento de omponentes no-visuais de a esso a ban os de dados, permitindo que estes sejam a essados pelos formulrios
da apli ao, entralizando o a esso a dados.
7.

Para riar um Data Module, vo deve sele ionar o item New/Data Module do menu File do Delphi
Altere a propriedade Name deste DataModule para dmPrin ipal.

Sele ione o item Save as, do menu File, e salve a unidade de digo asso iada a este DataModule
om o nome UdmPrin ipal.pas.

4.1.1

Conexo om o SGBD

no
Na aba DBExpress insira um omponente SQLConne tion
DataModule. Altere sua propriedade name para Conexao.
D um duplo- lique no omponente, e na tela que se abrir ajuste as propriedades onforme a gura:
9
Em Conne tion Name sele ione a opo IBConne tion, em Database informe o aminho ompleto do
nosso BD CadastroCds.fdb. Clique OK para onrmar.
Pre isamos ajustar outras duas propriedades do nosso objeto SQLConne tion:
Mude a propriedade LoginPrompt para false e VendorLib para fb lient.dll.

Apostila Delphi 7

11

Figura 9: SQLConne tion

Agora insira um omponente SQLQuery,


tambm da aba
DBExpress.
Altere sua propriedade name para qryMusi a, a propriedade SQLConne tion para onexao e na propriedade SQL lique sobre os trs pontinhos e ir abrir ento a tela para riarmos nosso digo SQL.
gura: 10

Figura 10: SQLConne tion

Nessa tela, iremos inserir o digo de a esso nossa tabela Musi a.


Digite:
Sele t * from Musi a
E lique em OK.
Para testar a onexo om o Ban o de Dados, altere a propriedade A tive do nosso SQLQuery para
True. Se algo no estiver orreto, ser exibida uma mensagem de erro, aso ontrrio, a propriedade
 ar setada omo verdadeiro.
Altere novamente a propriedade a tive para false, e a mantenha assim.
Insira agora um omponente DataSetProvider, da paleta DataA ess:

Apostila Delphi 7

12

Sua Funo prin ipal de prover os dados ao ClientDataSet, (Componente que iremos utilizar em
seguida!!) e tambm apli ar as atualizaes no servidor de ban o de dados.
No modelo Cliente/Servidor, ele estar no mesmo lo al (apli ao) que o ClientDataSet, j no modelo
multi amadas, poderia estar em outra apli ao (juntamente om seu DataSet), em um servidor ex lusivo, no qual faramos o a esso remotamente.
Vamos alterar sua propriedade name para prvMusi a, e a propriedade DataSet para qryMusi a.
Para podermos a essar os ampos da tabela Musi a, iremos inserir um omponente ClientDataSet,
tambm lo alizado na aba DataA ess.
Ajustaremos sua propriedade name para dsMusi a e a propriedade ProviderName para prvMusi a.
D um duplo- lique no omponente ClientDataSet, e na janela que se abre, lique om o boto
direito do mouse e es olha a opo ?add all elds?. Pronto, J temos a onexo tabela Musi a
preparada.
Siga os passos detalhados a ima, e ongure a onexo s demais tabelas do nosso Cadastro de CDs.

Figura 11: Data Module

Apostila Delphi 7

13

4.2 Criando a interfa e


Sele ione o frmPrin ipal e ajuste as seguintes propriedades:
Height - 492
Width - 830
Position - poDesktopCenter
Caption - Cadastro de Cds
BorderI ons - biMaximize - False
Insira um omponente panel (aba standart) e ajuste as seguintes propriedades:
Caption - Dever  ar em bran o
Align - albottom
Height - 74
Width - 822
Name: pnlBotoes
insira outro omponente panel (aba standart) e ajuste as seguintes propriedades:
Caption - Dever  ar em bran o
Align - al lient
Name: pnlPrin ipal
sobre o pnlPrin ipal insira um omponente PageControl (aba Win32) e ajuste as seguintes
propriedades:
Align - al lient
Name - pg Prin ipal
Cli ando om o boto direito sobre o pg Prin ipal es olha a opo New Page .
Observe que no Obje t Inspe tor estar sele ionado o omponente TabSheet1 do tipo TtabSheet.
Ajuste as seguintes propriedades deste omponente:
Name - tsEstilo
Caption - &Estilos
Clique novamente om o boto direito, es olha a opo New Page . E om o omponente TabSheet1
sele ionado, Ajuste as seguintes propriedades:
Name - tsArtista
Caption - &Artistas
Novamente lique om o boto direito, es olha a opo New Page . E om o omponente TabSheet1
sele ionado, Ajuste as seguintes propriedades:
Name - tsMusi a
Caption - &Msi as
E pela ltima vez, lique om o boto direito, es olha a opo New Page . E om o omponente
TabSheet1 sele ionado, Ajuste as seguintes propriedades:
Name - tsCDs
Caption - &Cds
Sobre o pnlBotoes , insira um omponente DBNavigator (aba DataControls) e ajuste as propriedades:
Name - dbnCadastros
VisibleButtons:

Apostila Delphi 7

14

nbFirst - True;
nbPrior - True;
nbNext - True;
nbLast - True;
nbInsert - False;
nbDelete - False;
nbEdit - False;
nbPost - False;
nbCan el - False;
nbRefresh - False;
Height - 41
Width - 224
Left - 22
Top - 15
Ainda sobre o pnlBotoes , insira 07 (sete) omponentes bitbtn (aba additional) e ajustes as propriedades:
BitBtn1:
Name - btnNovo
Caption - &Novo
Heigth - 41
Width - 75
Left - 246
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\FILENEW.bmp
BitBtn2:
Name - btnEditar
Caption - E&ditar
Heigth - 41
Width - 75
Left - 324
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\EDIT.bmp
BitBtn3:
Name - btnEx luir
Caption - E&x luir
Heigth - 41
Width - 75
Left - 402
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\TRASH.bmp

Apostila Delphi 7

15

BitBtn4:
Name - btnSalvar
Caption - &Salvar
Heigth - 41
Width - 75
Left - 479
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\FLOPPY.bmp
BitBtn5:
Name - btnCan elar
Caption - Can e&lar
Heigth - 41
Width - 75
Left - 556
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\RETRY.bmp
BitBtn6:
Name - btnRelatorio
Caption - Rela&torio
Heigth - 41
Width - 75
Left - 634
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\REPORT.bmp
BitBtn7:
Name - btnSair
Caption - Sai&r
Heigth - 41
Width - 75
Left - 711
Top - 15
Glyph - C:\Arquivos de programas\Arquivos omuns\Borland Shared\Images\Buttons\DOOROPEN.bmp
Neste momento sua tela deve se pare er om a gura 12:

Apostila Delphi 7

16

Figura 12: Tela do Sistema

4.3 Inserindo os omponentes para edio dos dados


Com a unit uPrin ipal.pas sele ionada, a ione o menu File - Use Unit. Marque a UdmPrin ipal.pas
e onrme. Isto possibilitar que tenhamos a esso aos omponentes inseridos em nosso Data Module.
Com o frmPrin ipal ativo, inserir 5 ( in o) omponentes DataSour e (aba: DataA ess)
e ajustar as seguintes propriedades:
DataSour e1
Name: dsEstilo
DataSet: dmPrin ipal. dsEstilo
DataSour e2
Name: dsArtista
DataSet: dmPrin ipal. dsArtista
DataSour e3
Name: dsMusi a
DataSet: dmPrin ipal. dsMusi a
DataSour e4
Name: dsCDS
DataSet: dmPrin ipal. dsCDS
DataSour e5
Name: dsCDMusi a
DataSet: dmPrin ipal. dsCDMUSICA
Em ada TabSheet (tsEstilo, tsArtista, tsMusi a e tSCds) iremos inserir os omponentes responsveis pela ligao om ada ampo de nossas tabelas:

Apostila Delphi 7

17

Com a TabSheet tsEstilo sele ionada, insira dois omponentes DBEdit (Aba: DataControls)
e dois Labels (Aba: Standart)
e ajuste as propriedades omo segue:
label1:
Name: LBLCodigo
Caption: Cdigo:
label2:
Name: LBLDes ri ao
Caption: Des rio:
DBEdit1:
Name: DbCodEstilo
DataSour e: dsEstilo
DataField: COD_ESTILO
DBEdit2:
Name: DbDes Estilo
DataSour e: dsEstilo
DataField: DESC_ESTILO
Repita o pro edimento para as TabSheets tsArtista e tsMusi a, fazendo as ligaes om seus respe tivos DataSour es.

Figura 13: Tela Prin ipal

Apostila Delphi 7

18

Apostila Delphi 7

19

4.4 Codi ando o boto Sair


D um duplo lique no boto, e a res ente o seguinte digo:

Figura 14: Cdigo btnSair

4.5 Ajustando a ini ializao da apli ao


Como vimos no aptulo anterior nossa onexo om o Ban o de Dados a onte er atravs dos
omponentes inseridos em nosso DataModule.
Nosso projeto se onstitui de um formulrio - que abrigar os omponentes para insero e edio
dos dados em nosso ban o, e de um data module, que far a onexo om o BD.
Para que no o orra um erro em tempo de exe uo, o data module deve ser o primeiro a ser
instan iado em memria.
Ajustaremos isto sele ionando a opo Proje t - Options na aba Forms.

Figura 15: Proje t Options

Repare no lado esquerdo desta tela que o Delphi mostra uma aixa intitulada Auto-Create Forms,
e provavelmente dever estar mostrando o frmPrin ipal na primeira linha e o dmPrin ipal na segunda.
Isto signi a que o Formulrio ser riado antes do Data Module, o que poder provo ar um erro em
tempo de exe uo.
Clique em dmPrin ipal e arraste para ima, deixando-o na primeira linha, e lique OK.

4.6 Trabalhando om ClientDataSet


Uma boa prti a de programao ao trabalharmos om os omponentes da paleta DBExpress, a
de no manipularmos diretamente o omponente TClientDataSet.

Apostila Delphi 7

20

Criaremos ento variveis que sero utilizadas para isto.


O primeiro passo, de lararmos a unit DBClient, na lusula Uses do nosso frmPrin ipal, onforme
imagem abaixo.
Figura 16: de larando DBClient

Feito isto, iremos de larar as variveis para manipulao dos ClientDataSets, na seo Publi :
Figura 17: Variveis TClientDataSet

Sele ione o Form - frmPrin ipal, no Obje t Inspe tor, na aba Events - D lique duplo em On-

Create .

Faremos ento a atribuio dos ClientsDataSets s suas respe tivas variveis:


Figura 18: FormCreate

4.7 Controlando os botes


Como boa prti a do estudo de interfa es, deveremos previnir possveis erros do usurio.
Faremos ento um ontrole sobre os botes.
Ao li ar-se no boto Novo, Editar ou Ex luir, s manteremos habilitadas as opes para Salvar ou
Can elar, evitando assim que o usurio provoque um erro em tempo de exe uo, aso tentasse mudar
a funo durante o pro edimento. Ex: de inserir (novo) para editar!!
Aps a onrmao (btnSalvar) ou a desistn ia (btnCan elar), deveremos habiitar novamente todos os botes.

Apostila Delphi 7

21

Para isto utilizaremos a propriedade enabled de ada boto.


Faremos ento uma pro edure para este evento.
De lare a pro edure HabilitaDesabilitaBotes e em seguida te le: CRTL+SHIFT+C, e o Delphi
se en arregar de riar a pro edure.

Figura 19: De larao da Pro edure

No Corpo do pro edimento es reva o seguinte tre ho de digo:

Figura 20: Cdigo da Pro edure

O que zemos neste tre ho de digo foi utilizar o operador ?not? - negao, que inverte o valor
da propriedade ou varivel o qual atribuido.
Desta forma poderemos utilizar este pro edimento em todos os botes, pois ao ini iar o sistema,
quando todos os botes estiverem habilitados, quando o usurio li ar nos botes Novo, Editar ou
Ex luir, estaremos desabilitando os botes. Ao li ar sobre os botes Salvar ou Can elar, faremos
novamente a hamada a este pro edimento, que far o pro edimento inverso, habilitando os botes.

4.8 Tela Cadastro de CDs


Partiremos agora para a riao da tela de adastro dos Cds.
Conforme a regra que denimos, o rela ionamento entre as tabelas CD e MUSICA de N:N, pois
um CD pode ter uma ou vrias msi as e uma msi a pode fazer parte de um ou mais Cds.
Observando os prin pios estudados em IHM, riaremos um me anismo que possibilite ao usurio,
onsultar o a ervo previamente adastrado na tabela MUSICA, sele ionando ento as que integram o
CD.
Esta pesquisa deve permitir que seja informada apenas uma parte do ttulo da msi a, e tambm
deve possibilitar mltipla seleo.
A tela para Cadastro de Cds dever onter os seguintes omponentes:

Apostila Delphi 7

objeto Tlabel - Aba Standart


Caption = 'Cdigo:'
objeto TLabel - Aba Standart
Caption = 'Ttulo:'
objeto TLabel - Aba Standart
Caption = 'Estilo'
objeto TLabel - Aba Standart
Caption = 'Artista'
objeto TLabel - Aba Standart
Caption = 'Informe o ttulo da msi a:'
objeto TDBEdit - Aba Data Controls
Name = dbCodigoCD
DataSour e = dsCDS
DataField = 'COD_CD'
objeto TDBEdit - Aba Data Controls
Name = dbTituloCD
DataSour e = dsCDS
DataField = 'TITULO'
objeto TDBLookUpComboBox - Aba Data Controls
Name = dbSele ionaEstilo
DataSour e - dsCDs
DataField - Cod_Estilo
ListSour e - dsEstilo
ListField - Des _Estilo
KeyField - Cod_Estilo
objeto TDBLookUpComboBox - Aba Data Controls
Name = dbSele ionaArtista
ataSour e - dsCDs
DataField - Cod_Artista
ListSour e - dsArtista
ListField - Nome_Artista
KeyField - Cod_Artista
objeto TEdit - Aba Standart
Name = edtPesquisaMusi a
Text = vazio
objeto TBitBtn - Aba Additional
Name = btnPesquisa
Caption = 'Pesquisar'
TabOrder = 5
Glyph = Find.bmp
obje t TListBox - Aba Standart
Name = LstMusi as

22

Apostila Delphi 7

23

MultiSele t = True
obje t TBitBtn - Aba Additional
Name = btnConrma
Caption = 'Conrma'
Sua tela dever ter a seguinte aparn ia:

Figura 21: Tela Cadastro de CDs

4.9 Trabalhando om ampos autoin rement


Como trabalharemos om ampos autoin rement em nossas Chaves Primrias, pre isaremos garantir que nenhum valor seja digitado nos ampos orrespondentes aos digos de ada tabela: Estilo,
Artista, Musi a e CD.
Para isto deveremos setar a propriedade Read Only para True, de ada um dos omponentes
DBEdit rela ionados.

4.10 Ajustando a ini ilializao da apli ao


O primeiro passo, preparar o DataSet para manipular os dados. Faremos isto abrindo os DataSets no evento OnCreate do Form Prin ipal.
Alm disto tambm estamos setando a aba Estilos omo prin ipal e ligando o omponente DBNavigator ao DataSour e orrespondente.

4.11 Clusula Try - Ex ept - Finally


A lusula Try usada para ini iar um blo o que pode onter possveis erros. Se um erro o orrer,
o programa no ser terminado. Instantaneamente, o Try deixa de ser exe utado e d lugar a lusula

Apostila Delphi 7

24

Figura 22: DBEdit's

Figura 23: Evento Form Create

Ex ept ou Finally. Try pode ser usado em inmeros tre hos do digo, podendo at ser aninhado.
A lusula Ex ept usada para ini iar um blo o aso uma ex eo o orra em Try. Se o blo o que
estiver em Ex ept onter a ex eo o programa no ser terminado.
A lusula Finally usada para ini iar um blo o havendo problemas ou no om a lusula Try.

4.11.1

Try - Finally

Nos tre hos de digo Try - Finally, a lusula Finally garante que todo o digo ontido em Finally ser exe utado independente ou no de problemas no digo exe utado dentro da lusula Try.
Em Try - Finally, Finally geralmente usado para permitir limpeza de re ursos alo ados anteriormente.

4.11.2

Try - Ex ept

Nos tre hos de digo Try - Ex ept, somente se a lusula Try gerar uma ex eo que a lusula
Ex ept ser exe utada. Ex ept usado para realizar ao alternativa quando algo inesperado o orrer
em Try. A lusula Ex ept por si s, no pode determinar o tipo de erro en ontrado.

Apostila Delphi 7

25

4.12 Codi ando o Boto Novo para as abas Estilo, Artista e Msi a
Com Duplo lique no boto novo, faremos a seguinte implementao:

Figura 24: Evento OnCli k Boto Novo

4.12.1

Entendendo o digo

O primeiro passo, a hamada da funo HabilitaDesabilitaBotoes, garantindo que nenhum outro


boto ser li ado durante o pro edimento de insero que no o boto Salvar ou Can elar.
A seguir ini iamos um blo o Try - Ex ept, testamos qual aba est ativa, para sabermos em qual
tabela iremos trabalhar.
Colo a-se o fo o no ampo Des rio e feito um Append na tabela rela ionada.
Append

- Insero de um novo registro ao nal da tabela.

4.13 Codi ando o Boto Salvar para as abas Estilo, Artista e Msi a
Com Duplo lique no boto salvar, faremos a seguinte implementao:

Apostila Delphi 7

26

Figura 25: Evento OnCli k Boto Salvar

4.13.1

Entendendo o digo

Testamos novamente qual a aba que est ativa;


Testamos se o ampo referente Des rio ou Nome esto diferentes de Vazio;
Em seguida atribuimos zeros ao ampo digo. Isto um re urso utilizado pois o ampo est
denido omo not null, e se no zermos isto o DataSet ir gerar um erro em tempo de exe uo
de que o ampo deve ter um valor;
A seguir utilizamos o mtodo Post (Gravar);
E o mtodo ApplyUpdates, que far que as alteraes sejam efetivamente  omitadas no BD. O
valor zero dentro do parenteses a quantidade de erros admitida.
A seguir fe hamos, abrimos e posi ionamos no ltimo registro para atualizar a tela e exibir os
dados que foram gravados;
Exibimos uma mensagem de que os dados foram gravados om su esso.

Complemente a odi ao testando as demais abas.

Apostila Delphi 7

27

Apostila Delphi 7

28

4.14 Ajustando o omponente dbNavigator


Outra funo ne essria a de setarmos o data sour e orreto, do nosso omponente de navegao
(as setinhas) a ada mudana de aba efetuada pelo usurio. Faremos isto no evento OnChange do
omponente PageControl:

Figura 26: Evento OnChange pg Prin ipal

4.15 Implementando a funo de pesquisa tabela Musi a


O objetivo agora possibilitar ao usurio sele ionar as msi as previamente adastradas, forne endo apenas uma parte do seu nome.
Aps a onsulta feita ao BD, iremos ento listar o resultado da nossa onsulta no listbox lstMusi as.
No momento que o usurio li ar em salvar, deveremos realizar a gravao da tabela CD_MUSICA,
responsvel pelo rela ionamento (N:N) entre as tabelas Msi a e CD.
Para Isto pre isaremos do Cdigo do CD, que estar sendo gerado neste momento, e dos digos
das msi as sele ionadas pelo usurio.
No temos omo determinar quantas onsultas sero feitas, nem quantas msi as sero sele ionadas,
ento riaremos um array que armazenar o digo da msi a es olhida pelo usurio, para posterior
gravao da tabela de rela ionamento.
Exibiremos ento, em nosso listBox, o digo da Msi a e seu respe tivo nome adastrado. Faremos uma formatao do ampo digo, para que todos sejam exibidos om a mesma quantidade de
ara teres, fa ilitando o trabalho na hora de obter o digo sele ionado pelo usurio.

4.15.1

Fun o para formatao da exibio do ampo digo da msi a

De lare a funo Colo aZeros na seo private:

Figura 27: De larao da Funo Colo aZeros

Te le CRTL+ALT+C, que o Delphi ir riar o es opo para a funo, na seo implementation,


onde es reveremos o digo:

Apostila Delphi 7

Figura 28: Funo Colo aZeros

4.15.2

Realizando a onsulta no BD

A res ente ao DataModule, os omponentes Tquery, TdataSetProvider e T lientDataSet:

Figura 29: DataModule om os omponentes para fazer a bus a de msi as

Ajuste as seguintes propriedades:

Tquery:
Name: qryBus aMusi as
SQLConne tion: Conexao
SQL: sele t * from musi a
TdataSetProvider:
Name: prvBus aMusi a
DataSet: qryBus aMusi as
T lientDataSet:

29

Apostila Delphi 7

30

Name: dsBus aMusi as


ProviderName: prvBus aMusi as
D um duplo lique nesse omponente, lique om direito na rea bran a que surgiu e sele ione a
opo Add All Fields (CRTL + F).
A res ente seo Publi , as variveis que faro a esso aos demais DataSets:

Figura 30: De larao das variveis de manipulao dos DataSets

Complemente o evento OnCreate do nosso Form Prin ipal, fazendo s atribuies todos os DataSets Criados:

Figura 31: Complementando o Evento FormCreate

Apostila Delphi 7

4.15.3

31

Evento On li k boto Pesquisa


Figura 32: Evento OnCli k Boto Pesquisa

4.15.4

Entendendo o digo

lstMusi as.Clear: Estamos limpando o ontedo do listbox, para posteriormente es rever os


resultados da onsulta;
DsetBus aMusi as.Close: Fe hando o DataSet que far a onsulta tabela Musi a.
DmPrin ipal.qryBus aMusi as.SQL.Clear: limpando o digo SQL previamente formatado para
ajustar pesquisa;
dmPrin ipal.qryBus aMusi as.SQL.Add: Adi ionando o omando SQL ao omponente Tquery
sele t * from MUSICA where NOME_MUSICA like  % ' + edtPesquisaMusi a.text + ' %
 '); A res entamos uma ondio nossa onsulta, que trar omo resultado s msi as que
possurem, em qualquer parte de seu nome, o ontedo digitado em edtPesquisaMusi a.
DsetBus aMusi a.Open: Carregamos o DataSet;
if not DsetBus aMusi as.isEmpty: Testamos se nosso DataSet no est vazio, ou seja, no existem
msi as adastradas om a palavra informada pelo usurio.
DsetBus aMusi as.First: Posi ionamos no primeiro registro da DataSet;
while not DsetBus aMusi as.eof do: Faa enquanto no for o m do DataSet
lstMusi as.Items.Add: Es revemos em nosso listBox, hamando a funo de formatao do Cdigo (Colo aZeros), passando omo parmetros o ampo COD_Musi a e quantidade de dgitos
desejados (5) e a res ido do Nome da Musi a.
DsetBus aMusi as.Next: passa para o prximo registro do DataSet.

4.16 Codi ao do boto Novo CD


Na seo Publi omplemente as de laraes, riando o array que armazenar as msi as sele ionadas e a varivel para determinar o seu tamanho:

Apostila Delphi 7

32

Evento OnCli k do Boto Conrma

4.16.1

Entendendo o digo

O lao for ir per orrer o listBox (lstMusi as), testando se a linha em questo est sele ionada,
aso armativo, gravamos o digo da Msi a no array.
Musi asSele ionadas[Tamanho:=StrToInt( opy(lstMusi as.Items[i, 5, 1));
O array Musi asSele ionadas, na posio tamanho re ebe as in o primeiras posies do ontedo
do listBox.

Apostila Delphi 7

33

4.17 Boto Salvar CD


No pro edimento de salvar o CD, primeiro gravaremos os dados da tabela CD. Em seguida, de
posse do COD_CD re m gravado, per orrermos o array Musi asSele ionadas gravando a tabela
CD_Musi a. Para isto riaremos uma query que ir retornar o digo do ltimo CD gravado.
Em nosso DataModule, insira um omponente Tquery (DBExpress), e altere as seguintes propriedades:
Name: qryUltimoCD
SQLConne tion: Conexao
SQL: sele t max(COD_CD) as UltimoCD from CD
De lare as seguintes variveis lo ais ao evento OnCli k do boto Salvar

i: servir para ontrolar o lao for; CodCdAtual: re eber o digo do CD re m gravado.

4.18 Prevenindo erros que podem o orrer em tempo de exe uo


Uma medida que deve ser adotada, visando garantir que os omponentes responsveis pela onexo om nosso ban o de dados, mantenham-na ativa durante todo o fun ionamento do nosso sistema,
utilizaremos o evento OnGetTableName, de ada omponente TdataSetProvider para atribuir o nome
da tabela o qual ele se one ta.

Apostila Delphi 7

34

Em nosso DataModule, sele ione o omponente prvMusi a e na events de lique duplo em OnGetTable Name:

4.19 Implementando o boto editar


D um duplo lique em btnEditar e es reva o seguinte tre ho de digo:

Apostila Delphi 7

35

Apostila Delphi 7

36

4.20 Implementando o boto ex luir


Para o fun ionamento do boto ex luir, nas abas Estilo, Artista e Musi a, deveremos nos erti ar
que no existe nenhum registro gravado na tabela CD, que aponte para os mesmos.
Pra isso riaremos uma onsulta. Insira em seu DataModule, um Componente Tquery e ajuste sua
propriedade name para qryLo alizaDependen ias; a propriedade SQLConne tion para Conexao e
digite o seguinte digo na opo SQL:  sele t * from CD.
Para deleo de algum CD, deveremos veri ar na tabela CDMUSICA, responsvel pelo rela ionamento N:N entre CD e MUSICA, se existe registro. Caso armativo, ex luiremos esses antes de ex luir
o CD.
D um duplo lique no boto delete e implemente o digo:

Apostila Delphi 7

37

Apostila Delphi 7

4.21 Implementando o boto an elar


Aps um duplo lique em btnCan elar, es reva as seguintes linhas de digo:

38

Apostila Delphi 7

39

Gerador de Relatrios

5.1 Fortes Report


Para nalizar nosso sistema partiremos para a riao dos relatrios. Uma ex elente ferramenta
para gerao dos relatrios o Fortes Report. Veremos agora omo pro eder a instalao:
Vo poder baix-lo diretamente do site do fabri ante: www.fortesreport. om.br/
Des ompa te os arquivos do Fortes na pasta C:\Arquivos de programas\Borland\Delphi7\Proje ts.
Abra o Delphi e fe he a apli ao orrente no menu le - Close all. A esse o menu Component - Install
Pa kages. Clique em Add e sele ione o arquivo RLReportProD7vl .bpl.
Para efeitos de agilidade na ompilao de um projeto, ao invs de adi ionarmos os arquivos .pas,
iremos inserir o aminho das .d us. Elas tem o mesmo fun ionamento do .pas, apenas om a diferena
de que o Delphi no pre isar ompilar todas as linhas de digo do omponente gerador de relatrios,
uma vez que os .d u j so arquivos ompilados. Abra ento o menu Tools e em seguida Environment Options. Na aba Library, lique em Browse ou ... na linha Library path. Abrir a tela
Dire tories ento insira o aminho das .d us do Fortes e lique em Add.

Apostila Delphi 7

40

5.2 Criando o Relatrio para a Tabela de Estilos


V ao menu le - new - form.
Mude sua propriedade name para - frmRelatorioEstilos
Clique em le - Save All - salve a unit orrespondente ao nosso relatrio, na mesma pasta onde esto
os demais arquivos do sistema, om o nome relEstilos.pas.
Para que o relatrio tenha a esso s tabelas do nosso Ban o de Dados, pre isamos a essar o nosso
DataModule. Faremos isso adi ionando a unit orrespondente na lsula uses.
A esse le - use unit - e marque a opo: UdmPrin ipal.
Lo alize a aba Fortes Report, e adi ione o omponente RLReport
Sua tela dever  ar assim:

In lua um omponente TdataSour e da aba DataA ess. Ser o responsvel pela ligao om os
ampos que desejarmos imprimir. Ajuste sua proriedade name para dsRelEstilo e a propriedade DataSour e para dmPrin ipal. dsEstilo.
No Obje t Inspe tor sele ione o omponente RLReport e altere sua propriedade DataSet para dsEstilo.
Esse relatrio ser dividido nas seguintes bandas : Cabealho do Relatrio , Cabealho de Colunas do Detalhe e Detalhe.
Insira o omponente RLBand ( o 2 na aba Fortes Report), e ajuste as seguintes propriedades:
name: bndCabe alho
BandType: btHeader
Insira, dentro de bndCabe alho, um omponente RLLabel, e ajuste as seguintes propriedades:
Caption: Relatrio de Estilos
Font: Size: 16
Font: Style: fsBold: true
At o momento, nossa tela de riao do relatrio deve se pare er om essa:

Insira tambm em bndCabe alho um omponente RLSystemInfo e ajuste as seguintes propriedades:


Left: 532
Top: 10

Apostila Delphi 7

Info: itFullDate
Insira outro omponente RLBand e ajuste as seguintes propriedades:
name: bndCabe alhoDetalhe
BandType: btColumnHeader
Nesta banda insira dois omponentes RLLabel e ajuste as seguintes propriedades:
1) Caption: Cdigo Left: 10 Top: 10;
2) Caption: Des rio Left: 114 Top: 10;
Insira outro omponente RLBand e ajuste as seguintes propriedades:
name: bndDetalhe
BandType: btDetail
Nesta banda Detalhe, insira dois omponentes RLDBText e ajuste as seguintes propriedades:
1) Name: dbCodigo Left: 10 Top: 10;
2) Name: dbDes ri ao Left: 114 Top: 10;
Sele ione o Formulrio frmRelatorioEstilos - e d um duplo lique no evento OnCreate:

Em nosso Formulrio prin ipal, sele ione o menu le - Use Unit, e onrme a unit relEstilos.
Aps isso d duplo lique no boto Relatrios e insira o tre ho de digo:

5.3 Implementando o Boto Relatrio

Implemente as rotinas om os relatrios bsi os para as demais tabelas do nosso sistema.

41

Você também pode gostar