ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profor: Gilberto Braga e Renato Candini
Nome ______________________________________________ Número:_________ Série___________
DELPHI PARA PROGRAMAÇÃO DE COMPUTADORES II – AULA 2
Competências: Integrar sistemas; Habilidades: Utilizar modelos,
pseudocódigos e ferramentas na representação da solução de problemas; Bases
Tecnológicas: Programação de computadores linguagem de apoio: Delphi.
Analisando e comparando as funções do DBNavegator
Perceba que o DBNavegator tem dez botões e que cada botão tem uma função específica na
manipulação dos registros da tabela vinculada a ele.
Figura 1 – Formulário com o DBNavegator implementado.
O que acontece é que o DBNavegator usa métodos internos que agem com o objeto table do
Data Module. Observe a tabela a seguir e veja qual método está atrelado a qual botão.
Botão
First |<
Prior <
Next >
Last >|
Insert +
Delete Edit ^
Post Cancel x
Refresh
Método
DataModule.tbNomeTabela.First;
DataModule.tbNomeTabela.Prior;
DataModule.tbNomeTabela.Next;
DataModule.tbNomeTabela.Last;
Descrição
Move para o primeiro registro;
Move para o registro anterior;
Move para o próximo registro;
Move para o último registro;
Abre a tabela para inserir um
DataModule.tbNomeTabela.Insert;
novo registro;
DataModule.tbNomeTabela.Delete;
Apaga um registro da tabela.
Abre a tabela para edição do
DataModule.tbNomeTabela.Edit;
registro corrente.
DataModule.tbNomeTabela.Post;
Grava os registros na tabela.
Cancela a gravação ou edição de
DataModule.tbNomeTabela.Cancel;
registros na tabela.
Atualiza a tabela limpando os
DataModule.tbNomeTabela.Refresh;
buffers de memória utilizados.
Tabela 1 - Descrição dos métodos e funções dos botões do DBNavegator
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
1
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
Neste caso, para substituir o DBNavegator por botões personalizados capazes de interagir com
as tabelas do banco de dados seria necessário apenas seguir os passos listados:
Figura 2 - BitBtn na paleta de componente Additional
1º - Inserir um botão do tipo BitBtn (Bit Button) para cada botão do DBNavegator, para que o
usuário possa interagir com um botão mais sugestivo que um button comum.
2º - Configurar a propriedade glyph com uma imagem contida em "C:\Arquivos de
programas\Arquivos comuns\Borland Shared\Images\Buttons\... " para cada um dos
botões e limpar o texto contido na propriedade caption, pois não é necessário que os botões
tenham qualquer informação contida na propriedade caption.
3º - Configurar a propriedade ShowHint como True e Hint com uma dica sobre o que cada
botão faz (ir para o primeiro, ir para o próximo, etc), isso ajuda o usuário a ter total
entendimento da ferramenta, tornando-a intuitiva.
Figura 3 – BitBtn configurado e pronto para ser usado pelo usuário
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
2
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
4º - Finalmente, codifique os botões com os métodos propostos na Tabela 1 acima e observe
que os botões funcionam “quase” de maneira idêntica ao DBNavegator, porém, com a
vantagem de serem botões personalizados.
Melhorando os métodos dos botões
Existem uma série de tratamentos que podem ser aplicados aos botões para que eles passem a
funcionar com precisão.
Podemos fazer certas operações em um determinado botão e influenciar em outro, ou viceversa, portanto, é importante que se tenha alguns botões habilitados durante uma operação e
outros desabilitados e assim por diante. Para que essa mecânica de funcionamento seja
implementada usaremos, em alguns casos, o comportamento dos botões através dos
eventos (exemplo: Se eu clicar em um botão eu desativo/ativo outro, etc), e, em outros, o
comportamento da tabela (exemplo: se eu estiver no início da tabela eu desativo alguns
botões e ativo outros, etc.) interagindo com os métodos internos implementados para o
funcionamento de cada botão.
1º Controle dos botões Gravar (Post) e Cancelar e dos objetos contidos no formulário
(DBEdits, etc) antes de mostrar o formulário:
Resolução:
O formulário precisa, ao ser carregado, desativar os botões Gravar (post) e Cancelar, assim a
propriedade Enabled desses dois botões será False.
Os objetos DBEdit e todos os demais objetos vinculados a campos da tabela a ser carregada
deve ativar a propriedade ReadyOnly, atribuindo a ela o valor True, para que o campo não
permita edições até que o usuário deixe claro que tem a intenção de editar os campos, isso
garante a integridade dos campos fazendo com que eles não sejam editados por engano.
2º Controle da tabela e dos botões de rolagem (Primeiro e Anterior) ao carregar o
formulário e durante a navegação:
Resolução:
Ao mostrar o formulário, abrir a tabela contida no Data Module;
Verificar, ao mostrar o formulário, se a tabela está vazia. Se sim chamar o procedimento
TabelaVazia, se não, chamar o procedimento AnteriorPrimeiro.
procedure TfrmPaciente.FormShow(Sender: TObject);
begin
dmClinica.tbPaciente.Open;
if (dmClinica.tbPaciente.RecordCount = 0) then
begin
TabelaVazia;
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
3
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
end
else
AnteriorPrimeiro;
end;
O procedimento TabelaVazia: Será usado ao iniciar o formulário atrelado a tabela e ao
deletar registros, pois, nos dois casos a tabela pode estar ou tornar-se vazia, assim, com a
tabela vazia, seria necessário desabilitar os botões Primeiro, Anterior, Próximo, Último,
Editar e Deletar, pois todos esses botões são inúteis com a tabela vazia.
procedure TfrmPaciente.TabelaVazia;
begin
if (dmClinica.tbPaciente.RecordCount = 0) then
begin
bbtPrimeiro.Enabled := False;
bbtAnterior.Enabled := False;
bbtProximo.Enabled := False;
bbtUltimo.Enabled := False;
bbtExcluir.Enabled := False;
bbtEditar.Enabled := False;
end;
end;
O procedimento AnteriorPrimeiro: Será usado ao iniciar o formulário atrelado a tabela e
ao clicar nos botões Primeiro e Anterior, pois, caso a tabela tenha algum registro quando
for aberta ela “automaticamente” deverá mover o ponteiro para o início da tabela (BOF), assim
se o ponteiro estiver no início da tabela os botões Anterior e Primeiro deverão ser
desabilitados (Enabled = False), enquanto os botões Próximo e Último devem ser
“incondicionalmente” habilitados para garantir que o usuário possa se mover para os demais
registros.
procedure TfrmPaciente.AnteriorPrimeiro;
begin
if (dmClinica.tbPaciente.Bof = True) then
begin
bbtPrimeiro.Enabled := False;
bbtAnterior.Enabled := False;
end;
bbtProximo.Enabled := True;
bbtUltimo.Enabled := True;
end;
3º Controle dos botões de rolagem (Próximo e Último) durante a navegação:
Desabilitar os botões de navegação Primeiro e Anterior se a tabela estiver no início (BOF =
True) e Habilitar os botões Próximo e Último, incondicionalmente, sempre que o usuário
clicar em qualquer um dos botões (Primeiro ou Anterior).
Resolução:
Botões Primeiro |< e Anterior <
Mover o ponteiro da tabela para o Primeiro registro ou para o registro Anterior;
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
4
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
Chamar o procedimento PrimeiroAnterior (Descrito acima).
Botões Próximo > e Último >|
Mover a tabela para o Próximo ou Último registro;
Chamar o procedimento ProximoUltimo;
O procedimento ProximoUltimo: Será usado ao clicar nos botões Próximo e Último, pois,
assim se o ponteiro estiver no final da tabela (EOF = True) os botões Próximo e Último
deverão ser desabilitados (Enabled = False), enquanto os botões Anterior e Primeiro
devem ser habilitados (Enabled = True), “incondicionalmente” para garantir que o usuário
possa se mover para os demais registros.
procedure TfrmPaciente.ProximoUltimo;
begin
if (dmClinica.tbPaciente.Eof = True) then
begin
bbtProximo.Enabled := False;
bbtUltimo.Enabled := False;
end;
bbtPrimeiro.Enabled := True;
bbtAnterior.Enabled := True;
end;
4º Configurar a ação dos botões de edição e inserção de registros.
Resolução:
Botões Insert + e Edit ^
Chamar os métodos Insert ou Edit;
Chamar o procedimento Edição.
Procedimento Edição: Desativa os botões de rolagem (Primeiro, Anterior, Próximo e
Último), os próprios botões de Inserção, Edição, Exclusão e Atualização dos registros da
tabela, habilita os botões para Gravar e Cancelar, desabilitam a propriedade ReadyOnly
de todos os objetos vinculados aos campos do banco de dados1 e verifica se a tabela está vazia
através do procedimento TabelaVazia, descrito acima, atualizando a regularização dos botões
caso uma tabela vazia tenha sido aberta para inserção e não tenha sido inserido nenhum
registro;
procedure TfrmPaciente.Edicao;
begin
bbtPrimeiro.Enabled := False;
bbtAnterior.Enabled := False;
1
Exceção para os que não deverão ser editados pelo usuário, isto é, serão editados automaticamente pelo
banco de dados, exemplo: Campo Código do Cliente = Auto numeração, pois estes campos nunca será
habilitado.
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
5
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
bbtProximo.Enabled := False;
bbtUltimo.Enabled := False;
bbtAtualizar.Enabled := False;
bbtEditar.Enabled := False;
bbtInserir.Enabled := False;
bbtExcluir.Enabled := False;
bbtGravar.Enabled := True;
bbtCancelar.Enabled := True;
DBEdit2.ReadOnly := False;
DBEdit3.ReadOnly := False;
DBEdit4.ReadOnly := False;
DBEdit5.ReadOnly := False;
DBCheckBox1.ReadOnly := False;
DBEdit2.SetFocus;
TabelaVazia;
end;
5º Configurar a ação dos botões gravar e cancelar operações em registros.
Resolução:
Botões Gravar V e Cancelar X
Chamar os métodos Post ou Cancel;
Chamar o procedimento Rolagem.
Procedimento Rolagem: Habilita os botões de rolagem (Primeiro, Anterior, Próximo,
Último), os botões de Inserção, Edição, Exclusão e Atualização dos registros da tabela,
desabilita os botões para a Gravação e para Cancelar a operação, habilita a propriedade
ReadyOnly de todos os objetos vinculados aos campos do banco de dados1 e verifica se a
tabela está vazia através do procedimento TabelaVazia descrita a cima, atualizando a
regularização dos botões caso a tabela tenha sido aberta para inserção e não tenha sido
inserido nenhum registro;
procedure TfrmPaciente.Rolagem;
begin
bbtPrimeiro.Enabled := True;
bbtAnterior.Enabled := True;
bbtProximo.Enabled := True;
bbtUltimo.Enabled := True;
bbtInserir.Enabled := True;
bbtEditar.Enabled := True;
bbtExcluir.Enabled := True;
bbtAtualizar.Enabled := True;
bbtGravar.Enabled := False;
bbtCancelar.Enabled := False;
DBEdit2.ReadOnly := True;
DBEdit3.ReadOnly := True;
DBEdit4.ReadOnly := True;
DBEdit5.ReadOnly := True;
DBCheckBox1.ReadOnly := True;
TabelaVazia;
end;
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
6
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
6º Configurar a ação do botão excluir (delete)
Resolução:
Botão Excluir Verificar: Se a tabela não está no inicio e no final ao mesmo tempo (BOF = True) e (EOF =
True);
Se não, perguntar ao usuário se ele tem certeza que quer excluir o registro corrente;
Se sim, excluir e Verificar se a tabela está vazia através do procedimento
TabelaVazia.
Se não, não faça nada.
procedure TfrmPaciente.bbtExcluirClick(Sender: TObject);
begin
if (dmClinica.tbPaciente.Bof = False) and (dmClinica.tbPaciente.Eof
= False) then
begin
if (MRYes = Application.MessageBox('Certeza?!', 'Remover
Registro!', MB_YESNO + MB_ICONQUESTION)) then
begin
dmClinica.tbPaciente.Delete;
TabelaVazia;
end;
end;
end;
7º Fechar a tabela (Close) no procedimento de evento OnClose do formulário.
procedure TfrmPaciente.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dmClinica.tbPaciente.Close;
end;
Obs: O botão atualizar (Refresh) é o único que não precisa de tratamento personalizado para
ser implementado.
No final a tabela terá uma aparência similar a apresentada na Figura 4 abaixo, porém, sua
funcionalidade é o verdadeiro diferencial entre usar uma ferramenta pronta e programar
funcionalidades personalizadas na aplicação.
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
7
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
Figura 4 – Formulário paciente totalmente personalizado e funcional.
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
8
ETEC DR. EMÍLIO HERNANDEZ AGUILAR
Programação de Computadores II
Profores: Gilberto Braga e Renato Candini
Exercícios
O projeto anterior propunha um formulário Principal que trazia, através de menu, três outros
formulários (Paciente, Médico e Consulta). A proposta é, com base na personalização
realizada no formulário paciente com o objetivo de substituir DBNavegator por botões
personalizados SUBSTITUA OS DOIS DBNAVEGATORS DOS FORMULÁRIOS CONSULTA E
MÉDICO POR BOTÕES e experimente-os para saber se você obteve botões funcionais para
trabalhar com os registros da tabela.
Obs: Use o Database Desktop para, eventualmente, abrir e fechar a tabela com o propósito de
ver se as alterações foram realmente efetivadas na tabela.
Rodovia Pref. Luiz Salomão Chamma, S/N Km 41 – Pouso Alegre – CEP 07895-340
Franco da Rocha – SP – Brasil - Telefones (11) 4443-6110/4449-3115
E-mail: [email protected] Site: www.etefran.com.br
9
Download

Analisando e comparando as funções do DBNavegator