Академический Документы
Профессиональный Документы
Культура Документы
PG:1
Figura 1 - Modelo ER
/*
/*
/*
/*
/*
*/
*/
*/
*/
*/
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.
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.
PG:4
PG:5
- 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.
PG:6
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.
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.
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.
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
PG:10
BorderIcons: biSystemMenu
BorderStyle: bsSingle
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
PG:12
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.
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.
PG:14
PG:15
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;
PG:17
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.
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 ({ }).
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.
PG:20
PG:21
PG:22
PG:23
PG:24
PG:25
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;
PG:26
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;
PG:28
-------------------------------------------------------------------------------------------------------