Вы находитесь на странице: 1из 28

Sociedade Educacional de Itapiranga - FAI Faculdades

Curso: GESTO DA TECNOLOGIA DA INFORMAO


Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:1

UTILIZANDO DELPHI + FIREBIRD + FIREDAC


EXEMPLO DE USO: TABLE e QUERY
(RAD Studio) Delphi: Ambiente de desenvolvimento de aplicativos multilinguagens, multidispositivos e com
uso de mltiplos bancos de dados.
Firebird: Banco de Dados relacional que oferece recursos ANSI SQL-99 que rodam no Linux, Windows e
plataformas Unix.
Firedac: Biblioteca de Acesso Universal a Dados para o desenvolvimento de aplicaes para mltiplos
dispositivos conectados a bancos de dados corporativos. Com sua poderosa arquitetura universal, a FireDAC
possibilita acesso direto, nativo e de alta velocidade do Delphi e do C++Builder a InterBase, SQLite, MySQL,
SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, DataSnap,
dentre outros.
Para o desenvolvimento do exemplo a seguir, foi adotado o RAD Studio XE5 e Firebird 2.5.
BANCO DE DADOS
Adotou-se auto incremento nos campos chave primria de cada tabela.
Na atividade, o intuito no apresentar as etapas
para criao do Banco de Dados. Parte-se da
premissa que o mesmo j tenha sido
previamente elaborado.
CONSERVACAO CHAR(1),
OBS VARCHAR(200),
CONSTRAINT PK_AUTOMOVEL PRIMARY KEY
(COD_AUTOMOVEL)
);

Figura 1 - Modelo ER
/*
/*
/*
/*
/*

------------------------------Project name: Trabalho GTI 1


Author: Andr Klunk
Script type: Database script
Created on: 2014-03-19 22:21

*/
*/
*/
*/
*/

CREATE GENERATOR GEN_AUTOMOVEL;


SET GENERATOR GEN_AUTOMOVEL TO 0;
CREATE GENERATOR GEN_MARCA;
SET GENERATOR GEN_MARCA TO 0;
CREATE GENERATOR GEN_CIDADE;
SET GENERATOR GEN_CIDADE TO 0;
CREATE TABLE MARCA (
COD_MARCA INTEGER NOT NULL,
NOME_MARCA VARCHAR(40) NOT NULL,
CONSTRAINT PK_MARCA PRIMARY KEY (COD_MARCA)
);
CREATE TABLE CIDADE (
COD_CIDADE INTEGER NOT NULL,
NOME_CIDADE VARCHAR(40) NOT NULL,
UF CHAR(2) NOT NULL,
CONSTRAINT PK_CIDADE PRIMARY KEY (COD_CIDADE)
);
CREATE TABLE AUTOMOVEL (
COD_AUTOMOVEL INTEGER NOT NULL,
COD_MARCA INTEGER,
MODELO VARCHAR(40) NOT NULL,
PLACA VARCHAR(10),
ANO_FABRICACAO INTEGER,

ALTER TABLE AUTOMOVEL ADD CONSTRAINT MARCA_AUTOMOVEL


FOREIGN KEY (COD_MARCA) REFERENCES MARCA
(COD_MARCA);
ALTER TABLE AUTOMOVEL ADD CONSTRAINT CIDADE_AUTOMOVEL
FOREIGN KEY (COD_CIDADE) REFERENCES CIDADE
(COD_CIDADE);
SET TERM ^ ;
CREATE TRIGGER TRG_MARCA1 FOR MARCA
BEFORE INSERT AS BEGIN
IF (NEW.COD_MARCA IS NULL) THEN NEW.COD_MARCA =
GEN_ID(GEN_MARCA, 1);
END ^
SET TERM ; ^
SET TERM ^ ;
CREATE TRIGGER TRG_CIDADE1 FOR CIDADE
BEFORE INSERT AS BEGIN
IF (NEW.COD_CIDADE IS NULL) THEN NEW.COD_CIDADE =
GEN_ID(GEN_CIDADE, 1);
END ^
SET TERM ; ^
SET TERM ^ ;
CREATE TRIGGER TRG_AUTOMOVEL1 FOR AUTOMOVEL
BEFORE INSERT AS BEGIN
IF (NEW.COD_AUTOMOVEL IS NULL) THEN
NEW.COD_AUTOMOVEL = GEN_ID(GEN_AUTOMOVEL, 1);
END ^
SET TERM ; ^

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:2

APLICAO DELPHI
Consideraes Iniciais:
- Pasta de Trabalho adotada: C:\Sistemas\Trab1_2014\ para os arquivos cdigo do Delphi.
- Pasta de trabalho adotada: C:\Sistemas\Trab1_2014\APP\ para o arquivo do Banco de Dados e
executvel.
Iniciando o Desenvolvimento:
- Criar uma nova Aplicao: File/New/VCL Forms Application Delphi
- Salvar como: - Unit: UnitPrincipal.pas
- Project: ProjetoTrab1_2014.dproj
Gerar o Executvel dentro da Pasta Pretendida:
Como o objetivo que o arquivo executvel seja compilado dentro da pasta C:\Sistemas\Trab1_2014\APP\,
devemos proceder da seguinte forma:
- Menu Project/Options: ser apresentada a tela demonstrada a Figura 2. No lado esquerdo, selecionar a
primeira opo (Delphi Compiler). Na parte direita, opo (Output directory), definir o path para gerao do
executvel.

Figura 2 - Definio do caminho para gerao do executvel

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

Formulrio Principal:
Hora de definir as propriedades do Formulrio Principal:
BorderIcons: biSystemMenu
BorderStyle: bsSingle
Caption: Trabalho 1 GTI FAI 2014
FormStyle: fsMDIForm

PG:3

KeyPreview: True
Name: frmPrincipal
Position: poMainFormCenter
WindowState: wsMaximized.

Figura 3 - Formulrio Principal

No Formulrio Principal Incluir:


- Incluir um MainMenu: Cadastro com as opes: Cidades, Marcas, Automveis.
- Incluir um ToolBar com os botes: Cidades, Marcas, Automveis, Fechar e um Separador .
- Incluir um ImageList e vincular tanto ao MainMenu, quanto a ToolBar. (Imagens disponveis).
- Incluir uma StatusBar com trs StatusPanels
o 1 StatusPanel: Largura 200; Text: Copyright Nome do Aluno (2014)
o 2 StatusPanel: Largura 150; Aligment: taCenter; (Text ir receber a data e hora atualizada)
o 3 StatusPanel: Aligment: taRightJustify; Receber no text a verso do Sistema.
- Timer: responsvel em atualizar a data e horrio na StatusBar.
o Cdigo: StatusBar1.Panels[1].Text := DateTimeToStr(Now);
Para informar a verso do Sistema, inicialmente haver a necessidade de utilizar uma funo especfica para
tal. Para facilitar as atividades, todas as funes a serem utilizadas nesse Artigo, foram agrupadas numa Unit
especfica, denominada RotinasGerais.pas.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:4

Importando uma Unit no Projeto:


Inicialmente deve-se copiar a Unit at a pasta na qual constam nossos arquivos fontes:
C:\Sistemas\Trab1_2014\. Feito esse procedimento, com nosso Projeto Aberto, basta adicionar a referida Unit
(RotinasGerais).
- Menu Project/Add to Project
Vinculando Units:
Com a Unit Rotinas Gerais adicionada ao projeto, basta
agora fazer com que a mesma seja visvel no formulrio
principal.
- Com o formulrio principal selecionado, menu File/Use
Unit.
- Selecionar na lista a Unit pretendida, depois OK.
Basta agora no Evento OnShow do Formulrio Principal,
invocar a funo GetBuildInfo, presente na Unit Rotinas
Gerais, e lanar o valor na StatusBar.
Cdigo: StatusBar1.Panels[2].Text := GetBuildInfo;
Figura 4 - Vincular Units

Utilizando o Data Module (Mdulo de Dados):


Data Module: trata-se de um container de componentes no visuais que geralmente so utilizados em
aplicaes de banco de dados e web. Em tempo de projeto (design time), um Data Module semelhante a um
Form, mas em tempo de execuo (run time) ele existe somente na memria. Imagine como se fosse um Form
invisvel no qual se pode incluir componentes invisveis da VCL do Delphi.
Para acrescentar um Data Module ao nosso projeto, cuja funo ser receber todos os componentes de acesso
e manipulao de dados, faa o seguinte:
- File/New/Other
- Na Janela que abre, no lado esquerdo selecione a
opo Delphi Files.
- Na parte central, basta clicar no item Data
Module.
- Com o Data Module inserido, Salve a Unit como
UnitDM.pas.
- Propriedade Name: DM

Figura 5 - Inserir Data Module

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:5

Componentes de Conexo ao Banco de Dados:


- Da Tool Palette (Paleta de Componentes) FireDAC. Adicione os components: FDConnection e
FDTransaction. (No Delphi XE4, os componentes correspondentes so: ADConnection e ADTransaction).
- Da Paleta FireDAC UI, adicione o componente FDGUIxWaitCursor. (No Delphi XE4, ADGUIxWaitCursor).
- Da Paleta FiredDAC Link, acione o componente FDPhysFBDriverLink. (No Delphi XE4, ADPhysIBDriverLink)
Passamos ento a configurar a conexo ao banco de dados, dando Clique Duplo sobre o componente
FDConnection (ADConnection).

Figura 6 - Configurao do componente FDConnection

- Em Driver ID, seleciona-se o SGBD. No nosso exemplo, adotamos o Firebird. Na Verso XE5 do Delphi,
usa-se o driver FB , j na verso XE4, faz-se necessrio o uso do driver IB . Ambos funcionaro da mesma
forma.
- Na opo Database, localiza-se o arquivo do Banco de Dados desejado. No exemplo:
C:\Sistemas\Trab1_2014\APP\BDTRAB1_2014.FDB
- Em User_Name o usurio padro do Firebird: SYSDBA (em maisculo).
- Em Password a senha padro: masterkey (em minsculo).
- Altere a propriedade LoginPrompt do componente FDConnection (ADConnection) para False;
OBS: Os demais componentes inseridos no necessitam de configuraes especficas.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:6

Componente de Acesso s Tabelas do Banco de Dados


O componente Table, da mesma forma como o componente Query, podem ser utilizados para acessar os
registros das tabelas do Banco de Dados. Para fins de produtividade, o componente Query o indicado uma
vez que no carrega todos os registros na memria. Vale lembrar que uma Query pode fazer a funo de um
Table, j o Table no pode fazer todas as funes de uma Query.
Imagine uma tabela em seu aplicativo com 50 mil registros, e voc tendo a necessidade de gravar mais um.
Usando um Table o processo vai carregar os 50 mil registros na memria e talvez o seu aplicativo d uma
congelada se estiver rodando numa rede. Se usar uma instruo Sql ("insert into.."), passada para uma Query,
o registro ser gravado e voc nem vai perceber
Utilizando o Table para conectar na tabela Marca
Da Paleta FireDAC, adicione o componente FDTable (ADTable). Configure as seguintes propriedades:
- Name: tblMarca
- Connection: FDConnection1 (ADConnection1)
- TableName: Marca (Onde so listadas as tabelas contidas no BD)
Configuradas as propriedades, d um duplo clique sobre o componente tblMarca. Na telinha que aparecer,
clique com o boto direito do mouse na parte central e selecione a opo Add all fields (adicionar todos os
campos). Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo
COD_MARCA, e no Object Inspector altere a propriedade ReadOnly para True.
- Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado).
Terminada a configurao do Table, passamos a inserir o componente DataSource, presente na paleta Data
Access. Aps inserido, altere no Object Inspector a propriedade Name para dsMarca e a propriedade DataSet
para tblMarca.
Utilizando o Query para conectar na tabela Cidade
Da Paleta FireDAC, adicione o componente
FDQuery (ADQuery). Configure as seguintes
propriedades:
- Name: tblCidade
- Connection: FDConnection1 (ADConnection1)
Configuradas as propriedades, d um duplo
clique sobre o componente tblCidade. No editor
que aparecer, ser necessrio informar o cdigo
SQL select, responsvel para trazer os dados da
tabela Cidade.
Cdigo: Select from Cidade
Para testar clique no boto Executar do lado
direito, depois OK.
Feito esse procedimento, da mesma forma como
tambm foi feito anteriormente para a tabela
Marca, usando o Table, vamos adicionar os
campos da tabela Cidade ao componente Query.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:7

Para tal, faz-se necessrio clicar com o boto direito do mouse sob o tblCidade, e no submenu selecionar
Fields Editor , abrindo a janela para adicionar os campos.
- Nessa janela, clique com o boto direito do mouse na rea central, opo Add all fields (Adicionar todos
os campos).
- Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo
COD_CIDADE, e no Object Inspector altere a propriedade ReadOnly para True.
- Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado).
O passo seguinte ser adicionar ao Data Module o componente FDUpdateSQL (ADUpdateSQL) presente na
Paleta FireDAC, permitindo que os dados possam ser editados, inseridos e deletados. Esse componente
acoplado a uma Query para desempenhar essas funes. No nosso exemplo, o mesmo ser vinculado a Query
tblCidade. Altere as propriedades do componente da seguinte forma:
- Name: updCidade
- Connection: FDConnection1 (ADConnection1)
Retorne agora e selecione o componente tblCidade, marcando a propriedade UpdateObject para updCidade.
Feito isso, torna-se possvel adicionar os cdigos SQL responsveis pela manipulao dos registros. D um
duplo clique sobre o componente updCidade. Caso seja exibida uma mensagem, apenas confirme clicando
em Yes. Abrir o editor de SQL.

Figura 7 - Editor de SQL Tabela Cidade

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:8

Nesse editor, certifique-se que na primeira coluna esteja selecionado o campo chave primria da tabela, na
segunda coluna, todos os registros selecionados, o que ocorre por padro.
- Para gerar os cdigos SQL automaticamente, basta clicar no boto Generate SQL . Depois s confirmar
clicando em OK.
Para finalizar, basta inserir o componente DataSource, presente na paleta Data Access. Aps inserido, altere
no Object Inspector a propriedade Name para dsCidade e a propriedade DataSet para tblCidade.
Utilizando o Query para conectar na tabela Automvel
O processo idntico ao adotado item anterior, bastando alterar somente algumas propriedades dos
componentes para serem associadas dessa vez tabela Automoveis.
Um diferencial a ser adotado nesta tabela, ser a configurao de uma mscara de edio, j que
encontramos o campo PLACA, que passvel de receber esse parmetro, por ser sempre composto
por 3 letras seguido por 4 nmeros. As mscaras podem ser adotadas a campos, cuja formataao seja
sempre um padro definido, como telefones, datas, horrios, CPFs, CEPs, etc.
Vamos aos procedimentos.
Da Paleta FireDAC, adicione o componente FDQuery (ADQuery). Configure as seguintes propriedades:
- Name: tblAutomovel
- Connection: FDConnection1 (ADConnection1)
Configuradas as propriedades, d um duplo clique sobre o componente tblAutomovel. No editor que
aparecer, ser necessrio informar o cdigo SQL select, responsvel para trazer os dados da tabela Automovel.
Cdigo: Select from Automovel
Para testar clique no boto Executar do lado direito, depois OK.
Feito esse procedimento, vamos adicionar os campos da tabela Automovel ao componente Query.
Para tal, faz-se necessrio clicar com o boto direito do mouse sob o componente tblAutomovel, e no submenu
selecionar Fields Editor , abrindo a janela para adicionar os campos.
- Nessa janela, clique com o boto direito do mouse na rea central, opo Add all fields (Adicionar todos
os campos).
- Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo
COD_AUTOMOVEL, e no Object Inspector altere a propriedade ReadOnly para True.
Definindo a Mscara para o campo Placa: selecione o campo Placa, e na propriedade EditMask informe a
seguinte mscara de entrada: LLL-9999. Pronto, est configurada a mscara.
- Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado).
O passo seguinte ser adicionar ao Data Module o componente FDUpdateSQL (ADUpdateSQL) presente na
Paleta FireDAC. No nosso exemplo, dessa vez ser vinculado a Query tblAutomovel. Altere as propriedades
do componente da seguinte forma:
- Name: updAutomovel
- Connection: FDConnection1 (ADConnection1)
Retorne agora e selecione o componente tblAutomovel, marcando a propriedade UpdateObject para
updAutomovel.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:9

Feito isso, torna-se possvel adicionar os cdigos SQL responsveis pela manipulao dos registros. D um
duplo clique sobre o componente updAutomovel. Caso seja exibida uma mensagem, apenas confirme
clicando em Yes. Abrir o editor de SQL.

Figura 8 Editor de SQL - Tabela Automvel

Nesse editor, certifique-se que na primeira coluna esteja selecionado o campo chave primria da tabela, na
segunda coluna, todos os registros selecionados, o que ocorre por padro.
- Para gerar os cdigos SQL
automaticamente, basta clicar no
boto Generate SQL . Depois s
confirmar clicando em OK.
Para finalizar, basta inserir o
componente DataSource, presente na
paleta Data Access. Aps inserido,
altere no Object Inspector a
propriedade Name para dsAutomovel
e a propriedade DataSet para
tblAutomovel.
Figura 9 - Viso Final do Data Module

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:10

CRIAAO DOS FORMULRIOS PARA MANIPULAO DOS DADOS


FORMULRIO MARCAS
Nesse formulrio adotaremos o mtodo rpido para
manipulao dos dados, adotando o componente
DBNavigator para automatizar grande parte do
processo.
Vamos criar rapidamente o formulrio, atravs do
menu File/New/VCL Form - Delphi. Salve como
UnitMarca.pas. Altere as seguintes propriedades:
Figura 10 - Formulrio de Cadastro de Marcas

BorderIcons: biSystemMenu
BorderStyle: bsSingle

Caption: Cadastro de Marcas


FormStyle: fsMDIChild
KeyPreview: True
Name: frmMarca
Position: poMainFormCenter
Height: 175
Width: 360
Para impedir que o formulrio seja criado automaticamente ao executar o aplicativo, por ser do tipo MDI, fazse necessrio retirar o mesmo do auto-create. Menu Project/Options. Na primeira coluna opo Forms. Na
coluna central, selecione o formulrio pretendido, e clique na seta que aponta pra direita.
OBS> O frmPrincipal e o DM, devem permanecer sempre na Coluna central, Auto-Create forms.

Figura 11 - Impedir Auto-Create do Formulrio

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:11

Feito o procedimento para impedir o auto-create, vamos garantir que seja possvel fechar o formulrio quando
assim pretendido. Vamos no evento OnClose do frmMarca, incluir os seguintes cdigos:
Action := Cafree;
frmMarca := Nil;
Chamando o formulrio Marcas a partir do Form Principal:
Volte ao formulrio principal, abre o MainMenu1, selecione o item Marcas das opes, dando um duplo clique
com o mouse. No editor de cdigo, informe o seguinte:
if frmMarca = nil then
frmMarca := TfrmMarca.Create(Self);
frmMarca.Show;
Para que tambm seja possvel acessar o formulrio Marcas a partir do boto da ToolBar que consta no
formulrio principal, no ser necessrio redigitar o cdigo acima. Basta vincular o cdigo existente ao evento
OnClick do referido boto.
Selecione o Boto Marcas, nos eventos procure o OnClick, e ao invs de dar o duplo clique para abrir o editor
de cdigos, basta clicar na setinha no canto direito e selecionar o evento j criado anteriormente para o menu,
que nesse caso aparecer como Marcas1Click.
Adicionando os componentes ao Formulrio Marcas:
- Adicione dois labels da paleta Standard.
- Da Paleta Additional adicione um BitBtn (name: btnLocMarca)
- Da paleta Data Controls, adicione: um DBText, um DBEdit e um DBNavigator.
- Organize o layout conforme a Figura 10.
Com os componentes devidamente inseridos, faz-se necessrio incluir a Unit do Data Module na Unit do
Formulrio frmMarcas.
- Selecione o frmMarcas.
- Menu File/Use Unit
- Selecione a UnitDM e OK.
Agora altere as seguintes propriedades dos componentes:
- DBText DataSource: DM.dsMarca
DataField: Cod_Marca
- DBEdit - DataSource: DM.dsMarca
DataField: Nome_Marca
- DBNavigator - DataSource: DM.dsMarca
ShowHint: True;
Na propriedade Hints do DBNavigator, exclua os textos em ingls, substituindo os mesmos pelas tradues:
Primeiro Registro
Registro Anterior
Prximo Registro
ltimo Registro

Inserir Registro
Excluir Registro
Editar Registro
Salvar Registro

Cancelar Registro
Atualizar Dados
Aplicar Alteraes
Cancelar Alteraes

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:12

Fazendo Enter funcionar como Tab:


Na propriedade OnKeyPress do formulrio frmMarca inclua o cdigo abaixo:
if Key = #13 then
if not ((ActiveControl is TDBNavigator)) then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
Exibir o Cdigo da Marca ao salvar um registro:
Para atualizar automaticamente toda vez ao se incluir um registro novo, utilizando-se o componente Table,
faz-se necessrio retornar ao Data Module e incluir o cdigo abaixo, no evento AfterPost do tblMarca.
tblMarca.Refresh;
tblMarca.Last;
Pronto. Agora s executar e testar os mtodos de insero, edio e excluso.
Formulrio de Pesquisa das Marcas cadastradas - Table
Mesmo utilizando-se o componente Table, tambm torna-se possvel realizar buscas nos registros de uma
tabela. Embora mais limitado que usando os comandos SQL, podemos utilizar do mtodo Locate do
componente Table.
Vamos criar um novo Formulrio, salvando a Unit como
UnitLocMarca.pas. Tire do auto-create conforme visto
anteriormente.
Altere as propriedades conforme descrito no formulrio
anterior, substituindo somente as propriedades:
- Name: frmLocMarca
- Height: 240
- Width: 350
Figura 12 - Formulrio Localizar Marca

O form criado deve ser chamado, clicando-se no BitBtn btnLocMarca, inserido no formulrio frmMarca.
- Inclua nesse formulrio localizar: um Label, um MaskEdit, um DBGrid e um BitBtn.
- Na parte do cdigo do formulrio, bem na parte superior, na clusula Uses, acrescente no final da lista a
classe DB.
- No evento OnChange do edtPesquisa, vamos inserir o cdigo responsvel pela busca na tabela:
DM.tblMarca.Locate('Nome_Marca',edtPesquisa.Text,[loPartialKey]);
- No evento OnShow do formulrio vamos incluir o cdigo para colocar automaticamente no edtPesquisa:
edtPesquisa.setFocus;
Temos a necessidade de impedir que o usurio consigo fazer edio ao clicar num campo da tabela.
Selecione o DBGrid, e na propriedade Options clique no (+) que aparece sua frente. Mude para True
a propriedade dgRowSelect.
Para testar, e garantir melhores resultados, recomendvel ter quantidade maior de registros j inseridos na
tabela.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:13

FORMULRIO CIDADE
Para o formulrio cidade, adotaremos botes de aes personalizados, manipulando os dados via cdigo.
- Crie um novo formulrio, salve como UnitCidade.pas, e propriedade Name como frmCidade. Siga os
demais procedimentos para deixar o formulrio OK para uso.

Figura 13 - Formulrio Cidade

Lembre-se de adicionar a unit DM ao formulrio de Cadastro de Cidades:


- File/Use Unit -> UnitDM.pas
Tambm utilizaremos neste formulrio os procedimentos Habilita e Desabilita campos presentes na unit
RotinasGerais. Da mesma forma, adicionaremos essa unit ao formulrio de Cadastro de Cidades.
- File/Use Unit -> RotinasGerais.pas
Inserindo os componentes no formulrio:
Para o campo Cod_Cidade, insira um componente DBText da paleta Data Controls:
DataSource: DM.dsCidade
DataField: COD_CIDADE
Name: lblCodigo
Para o campo Nome_Cidade, insira um componente DBEdit da paleta Data Controls:
DataSource: DM.dsCidade
DataField: NOME_CIDADE Name: edtNomeCidade
Para o campo Estado, insira um componente DBComboBox da paleta Data Controls:
DataSource: DM.dsCidade
DataField: UF
Name: cbEstado
Na propriedade Items, do DbComboBox, digite as iniciais dos estados Brasileiros para serem
exibidos depois: AC, SC, RS, SP, RJ, AM, PR, etc. Para serem ordenados em ordem alfabtica, altere a
propriedade Sorted para True.
Para os botes, insira 11 BitBtns da paleta Additional. Configure as propriedades de tamanho, imagens,
hints, conforme cada qual.
OBS: Fundamental lembrar que a propriedade Enabled dos botes Salvar e Cancelar deve estar como False, a
fim de efetivamente funcionar o tratamento de todos os botes.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:14

Procedimento de Controle dos Botes TrataBotoes


Para poder gerenciar os botes que devem ficar habilitados e/ou desabilitados durante o processo de
insero ou edio dos dados, faremos uso de um procedimento. Inicialmente ser necessrio acrescentar o
procedimento na clusula Type do cdigo fonte do formulrio, na parte superior do mesmo. Localize onde
se iniciam as entradas dos demais procedimentos, e acrescente a seguinte linha:
........
procedure TrataBotoes;
................
J na parte aps a clusula Uses, acrescente o procedimento de fato:
procedure TfrmCidade.TrataBotoes;
begin
btnNovo.Enabled:=not btnNovo.Enabled;
btnEditar.Enabled:=not btnEditar.Enabled;
btnExcluir.Enabled:= not btnExcluir.Enabled;
btnSalvar.Enabled:=not btnSalvar.Enabled;
btnCancelar.Enabled:=not btnCancelar.Enabled;
btnFechar.Enabled:=not btnFechar.Enabled;
btnLocalizar.Enabled:=not btnLocalizar.Enabled;
btnPrimeiro.Enabled := not btnPrimeiro.Enabled;
btnAnterior.Enabled := not btnAnterior.Enabled;
btnProximo.Enabled := not btnProximo.Enabled;
btnUltimo.Enabled := not btnUltimo.Enabled;
end;

Figura 14 - Cdigo Fonte

CDIGOS DO EVENTO ONCLICK DOS BOTES


procedure TfrmCidade.btnPrimeiroClick(Sender: TObject);
begin
DM.tblCidade.First;
end;
procedure TfrmCidade.btnAnteriorClick(Sender: TObject);
begin
DM.tblCidade.Prior;
end;
procedure TfrmCidade.btnProximoClick(Sender: TObject);
begin
DM.tblCidade.Next;
end;

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

procedure TfrmCidade.btnUltimoClick(Sender: TObject);


begin
DM.tblCidade.Last;
end;
procedure TfrmCidade.btnNovoClick(Sender: TObject);
begin
DM.tblCidade.Append;
HabilitaCampos(frmCidade);
TrataBotoes;
edtNomeCidade.setFocus;
end;
procedure TfrmCidade.btnSalvarClick(Sender: TObject);
begin
DM.tblCidade.Post;
DesabilitaCampos(frmCidade);
TrataBotoes;
btnNovo.SetFocus;
end;
procedure TfrmCidade.btnEditarClick(Sender: TObject);
begin
DM.tblCidade.Edit;
HabilitaCampos(frmCidade);
TrataBotoes;
end;
procedure TfrmCidade.btnCancelarClick(Sender: TObject);
begin
DM.tblCidade.Cancel;
DesabilitaCampos(frmCidade);
TrataBotoes;
end;
procedure TfrmCidade.btnExcluirClick(Sender: TObject);
begin
If Application.MessageBox('Tem Certeza de que deseja excluir esse registro ?',
'Excluso',mb_YesNo+mb_DefButton2+mb_IconQuestion)
= Id_Yes then
Begin
DM.tblCidade.Delete;
end;
end;

PG:15

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:16

OBS: Como ainda no temos criado o formulrio frmLocCidade, vamos apenas inserir o cdigo no
boto Localizar, mantendo-o comentado, at que o formulrio seja criado mais adiante, bastando
da, somente descometer retirando os ({ }).
procedure TfrmCidade.btnLocalizarClick(Sender: TObject);
begin
{
if frmLocCidade = nil then
frmLocCidade := TfrmLocCidade.Create(Self);
frmLocCidade.Show;
}
end;

procedure TfrmCidade.btnFecharClick(Sender: TObject);


begin
Close;
end;
CDIGO EVENTO OnKeyPress DO FORMULRIO
(Enter Funcionar como Tab). Lembrando de organizar a propriedade TabOrder de todos os
componentes presentes do form, iniciando-se no primeiro pelo ndice 0 e assim por diante.
procedure TfrmCidade.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
if not ((ActiveControl is TBitBtn) or (ActiveControl is TDBMemo)) then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
No formulrio Principal, na opo do Menu para chamar o formulrio Cidade, temos que
acrescentar a linha que desabilita os botes abrindo-se o mesmo, devendo ficar da seguinte forma:
procedure TfrmPrincipal.Cidades1Click(Sender: TObject);
begin
if frmCidade = nil then
frmCidade := TfrmCidade.Create(Self);
DesabilitaCampos(frmCidade);
frmCidade.Show;
end;
Para finalizar, falta incluir o cdigo de atualizao nos eventos AfterPost e AfterDelete do
tblCidade, constante no Data Module:
tblCidade.Refresh;

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:17

FORMULRIO LOCALIZAR CIDADE


Para facilitar as buscas de cidades cadastradas, vamos incluir um novo formulrio ao nosso projeto,
salvando a unit com o nome UnitLocCidade.pas, name do form: frmLocCidade. As demais
configuraes so similares aos anteriormente criados.

Figura 15 - Formulrio Localizar Cidade

Vamos incluir a UnitDM ao formulrio:


- File/Use Unit -> UnitDM.pas
Insira os seguintes componentes, no formulrio de localizao:
- Um Label
- Um DBGrid
- Um MaskEdit
- Um BitBtn
No DbGrid, na propriedade DataSource, selecione DM.tblCidade.
Para personalizar os dados do DBGrid, d um duplo
clique sobre o mesmo. Na janela que aparecer, clique
com o Boto Direito do mouse na parte central, depois
na opo Add All Fields.
Agora basta selecionar o/s campos desejados e alterar as
propriedades conforme desejado. Lembrando que para
ajustar a linha de cabealho da tabela, necessita-se clicar
no (+) que precede a propriedade Title, sendo possvel
alterar o Caption, Cor, ajustes de alinhamento, dentre
outros.

Figura 16 - Personalizar DbGrid

No Boto OK, basta incluir o comando Close, ao evento


OnClick.

Temos a necessidade de impedir que o usurio consigo fazer edio ao clicar num campo da tabela.
Selecione o DBGrid, e na propriedade Options clique no (+) que aparece sua frente. Mude para True
a propriedade dgRowSelect.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:18

Para finalizar o formulrio de busca, faremos com que ao ser aberto, o cursor j aparea no campo de
pesquisa, atravs do evento OnShow do formulrio.
procedure TfrmLocCidade.FormShow(Sender: TObject);
begin
edtPesquisa.SetFocus;
end;
Pretende-se que, ao o usurio digitar no campo de pesquisa, sejam simultaneamente filtrados os
registros. Para isso, recorremos ao evento OnChange do componente edtPesquisa. E definimos o
seguinte cdigo SQL:
procedure TfrmLocCidade.edtPesquisaChange(Sender: TObject);
begin
With DM.tblCidade do
Begin
Close;
Sql.Clear;
Sql.Add('Select * from Cidade where nome_cidade containing :Parametro order by nome_cidade');
ParamByName('Parametro').AsString := edtPesquisa.Text;
Open;
end;
end;

Para testar, vamos voltar ao formulrio de cadastro de cidades, e descomentar o cdigo do boto
Localizar, retirando os ({ }).

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:19

FORMULRIO AUTOMVEL
- Crie um novo formulrio, salve como UnitAutomovel.pas, e propriedade Name como frmAutomovel. Siga
os demais procedimentos para deixar o formulrio OK para uso.

Figura 17 - Formulrio Cadastro de Automveis

Lembre-se de adicionar a unit DM e RotinasGerais ao formulrio de Cadastro de Automveis:


- File/Use Unit -> UnitDM.pas
- File/Use Unit -> RotinasGerais.pas
Inserindo os componentes no formulrio:
Podemos agilizar o processo, copiando os botes criados no formulrio anterior (frmCidade). Basta
selecionar todos eles no formulrio Cidade, dar o comando copiar (Ctrl+C) e voltar ao formulrio
Automvel e colar (Ctrl+V).
Para o campo Cod_Automovel, insira um componente DBText da paleta Data Controls:
DataSource: DM.dsAutomovel
DataField: COD_AUTOMOVEL
Name: lblCodigo
Para o campo Marca, insira um componente DBLookupComboBox da paleta Data Controls, que visa buscar
os registros cadastrados na tabela Marca.
Onde salva:
DataSource: DM.dsAutomovel
DataField: COD_MARCA
Name: cbMarca
Da onde Busca: ListSource: DM.dsMarca
ListField: Nome_Marca
KeyField: Cod_Marca
Para o campo Modelo, insira um componente DBEdit da paleta Data Controls:
DataSource: DM.dsAutomovel
DataField: MODELO Name: edtModelo
Para o campo Cidade, insira um componente DBLookupComboBox da paleta Data Controls, que visa buscar
os registros cadastrados na tabela Cidade.
Onde salva:
DataSource: DM.dsAutomovel
DataField: COD_CIDADE
Name: cbCidade
Da onde Busca: ListSource: DM.dsCidade
ListField: Nome_Cidade
KeyField: Cod_Cidade

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:20

Para o campo Placa, insira um componente DBEdit da paleta Data Controls:


DataSource: DM.dsAutomovel DataField: PLACA Name: edtPlaca
CharCase: ecUpperCase
Para o campo Ano, insira um componente DBEdit da paleta Data Controls:
DataSource: DM.dsAutomovel
DataField: ANO_FABRICACAO
Name: edtAno
Para o campo Conservao, insira um componente DBRadioGroup da paleta Data Controls:
DataSource: DM.dsAutomovel
DataField: CONSERVACAO Name: cbConservacao
Items> (o que exibido ao usurio) - Informe as quatro opes: timo, Bom, Razovel, Pssimo.
Values> (o que se grava efetivamente no banco) Informe as Iniciais dos Itens: O, B, R e P.
Para o campo Obs, insira um componente DBMemo da paleta Data Controls:
DataSource: DM.dsAutomovel
DataField: OBS
Name: mmObs
OBS: Fundamental lembrar que a propriedade Enabled dos botes Salvar e Cancelar deve estar como False, a
fim de efetivamente funcionar o tratamento de todos os botes.
Procedimento de Controle dos Botes TrataBotoes
Inicialmente ser necessrio acrescentar o procedimento na clusula Type no cdigo fonte do formulrio, na
parte superior do mesmo, da mesma forma como foi feito no formulrio anterior de cadastro de cidades.
Localize onde se iniciam as entradas dos demais procedimentos, e acrescente a seguinte linha:
........
procedure TrataBotoes;
................
J na parte aps a clusula Uses, acrescente o procedimento de fato:
procedure TfrmAutomovel.TrataBotoes;
begin
btnNovo.Enabled:=not btnNovo.Enabled;
btnEditar.Enabled:=not btnEditar.Enabled;
btnExcluir.Enabled:= not btnExcluir.Enabled;
btnSalvar.Enabled:=not btnSalvar.Enabled;
btnCancelar.Enabled:=not btnCancelar.Enabled;
btnFechar.Enabled:=not btnFechar.Enabled;
btnLocalizar.Enabled:=not btnLocalizar.Enabled;
btnPrimeiro.Enabled := not btnPrimeiro.Enabled;
btnAnterior.Enabled := not btnAnterior.Enabled;
btnProximo.Enabled := not btnProximo.Enabled;
btnUltimo.Enabled := not btnUltimo.Enabled;
end;
OBS: Repare que em relao ao cdigo inserido anteriormente no formulrio de cadastro de cidades, apenas
foi alterado o nome do form na primeira linha da procedure.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

CDIGOS DO EVENTO OnClick DOS BOTES


procedure TfrmAutomovel.btnPrimeiroClick(Sender: TObject);
begin
DM.tblAutomovel.First;
end;
procedure TfrmAutomovel.btnAnteriorClick(Sender: TObject);
begin
DM.tblAutomovel.Prior;
end;
procedure TfrmAutomovel.btnProximoClick(Sender: TObject);
begin
DM.tblAutomovel.Next;
end;
procedure TfrmAutomovel.btnUltimoClick(Sender: TObject);
begin
DM.tblAutomovel.Last;
end;

PG:21

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

procedure TfrmAutomovel.btnNovoClick(Sender: TObject);


begin
DM.tblAutomovel.Append;
HabilitaCampos(frmAutomovel);
TrataBotoes;
cbMarca.setFocus;
end;
procedure TfrmAutomovel.btnSalvarClick(Sender: TObject);
begin
DM.tblAutomovel.Post;
DesabilitaCampos(frmAutomovel);
TrataBotoes;
btnNovo.SetFocus;
end;
procedure TfrmAutomovel.btnEditarClick(Sender: TObject);
begin
DM.tblAutomovel.Edit;
HabilitaCampos(frmAutomovel);
TrataBotoes;
end;
procedure TfrmAutomovel.btnCancelarClick(Sender: TObject);
begin
DM.tblAutomovel.Cancel;
HabilitaCampos(frmAutomovel);
TrataBotoes;
end;
procedure TfrmAutomovel.btnExcluirClick(Sender: TObject);
begin
If Application.MessageBox('Tem Certeza de que deseja excluir esse registro ',
'Excluso',mb_YesNo+mb_DefButton2+mb_IconQuestion)
= Id_Yes then
Begin
DM.tblAutomovel.Delete;
end;
end;

PG:22

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:23

procedure TfrmAutomovel.btnLocalizarClick(Sender: TObject);


begin
{
if frmLocAutomovel = nil then
frmLocAutomovel := TfrmLocAutomovel.Create(Self);
frmLocAutomovel.Show;
}
end;
procedure TfrmAutomovel.btnFecharClick(Sender: TObject);
begin
Close;
end;
CDIGO EVENTO OnKeyPress DO FORMULRIO
(Enter Funcionar como Tab). Lembrando de organizar a propriedade TabOrder de todos os
componentes presentes do form, iniciando-se no primeiro pelo ndice 0 e assim por diante.
procedure TfrmAutomovel.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
if not ((ActiveControl is TBitBtn) or (ActiveControl is TDBMemo)) then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
No formulrio Principal, na opo do Menu para chamar o formulrio Automvel, temos que
acrescentar a linha que desabilita os botes, devendo ficar da seguinte forma:
procedure TfrmPrincipal.Automveis1Click(Sender: TObject);
begin
if frmAutomovel = nil then
frmAutomovel := TfrmAutomovel.Create(Self);
DesabilitaCampos(frmAutomovel);
frmAutomovel.Show;
end;
Para finalizar, falta incluir o cdigo de atualizao nos eventos AfterPost e AfterDelete do
tblAutomovel, constante no Data Module:
tblAutomovel.Refresh;

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:24

FORMULRIO LOCALIZAR AUTOMVEL


Vamos incluir um novo formulrio ao nosso projeto, salvando a unit como UnitLocAutomovel.pas,
name do form: frmLocAutomovel. As demais configuraes so similares aos forms anteriormente
criados.

Figura 18 - Formulrio Localizar Automvel

Vamos incluir a UnitDM ao formulrio:


- File/Use Unit -> UnitDM.pas
Insira os seguintes componentes, no formulrio de localizao:
- Um Label
- Um DBGrid
- Um MaskEdit
- Um BitBtn
Ajuste o DBGrid, conforme descrito no formulrio localizar Cidade, criado em etapas anteriores.
Cdigo do Evento OnChange, do edtPesquisa:
procedure TfrmLocAutomovel.edtPesquisaChange(Sender: TObject);
begin
With DM.tblAutomovel do
Begin
Close;
Sql.Clear;
Sql.Add('Select * from Automovel where modelo containing :Parametro order by modelo');
ParamByName('Parametro').AsString := edtPesquisa.Text;
Open;
end;
end;
Como no DBGrid aparecem os cdigos, ao invs da descrio da Cidade e Marca, necessitamos criar
campos do tipo Lookup na Query tblAutomovel.

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

PG:25

CRIANDO CAMPOS VIRTUAIS NUM QUERY


Abra o Data Module. Clique com o Boto Direito do mouse sobre tblAutomovel e selecione a opo
Fields Editor.
Na Janelinha que exibida, j esto sendo apresentados os campos fsicos e reais da tabela Automvel.
Vamos incluir agora um campo do tipo Lookup. Para tal, clique com o boto direito na parte interna
da janelinha e escolha a opo New Field. Configure como mostra a Figura 19.

Figura 19 - Campo Virtual - Cidade

Repita o procedimento anterior, adicionando mais um campo para mostrar a Marca.

Figura 20 - Campo Virtual - Marca

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014

ANEXO
unit RotinasGerais;
interface
uses sysutils, IniFiles,Windows, Forms,
Classes, Controls, StdCtrls, Variants,Messages,
ExtCtrls, dialogs, DBCtrls, Buttons, StrUtils ;
function VerificaCPF(cpf: string): boolean;
procedure DesabilitaCampos (Form: TForm);
procedure HabilitaCampos (Form: TForm);
Function ValidaCNPJ(numCNPJ: string): boolean;
function Acentos ( str: String ): String;
function GetBuildInfo:string;
implementation
function GetBuildInfo:string;
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
V1, V2, V3, V4: Word;
Prog : string;
begin
Prog := Application.Exename;
VerInfoSize := GetFileVersionInfoSize(PChar(prog), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(prog), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
V1 := dwFileVersionMS shr 16;
V2 := dwFileVersionMS and $FFFF;
V3 := dwFileVersionLS shr 16;
V4 := dwFileVersionLS and $FFFF;
end;
FreeMem(VerInfo, VerInfoSize);
result := Copy (IntToStr (100 + v1), 3, 2) + '.' +
Copy (IntToStr (100 + v2), 3, 2) + '.' +
Copy (IntToStr (100 + v3), 3, 2) + '.' +
Copy (IntToStr (1000 + v4), 3, 2);
end;

function Acentos ( str: String ): String;


var
i: Integer;
begin
for i := 1 to Length ( str ) do
case str[i] of
'': str[i] := 'a';
'': str[i] := 'e';

'': str[i] := 'i';


'': str[i] := 'o';
'': str[i] := 'u';
'': str[i] := 'a';
'': str[i] := 'e';
'': str[i] := 'i';
'': str[i] := 'o';
'': str[i] := 'u';
'': str[i] := 'a';
'': str[i] := 'e';
'': str[i] := 'i';
'': str[i] := 'o';
'': str[i] := 'u';
'': str[i] := 'a';
'': str[i] := 'e';
'': str[i] := 'i';
'': str[i] := 'o';
'': str[i] := 'u';
'': str[i] := 'a';
'': str[i] := 'o';
'': str[i] := 'n';
'': str[i] := 'c';
'': str[i] := 'A';
'': str[i] := 'E';
'': str[i] := 'I';
'': str[i] := 'O';
'': str[i] := 'U';
'': str[i] := 'A';
'': str[i] := 'E';
'': str[i] := 'I';
'': str[i] := 'O';
'': str[i] := 'U';
'': str[i] := 'A';
'': str[i] := 'E';
'': str[i] := 'I';
'': str[i] := 'O';
'': str[i] := 'U';
'': str[i] := 'A';
'': str[i] := 'E';
'': str[i] := 'I';
'': str[i] := 'O';
'': str[i] := 'U';
'': str[i] := 'A';
'': str[i] := 'O';
'': str[i] := 'N';
'': str[i] := 'C';
end;
Result := str;
end;
Function VerificaCPF(cpf:string):boolean;
var i:integer;
Want:char;
Wvalid:boolean;

PG:26

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014
Wdigit1,Wdigit2:integer;
begin
Wdigit1:=0;
Wdigit2:=0;
Want:=cpf[1];//variavel para testar se o cpf repetido como
111.111.111-11
Delete(cpf,ansipos('.',cpf),1); //retira as mascaras se houver
Delete(cpf,ansipos('.',cpf),1);
Delete(cpf,ansipos('-',cpf),1);
//testar se o cpf repetido como 111.111.111-11
for i:=1 to length(cpf) do
begin
if cpf[i] <> Want then
begin
Wvalid:=true; // se o cpf possui um digito diferente ele
passou no primeiro teste
break
end;
end;
// se o cpf composto por numeros repetido retorna falso
if not Wvalid then
begin
result:=false;
exit;
end;
//executa o calculo para o primeiro verificador
for i:=1 to 9 do
begin
wdigit1:=Wdigit1+(strtoint(cpf[10-i]) (I+1));
end;
Wdigit1:= ((11 - (Wdigit1 mod 11))mod 11) mod 10;
{formula do primeiro verificador
soma=1 2+2 3+3 4.. at 9 10
digito1 = 11 - soma mod 11
se digito > 10 digito1 =0
}
//verifica se o 1 digito confere
if IntToStr(Wdigit1) <> cpf[10] then
begin
result:=false;
exit;
end;

for i:=1 to 10 do
begin
wdigit2:=Wdigit2+(strtoint(cpf[11-i]) (I+1));
end;
Wdigit2:= ((11 - (Wdigit2 mod 11))mod 11) mod 10;
{formula do segundo verificador
soma=1 2+2 3+3 4.. at 10 11
digito1 = 11 - soma mod 11
se digito > 10 digito1 =0

PG:27

}
// confere o 2 digito verificador
if IntToStr(Wdigit2) <> cpf[11] then
begin
result:=false;
exit;
end;
//se chegar at aqui o cpf valido
result:=true;
end;

Function ValidaCNPJ(numCNPJ: string): boolean;


var
cnpj: string;
dg1, dg2: integer;
x, total: integer;
ret: boolean;
begin
ret:=False;
cnpj:='';
//Analisa os formatos
if Length(numCNPJ) = 18 then
if (Copy(numCNPJ,3,1) + Copy(numCNPJ,7,1) +
Copy(numCNPJ,11,1) + Copy(numCNPJ,16,1) = '../-') then
begin
cnpj:=Copy(numCNPJ,1,2) + Copy(numCNPJ,4,3) +
Copy(numCNPJ,8,3) + Copy(numCNPJ,12,4) +
Copy(numCNPJ,17,2);
ret:=True;
end;
if Length(numCNPJ) = 14 then
begin
cnpj:=numCNPJ;
ret:=True;
end;
//Verifica
if ret then
begin
try
//1 digito
total:=0;
for x:=1 to 12 do
begin
if x < 5 then
Inc(total, StrToInt(Copy(cnpj, x, 1)) (6 - x))
else
Inc(total, StrToInt(Copy(cnpj, x, 1)) (14 - x));
end;
dg1:=11 - (total mod 11);
if dg1 > 9 then
dg1:=0;
//2 digito
total:=0;
for x:=1 to 13 do

Sociedade Educacional de Itapiranga - FAI Faculdades


Curso: GESTO DA TECNOLOGIA DA INFORMAO
Disciplina: PROGRAMAO II
Professor: ANDR KLUNK
Perodo: 3 semestre
Ano: 2014
begin
if x < 6 then
Inc(total, StrToInt(Copy(cnpj, x, 1)) (7 - x))
else
Inc(total, StrToInt(Copy(cnpj, x, 1)) (15 - x));
end;
dg2:=11 - (total mod 11);
if dg2 > 9 then
dg2:=0;
//Validao final
if (dg1 = StrToInt(Copy(cnpj, 13, 1))) and (dg2 =
StrToInt(Copy(cnpj, 14, 1))) then
ret:=True
else
ret:=False;
except
ret:=False;
end;
//Invlidos
case
AnsiIndexStr(cnpj,['00000000000000','11111111111111','2222222
2222222','33333333333333','44444444444444',
'55555555555555','66666666666666','77777777777777','888888888
88888','99999999999999']) of
0..9: ret:=False;
end;
end;
ValidaCNPJ:=ret;
end;
procedure HabilitaCampos (Form: TForm);
var
i : Integer;
begin
for i := 0 to Form.ComponentCount - 1 do
Begin
if Form.Components[i] is TCustomEdit then
(Form.Components[i] as TCustomEdit).Enabled:=True;
if Form.Components[i] is TDBComboBox then
(Form.Components[i] as TDBComboBox).Enabled:=True;

PG:28

if Form.Components[i] is TDBLookupComboBox then


(Form.Components[i] as
TDBLookupComboBox).Enabled:=True;
if Form.Components[i] is TComboBox then
(Form.Components[i] as TComboBox).Enabled:=True;
if Form.Components[i] is TDbCheckBox then
(Form.Components[i] as TDbCheckBox).Enabled:=True;
if Form.Components[i] is TGroupBox then
(Form.Components[i] as TGroupBox).Enabled:=True;
if Form.Components[i] is TDBRadioGroup then
(Form.Components[i] as TDBRadioGroup).Enabled:=True;
End;
end;
procedure DesabilitaCampos (Form: TForm);
var
i : Integer;
begin
for i := 0 to Form.ComponentCount - 1 do
Begin
if Form.Components[i] is TCustomEdit then
(Form.Components[i] as TCustomEdit).Enabled:=False;
if Form.Components[i] is TDBComboBox then
(Form.Components[i] as TDBComboBox).Enabled:=False;
if Form.Components[i] is TDBLookupComboBox then
(Form.Components[i] as
TDBLookupComboBox).Enabled:=False;
if Form.Components[i] is TComboBox then
(Form.Components[i] as TComboBox).Enabled:=False;
if Form.Components[i] is TDbCheckBox then
(Form.Components[i] as TDbCheckBox).Enabled:=False;
if Form.Components[i] is TGroupBox then
(Form.Components[i] as TGroupBox).Enabled:=False;
if Form.Components[i] is TDBRadioGroup then
(Form.Components[i] as TDBRadioGroup).Enabled:=False;
End;
end;
end.

-------------------------------------------------------------------------------------------------------

Вам также может понравиться