Exercício 03 Construir um programa em Delphi com um menu

Transcrição

Exercício 03 Construir um programa em Delphi com um menu
Exercício 03
Construir um programa em Delphi com um menu, cadastrando informações de clientes de
um banco, conforme tela abaixo.
Para tal, inserir, na paleta Standard clicar em menu.
Uma vez no form, dê um clique duplo sobre o objeto e insira a tela conforme abaixo. Não
esqueça do & e das teclas de atalho.
Salvar o projeto com o nome menu_exe.dpr e o form principal princip.pas. Para criar um
novo form clique em File/New Form (ou conforme a sua versão do Delphi). Em seguida
salvar novamente o projeto. Aparecerá a tela para definir o nome do novo form ,
incluir.pas. Inclua os objetos conforme tela abaixo.
Objeto
Form
Label (qt 5)
Propriedade
Name
Caption
Caption
Edit (qt 2)
Name
MaskEdit (qt 2)
EditMask
Name
RadioGroup
Name
items
Valor
Cliente_incluir
Inclusão de Clientes
Nome
Endereço
CEP
Telefone
Renda Mensal
Ed_nome
Ed_endereco
00000\-999;1;_ para CEP
!\(999\)0000-0000;1;_ para Tel
!99990,00;1;0 para renda mensal
Mk_cep
Mk_telefone
Mk_renda
Rg_civil
Solteiro
Casado
Viúvo
Desquitado
Divorciado
GroupBox
CheckBox
Caption
Name
Caption
Button
Caption
Name
Serviços
Ck_especial
Ck_credito
Cheque Escpecial
Cartão de Crédito
Incluir
BB_incluir
Algumas observações sobre o MASKEDIT:
A propriedade EditMask do componente MaskEdit possui três partes, separadas por ;
(ponto-e-vírgula):
!\(9xx99\)000-0000;1;_
!\(9xx99\)000-0000 - é a máscara em si.
1 - indica que os caracteres serão salvos como parte do dado;
0 - indica que os caracteres NÃO serão salvos como parte do dado.
_ - caracter usado para representar o branco na máscara.
Na máscara o caracter 9 indica que é permitido números, mas não é obrigatório a entrada de
dados; o caracter 0 indica que é obrigatório a entrada de números. Desta forma, queria que
fosse obrigatório somente o telefone da pessoa, sem necessidade do DDD.
Para criar uma entrada de dados como você deseja, utilize a máscara: LLLL99999
O caracter L obriga que seja somente letras (A-Z, a-z) e o 9 (como já disse) somente
números
Caracteres especiais utilizados com a máscara:
! Faz com que a digitação da máscara fique parada no primeiro caracter, fazendo com que
os caracteres digitados que se movam. Ex: !;0;_
> Todos os caracteres alfabéticos digitados após este símbolo serão convertidos para
maiúsculos. Ex: >aaa;0;_
< Todos os caracteres alfabéticos digitados após este símbolo serão convertidos para
minúsculos. Ex: <aaa;0;_
<> Anula o uso dos caracteres > e <. Ex: >aaa<>aaa;0;_
\ Utilizado para marcar determinado caractere não especial como fixo, não podendo
sobrescrevê-lo. Ex: !\(999\)000-0000;0;_
L Caracteres alfabéticos (A-Z, a-z.) de preenchimento obrigatório. Ex: LLL;1;_
l (Letra ele minúscula) Caracteres alfabéticos (A-Z, a-z.) de preenchimento opcional. Ex:
lll;1;_
A Caracteres alfanuméricos (A-Z, a-z, 0-9) de preenchimento obrigatório. Ex: AAA;1;_
a Caracteres alfanuméricos (A-Z, a-z, 0-9) de preenchimento opcional. Ex: aaa;1;_
C Exige preenchimento obrigatório com qualquer caractere para a posição. Ex: CCC;1;_
c Permite qualquer caractere para a posição de preenchimento opcional. Ex: ccc;1;_
0 Caracteres numéricos (0-9) de preenchimento obrigatório. Ex: 000;1;_
9 Caracteres numéricos (0-9) de preenchimento opcional. Ex: 999;1;_
# Caracteres numéricos (0-9) e os sinais de - ou + de preenchimento opcional. Ex: ###;1;_
: Utilizado como separador de horas, minutos e segundos. Ex: !00:00:00;1;_
/ Utilizado como separador de dia, mês e ano. Ex: !99/99/9999;1;_
; Separa os três campos da máscara.
_ Caractere usado normalmente nas posições do campo ainda não preenchidas.
EVENTOS:
Dê um clique duplo no menu Sair e insira o seguinte código:
procedure Tmain.Sair1Click(Sender: TObject);
begin
if MessageDlg('Confirma a saída. Yes ou No ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
Application.Terminate;
end;
end;
No meuu Inserir, adicionar o código:
procedure Tmain.Incluir1Click(Sender: TObject);
begin
cliente_incluir.bb_incluir.visible := true;
cliente_incluir.bb_alterar.visible := false;
cliente_incluir.caption := 'Inclusão de clientes';
cliente_incluir.Show;
end;
CRIANDO O BANCO DE DADOS
No Access criar o seguinte banco de dados com a tabela cliente.
CONEXÃO ODBC
No painel de controle, em ferramentas administrativas, acessar Fonte de Dados ODBC.
Selecionar Banco de Dados MS Access:
Nomear a base com “banco_eter” selecionar a base do banco criado no Access.
CRIANDO A CONEXÃO NO DELPHI.
Os objetos de bancos de dados são três, a saber: DATABASE, DATASOURCE e TABLE.
Por formulário temos apenas um DATABASE. Sendo assim,
Clicar duplo no Database:
Selecionar o Alias name com banco_eter (criado na conexão ODBC).
Na propriedade Name, digite db_eter. Desmarcar os checks de Login prompt e Keep
inactive connection. Clique em OK.
Altere as seguintes propriedades.
OBJETO
Database
Table
PROPRIEDADE
Connected
Name
VALOR
True
Tb_cliente
Datasource
Database
Table Name
Active
Name
DataSet
Db_eter
Cliente
True
Ds_cliente
Tb_cliente
No evento click do botão inserir:
procedure Tcliente_incluir.bb_incluirClick(Sender: TObject);
var
estado_civil, servico : string;
begin
case rg_civil.ItemIndex of
0 : estado_civil := 'Solteiro';
1 : estado_civil := 'Casado';
2 : estado_civil := 'Viúvo';
3 : estado_civil := 'Desquitado';
4 : estado_civil := 'Divorciado';
else
showmessage('Estado civil deve ser preenchido');
rg_civil.SetFocus;
exit;
end;
if ck_especial.State = cbChecked then
servico := 'Cq. Especial';
if ck_credito.State = cbChecked then
servico := servico + ' - Cartão';
try
with tb_cliente do begin
Append;
FieldByName('nome_cli').Value
:= ed_nome.Text;
FieldByName('endereco_cli').Value := ed_endereco.Text;
FieldByName('cep_cli').Value
:= mk_cep.Text;
FieldByName('telefone_cli').Value := mk_telefone.Text;
FieldByName('estcivil_cli').Value := estado_civil;
FieldByName('servico_cli').Value
:= servico;
FieldByName('renda_cli').AsVariant := strtofloat(mk_renda.Text);
Post;
end;
except
on E : EDBEngineError do begin
messageDlg('Ocorreu o seguinte erro ' +
E.Message, mtInformation, [mbOk], 0 );
end;
end;
cliente_incluir.close;
end;
CRIANDO O FORMULÁRIO DE CONSULTA
Clicar em New/Other/Form. Salvar com nome consulta.pas. Alterar a propriedade name
para “cliente_consulta” e o caption para “Consulta a Cliente”.
Para acrescentar os objetos de consulta acessar a paleta Data Control com os objetos
dbGrid e dbNavegator.
Utilizaremos a conexão realizada no formulário, cliente_incluir. Para tal, clicar em
File/Uses Unit/ e selecione o formulário referido.
Alterar as propriedades DataSource os objetos Dbgrid e DbNavegator. Alterar a
propriedade VisibleButtons do dbNavegator, retirando os botões de inclusão, remoção,
edição e cancelamento.
Acrescentar os seguintes objetos.
Objeto
Propriedade
Label
Caption
Edit
Name
Text
Button
Caption
Valor
Consulta pelo nome
Ed_nome
“Limpar”
Procurar....
Criar o evento click do botão procurar...
procedure Tcliente_consulta.Button1Click(Sender: TObject);
begin
if NOT cliente_incluir.tb_cliente.locate('nome_cli',ed_nome.text,[loCaseInsensitive,
loPartialKey])
then showmessage('Não foi encontrado '+ ed_nome.text)
end;
CRIANDO O FORMULÁRIO DE ALTERAÇÃO.
Crie um novo form com o name cliente_alterar e o nome físico alterar.pas Acrescentar os
objetos abaixo.
OBJETO
Form
Label
Edit
Button
PROPRIEDADE
Name
borderStyle
Caption
Name
Text
Caption
VALOR
Cliente_alterar
bsDialog
Digite o código do cliente
Ed_codigo
‘limpar’
Alterar
Criar o evento click no botão alterar.
procedure Tcliente_incluir.bb_alterarClick(Sender: TObject);
var
estado_civil, servico : string;
begin
case rg_civil.ItemIndex of
0 : estado_civil := 'Solteiro';
1 : estado_civil := 'Casado';
2 : estado_civil := 'Viúvo';
3 : estado_civil := 'Desquitado';
4 : estado_civil := 'Divorciado';
else
showmessage('Estado civil deve ser preenchido');
rg_civil.SetFocus;
exit;
end;
if ck_especial.State = cbChecked then
servico := 'Cq. Especial';
if ck_credito.State = cbChecked then
servico := servico + ' - Cartão';
try
if cliente_incluir.tb_cliente.FindKey([strtoint(ed_codigo.text)])
then begin
with tb_cliente do begin
Edit;
FieldByName('nome_cli').Value
:= ed_nome.Text;
FieldByName('endereco_cli').Value := ed_endereco.Text;
FieldByName('cep_cli').Value
:= mk_cep.Text;
FieldByName('telefone_cli').Value
:= mk_telefone.Text;
FieldByName('estcivil_cli').Value
:= estado_civil;
FieldByName('servico_cli').Value
:= servico;
FieldByName('renda_cli').AsVariant := strtofloat(mk_renda.Text);
Post;
end;
showmessage('Alteração realizada com sucesso');
end else showmessage('Não foi possível encontrar registro com código '+
ed_codigo.Text);
except
on E : EDBEngineError do begin
messageDlg('Ocorreu o seguinte erro ' +
E.Message, mtInformation, [mbOk], 0 );
end;
end;
cliente_incluir.close;
end;