Artigo Clube Delphi Edição 1 - Controle de Biblioteca
Artigo da Revista Clube Delphi Edição 1.
Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Controle de Biblioteca
Esta parte do jronal talbez seja a mais importante para nós. Aqui vocês encontrarão mensalmente um curso passo a passo, com a nossa ferramenta preferida. Como o tema do nosso 1º curso, escolhi o desenvolvimento de um sistema de pequeno porte, acreditando que este exemplo possa ajudar a quem esteja iniciando ou atp mesmo para quem já começou algum sistema, mas tem dpuvidas sobre como terminá-lo. Com este projeto, gostaríamos de eleiminar várias dúvidas comuns, tais como pesquisar em um DbEdit, imprimir etiquetas, fazer validações, e outras mais.
Para não termos o trabalho de refazer o sistema de locadora pela 36ª vez, escolhi um controle de biblioteca. Mostrarei as partes básicas dos sistema que serão: um cadastro de livros e um de leitores, um controle de empréstimos (saída) e devoluções de livros (entrada). Os livros poderão permanecer com o leitor até no máximo 15 dias. O sistema alertará quando existirem leitores em atraso.
Eis um resumido DER do sistema:
Todos os leitores serão cadastrados na tabela de leitores. Os livros serão cadastrados na tabela livros e seus exemplares estarão na tabela exemplares. Os empréstimos e devoluções serão cadastrados na tabela empréstimos. Os livros emprestados estarão em livrosemp.
Crie as tabelas utilizando o Database Desktop. Todas serão do formato Paradox 7.0. não crie nenhum tipo de regra de integridade nas tabelas, pois validaremos tudo validaremos tudo no código. Escolhi esse método porque as regras de integridade no paradox são muito boas, mas quando funcionam. Quando uma das tabelas relacionadas dá problema, todas as outras não abrem e a manutenção torna-se muito mais difícil. Realmente não aconselho este tipo de validação usando o Paradox. Considero muito mais interessante em um banco de dados cliente – servidor, onde o ganho será real. Abordaremos bancco da dados cliente-servidores em futuras edições.
Eis a estrutura das tabelas:
Estas estruturas foram criadas visando o melhor aproveitamento didáticoo.
Por euqnaot, o único índice secundário que criaremos será para a tabela leitores. Os outros mostrarei conforme seus respectivos formulários forem aparecendo. Para criar um índice secundário com o Database Desktop, selecione Secondary Indexes no combobox Table Properties. Clique em define, para a caixa de diálogo Define Secondary Index ser mostrada. Dê um clique duplo no campo nome, para selecioná-lo. Clique em OK e digite IngNome como nome deste índice, que onrdenará a tabela pelo campo nome do leitor.
Devemos também criar uma nova base de dados no BDE Administrator. Entre no BDE Administrator, selecione File, New Object. Uma caixa de diálogo será mostrada, perguntado o tipo da base de dados. Escolha Standar. Chame a base de dados bíblio, e direcione para o caminho do banco de dados na propriedade Path. Salve o arquivo e feche o BDE Administrator.
Agora crie um novo projeto no Delphi (File – New Application) e salve-o. podemos chamar o projeto de biblioteca e a unidade de principal, pois este será o formulário principal de aplicação. Mude as pripriedades deste form de acordo com a tabela abaixo:
Name |
FrmPrincipal |
ShowStyle |
wsMaximized |
Caption |
Controle de Biblioteca |
Não trabalarei esta aplicação utilizando formulários MDI. Perderei alguns recursos interessantes, como a possibilidade do usuário entrar na tela de relatórios ou de consulta euqnato cadastra. Mas em compensação, a quantidade de validações que teremos que fazer (como entrar na mesma tela várias vezes, abrir vários cadaastros relacionados, etc...) será muito grande, não valento a pena tanto esforço só por causa do MDI. Em termos de custo x benefício, considero o uso de forms modais mais interessante.
Bom, agora criaremos nossa árvore de menus: coloque um componente TmainMenu no form, e clique duas vezes sobre ele para brir o Menu Editor, como mostra a figura 1.
Figura 1
Para contruir o menu, clique sobre o item de menu no Menu Editor e altere a sua propriedade Caption. Crie a árvore de acordo com a tabela abaixo:
Cadastro
Leitor
Livro/Exemplar
Controle
Empréstimo/Devolução
Consultas
Leitores
Livros
Relatórios
...
Vamos criar um novo formulário, que será a tela de cadastro de leitores. Clique no menu File, opção New Form. Salve este novo form com o nome de CadLeitor.pas. altere as proproedades do form de acordo com a tabela abaixo
Vamos associar esta tela ao formulário principal:
Selecione FrmPrincipal e clique duas vezes sobre o objeto TmainMenu do formulário. A janela Menu Editor será mostrada. No menu Cadastro, clique no item Leito, para abrir o evento OnClick desta opção. Neste evento inclua a linha abaixo:
Procedure TFrmPrincipal.Leitor1Click(Sender: TObject);
begin
FrmCadLeitor.ShowModal;
end;
O método Show Modal abre o formulário forma Modal (o controle só retorna a aplicação após o formulário ser fechado).
Para que o fomulário FrmPrincipal possa chamar o formulpario FrmCadLeitor, devemos declarar sua unidade na cláusula uses do formulário chamador:
var
Form: TForm1;
implementation
uses Unit2; //insira o código aqui
A figura 2 mostra o form FrmCadLeitor depois de pronto.
Figura 2
É importante notar que muitas pessoas tem dificuldade em desenvolver com Delphi, por uma simples questão de como modelar a interface. Muitos que migram de ferramentas DOS para linguagens visuais, comentem o erro de fazer a forma de uso do sistema, do mesmo jeito que as antigas aplicações. Validações campo a campo de alteração, entre outras, não funcionam tão bem num ambiente onde o mouse está presente. Ao criar um sistema para windows, não se prenda a modelos de interface antigos, remodele a idéia de como usar o software.
No nosso caso, a interface funcionará da seguinte forma:
Ao entrar na tela, todos os controles de edição estarão desabilitados. Os objetos ativos serão os botões de inclusão, alteração e exclusão. Ao clicar em um destes botões, os objetos de edição ficarão ativos, juntamente com os botões confirmar e cancelar, enquanto incluir alterar e excluir serão desabilitados. Confirmando ou cancelando, o processo se reverterá, e assim por diante
Quando criamos um formulário que acessa dados, teremos basicamente três tipos de objetos: o objeto de acesso aos dados, os objstos de interface com o usuário e o objeto que faz a conexão entre eles. Veja o gráfico abaixo:
Começaremos colocando os objetos de acesso a dados. Cloque na palheta Data Access e selecione o objeto Ttable. Clique no form para criar uma instância deste objeto.
Vamos configurá-lo para que aponte para nossa tabela leitores. Altere suas propriedades de acordo com a tabela a seguir:
DatabaseName |
Biblio |
TableName |
Leitor.DB |
Name |
TbLeitor |
Agora criaremos o objeto de conexão. Clique na palheta DataAcess e selecione o objeto TdataSource. Este objeto estará ligado ao Ttable. Faça esta ligação mudando suas propriedades de acordo com a tabela abaixo:
Finalmente, vamos criar os objetos de edição (interface com o usuário). Não colocaremos os objetos diretamente no formulário, mas dentro de um objeto Tpanel. Explicarei mais adiante a função deste Painel.
Clique na palheta Standard e selecione o objeto Tpanel. Altere suas proproedades de acordo com a tabela:
Escolhendo alTop para a propriedade align, o painel estará sempre no topo do formulário.
Seguondo a figura 2, coloque 6 objetos Tlabel (palheta Standard) e configure suas propriedades:
Alinhe os objetos de acordo com a figura 2. Não esqueça que devem ficar dentro do PanelDados.
Agora criaremos os objetos de edição. O primeiro será referente ao campo código, e não poderá ser editado (pois o campo é do tipo autoincrement).
Para isto, usaremos o objeto TDBText. Cloque na palheta DataControls e selecione TDBText. Mude suas propriedades de acordo com a tabela abaixo:
Na propriedade DataSet, especifique a conexão deste objeto de interface com o objeto de conexão (DSLeitor – como mostra o gráfico 1), e por sua vez se conecta ao objeto de acesso a dados (TbLeitor).
Na propriedade DataField, especifique o campo na qual o objeto estará conectado, que no nosso caso, pe o campo código.
O próximo campo é o NOME. Para este, usaremos um objeto TDBEdit. Clique na palheta DataControls e selecione TdbEdit. Altere suas propriedades de acordo com a tabela a seguir:
Os campos endereço, telefone, nascimento e CPF também serão editados através de caixas de edição. Colque os objetos TdbEdit referentes e altere suas propriedades de acordo com a tabela:
Para o campo estado Civil, usaremos um objeto TdbRadioGroup, como mostra a figura 2. selecione-o e altere suas proprieadades de acordo com a tabela:
A propriedade itens indica o que será mostrado na tela, enquanto a propriedade Values é o que será salvo na tabela. Por exemplo, quando for selecionado Casado, a letra C será gravada no campo Estado Civil.
Para o campo Ativo, usaremos um TDBChekBox, mostrado na figura 2. Selecione-o e altere suas propriedades de acordo com a tabela abaixo:
E por fim, o campo escolaridade, na qual preferi usar um objeto TdbComboBox, mostrado na figura 2. Selecione-o e altere suas propriedades:
Toda interface de acesso aos dados está pronta. Alinhe os objetos de acordo com a figura 2. partiremos agora ao código:
Iniciarei inserindo os botões no formulário. Coloque 6 botões e alinhe-os de acordo com a figura 2 altere suas propriedades de acorod com a tabela a seguir:
Quando os botões incluir alterar e excluir estiverem ativos, os botões confirmar e cancelar estarão desabilitados, e vice-versa. Isto será feito através da propriedade Enabled dos botões. Poderíamos fazer este controle no evento click dos boçtoes porém esta forma não é a mais correta. Teríamos o mesmo código duplicado 5 vezes, o que pode causar o aparecimento de erros. O ideal é criar um procedimento de ControlaBotoes.
Para criar um procedimento no delphi, precisamos declarar seu cabeçalho na seção type, da seginte forma:
Este procedimento receberá um parâmetro chamado ativa, que habilitará ou não os botões. Declare o copor da procedure:
A base é o botão incluir; qunadoo quisermos ativá-lo, passaremos true como parâmetro, ativando também os botôes alterar e excluir, e desabilitando os botões confirmar e cancelar.
Agora basta usarmos uma procedure. Nos eventos click dos botões incluir. Alterar e excluir, chame o procedimento passando false como parâmetro (pois ao clicar nestes botões, os mesmos devem ser desabilitados).
Procedure TFrmCadLeitor.btIncluirClick(sender:Tobject);
Begin
ControlaBotoes(FALSE);
End;
Procedure TFrmCadLeitor.btAlterarClick(sender:Tobject);
Begin
ControlaBotoes(FALSE);
End;
Procedure TFrmCadLeitor.btExcluirClick(Sender:Tobject);
Begin
ControlaBotoes(FALSE);
End;
Procedure TFrmCadLeitor.btConfirmarClick(Sender:Tobject);
Begin
Controlabotoes(TRUE);
End;
Procedure TFrmCadLeitor.BtCancelarClick(Sender:Tobject);
Begin
ControlaBotoes(TRUE);
End;
Vamos codificar a inclusão. No evento onclick do botão Incluir, digite o código a seguir:
Procedure TfrmCadLeitor.
btIncluirClick(sender:Tobject);
Begin
TbLeitor.append;
DbNome.SetFocus;
ControlaBotoes(FALSE);
End;
Todos os métodos de acesso a tabela serão executados através do objeto Ttable. O método de inclusão na tabela é o APPEND.
A seguir vem a linha DBNOME.SETFOCUS, que joga o cursor para a caixo de edição DBNOME. Por fom, a procedure ControlaBotoes.
Vamos ao botão Confirmar:
Procedure TFrmCadLeitor.
btConfirmarClick(Sender:Tobject);
Begin
If (tbLeitor.State=dsinsert)
or (tbLeitor.State=dsEdit) then
TbLeitor.Post;
ControlaBotoes(TRUE);
End;
Quando criamos um novo regirstro no Delphi, ele não vai diretamente para a tabela. É necessário executar o método POST para que este seja salvo. Não confunda o método POST com o comando COMMIT do clipper. O COMMIt executa a gravação dos dados em disco, enquanto o POST grava o registro no BUFFER. O post trabalha em conjunto com o append.
No botão confirmar, faço uma comparação antes do método post:
If (tbLeitor.State=dsinsert) or
(tbLeitor.State=dsEdit) then
Ou seja, se a tabela estiver em modo de inserção ou de ediçãi (alteração), significa que o posso exetucar o método post. Caso contrário, significa que o usuário está confirmando uma exclusão. O código para exclusão será mostrado mais adiante.
Nosso formulário já está habilitado para inclusão de regristros. Porém, deixei algo a ser feito: o usuário pode manipular os controles de edição sem clicar no botão incluir, o que quebraria a lógica de nossa aplicação. Isto é simples de ser resolvido: no procedimento ControlarBotoes, inclua a cláusula:
Procedure TfrmCadLeitor.ControlaBotoes(Ativa:Boolean);
Begin
BtIncluir.Enabled:=Ativa;
BtAlterar.Enabled:=Ativa;
BtExcluir.Enabled:=Ativa;
Btconfirmar.Enabled:=not ativa;
BtCancelar.Enabled:=not ativa;
DsLeitor.Enabled:=not ativa;
End;
Alterado a propriedade enabled do objeto DsLeitor (objeto de conexão), nós podemos habilitar ou desabilitar a entrada de dados. No caso, o objeto será habilitado ou não de acorod com a situação dos botões.
Vamos para o próximo passo, o botçao alterar. A nossa alteração funcionará da seguinte forma: ao clicar no botçao allterar, uma tela de consulta será chamada. O usupario selecionará o regristro a ser alterado e clicará em OK. O regristo será mostrado em FrmCadLeitor para ser alterado, bastando o usuário clicar em confimar oucancelar. A construção do fomulário será motrada adiante.
Primeiramente, camos criar uma variável chamada Cod Leitor, que será utilizada globalmente. Declare esta variável no formulário principal da aplicação:
UNIT PRINCIPAL.PAS
Type
.
.
.
var
frmPincipal.TfrmPincipal;
Codleitor: integer;
Para que a variável CodLeitor possa ser acessada a partir de FrmCadLeitor, devemos declarar a unidade principal em seu cabeçalho, como segue:
interface
uses principal, windows, classes, ...
Passarei agora ao evento click do botão alterar
Procedure TFrmCadleitor.
btalterarClick(Sender:Tobject);
Begin
CodLeitor:=-1;
FrmConsultaLeitor.Showmodal;
If codLeitor>0 then begin
Tbleitor.Findkey([codLeitor]);
Tbleitor.Edit;
dbNome.Setfocus;
ControlaBotoes(FALSE);
End;
End;
Vamos analisar passo a passo:
Primeiro inicializo a variável codLeitor com o valor -1;
Após, executo o formulário FrmConslutaLeitor (mostrado adiante), com show modal;
Se o usuário clicar OK em FrmconsultaLeitor, o código do leitor será atribuído a variável CodLeitor; caso contrário,a variável permanecerá inalterada.
Faço esta comparação na linha:
If codLeitor>0 then begin
Ou seja, se foi selecionado algum registro na tela de consulta, a variável codLeitor conterá um valor diferente de sua inicialização (-1);
Então, é feita a pesquisa deste registro em TbLeitor:
TbLeitor.findkey([CodLeitor]);
O método FindKey pesquisa um valor exatamente igual, utilizando o índice atualemnte selecionado. Como não foi selecionado nenhum índice a chave primária é assumida (campo código).
A seguir, coloco a tabela em modo de edição e jogo o cursor para objeto DBNOME:
Tbleitor.Edit;
DbNome.SetFocus;
Todas as alterações feitas após o método Edit, devem ser confirmadas com POST, como no método append.
Não é preciso fazer nenhuma alteração no botão confimar.
Botão cancelar:
Procedure TFrmCadLeitor.
btCancelarClick(Sender:Tobject);
Begin
If (TbLeitor.State=dsEdit)
or (TbLeitor.State=dsinsert)
then
TbLeitor.Cancel;
ControlaBotoes(TRUE);
End;
O métido cacel desfaz o comando append ou edit dado anteriormente. O botão excluir funciona de forma parecida com alterar:
Procedure TFrmCadLeitor.
btExcluirClick(Sender:Tobject);
Begin
CodLeitor:=-1;
FrmConsultaLeitor.ShowModal;
If (CodLeitor>0) then begin
PanelDados.Enabled:=False;
ControlaBotoes(FALSE);
End;
End;
A funcionalidade do objeto panel Dados entra aqui: ao clicar no botão excluir, o objeto panelados é desabilitado, para que o usuário não altere os dados ao clicar no botão excluir.
E alteramos o botão confirmar, para que possa confirmar a exclusão:
Procedure TFrmCadLeitor.btconfirmarClick(Sender:Tobject);
Begin
If (tbLeitor.State=dsinsert) or
(tbLeitor.State=dsEdit) then
TbLeitor.Post
Else begin
TbLeitor.Delete;
PanelDAdos.Enabled:=True;
End;
ControlaBotoes(TRUE);
End;
Se a tabela não estiver em modo de inclusão ou alteração, o botão confirmar excluirá o regristro. Isto é feito com o método DELET. Logo após o objeto panelados e habilitado, já que o botão excluir o desabilita.
Repare que antes da cláusila else nunca há ponto e vírgula.
A única alteração que precisa ser feita no botão cancelar, é habilitar o objeto panel dados:
Procedure TFrmCadLeitor.BtCancelarClick(Sender:Tobject);
Begin
If (TbLeitor.State=dsEdit)
or (TbLeitor.State=dsinsert)
then
TbLeitor.Cancel
Else
PanelDados.Enabled:=True;
ControlaBotoes(TRUE);
E por fim o botão sair:
Procedure TFrmCadLeitor.BtSairClick(Sender:Tobject);
Begin
Close;
end;
Veremos agora o fomulário FRMconsultaleitor, utilizado nos botões alterar e excluir:
Crie um novo form e salve-o como consultaleitor.pas. altere suas propriedade de acorod com a tabela:
Insira um objeto TLAVEL (palheta standar) e defina sua propriedade caption para “digite o nome a pesquisar” e alinhe-o de acorod com a figura 3.
Ao lado, ponha um objeto TEDIT (palheta Standar). Defina sua propriedade text para “” (vazio).
Agora os objetos Ttable e Tdatasource com suas respectivas propriedades:
Repare que a tabela estará ordenada pelo campo nome, como foi setado em sua propriedade indexname.
Usaremos um objeto grid para exibir todos os regristros da tabela leitor. Clique na palheta DataControls e selecione TDBGrid. A única propriedade que precisamos alterar é dataset, que deve apontar para dsleitor, uma vez que a gra exibirá todos os campos.
E por último, os boçoes OK e cancel. Defina suas propriedades de acorod com a tabela:
A pesquisa serpa feita enquanto o usuário digita o nome do leitor na caixa de edição. Para isto, ecolhi o evento Onchange, que acontece a cada alteração no valor da caixa de edição:
Procedure TfrmConsultaLeitor.Edit1Change(sender:tobject);
Begin
Tbleitores.FindnearEst([Edit1.Text]);
End;
O método findonearest procura a ocorrència mais próxima na tabela. Por exemplo, se prossuirmos os nomes:
MARIA DO CARMO
MARIA JOSÉ
Se usarmos TbLeior.FindnearEst([‘MARIA’]), o primeiro regristro será encontrado, já ‘MARIA J’ encontraria o segundo regristro. Este método funciona apenas com campos do tipo string.
Botão ok:
Procedure TfrmConsultaLeitor.Bitbtn1Click(Sender:Tobject);
Begin
CodLeitor:=TbLeitores.
Fieldbyname('Codigo').asInteger;
Close;
End;
No clique do botão OK, o código do Leitor atualmente selecionado será passado a variável codLeitor, declarada em FRMPRINCIPAL. Para ler o valor de um campo da tabela, usei o método FieldByName. Para usá-lo, basta passar o nome do campo como paramêtro, e definir o tipo do campo como uma subpropriedade.
Tabela.Fieldbyname('Nome_Do_Campo').asTipo_Do_Campo
A definição do tipo do campo no final da expressão parece redundante a princípio, mas é necessária devido as rígidas regras de tipo herdadas do Pascal (linguagem mãe do Delphi).
E por fim, fechamos o form:
Close;
Para usarmos a variável CodLeitor (declarada em FrmPrincipal), é necessário declararmos a UNIT Principal na clásula Uses logo abaixo de Implementation, no form FrmConsultaLeitor:
Implementation
Uses principal;
E finalmente, abrimos a tabela no evento OnShow, e a fechamos no evento Onclose (ambos do formulário):
Procedure
TfrmConsultaLeitor.FrmConsultaLeitorShow(Sender:Tobject);
Begin
TbLeitores.Open;
End;
Procedure
TfrmConsultaLeitor.FrmConsultaLeitorClose(Sender:Tobject);
Begin
Tbleitores.Close;
End;
Pronto! A nossa primeira tela de cadastro está finalizada!
TRATANDO ERROS E VALIDANDO CAMPOS
Deixei como último passo os tratamentos de erro no nosso form. Como não poderia deixar de ser, tratar erros no Delphi é uma tarefa bem simples.
Primeiramente, escolhi o erro mais provável de ocorrer neste form:
O usuário clicar em Alterar ou Excluir com a tabela vazia. Para evitar, basta
modificar os repectivos botões, como é mostrado a seguir:
Procedure TfrmCadLEitor.btAlterarclick(Sender:Tobject);
Begin
If tbLeitor.RecordCount=0
then exit;
CodLeitor:=-1;
FrmConsultaLeitor.Showmodal;
If codLeitor>0 then begin
Tbleitor.Findkey([codLeitor]);
Tbleitor.Edit;
DbNome.Setfocus;
ControlaBotoes(FALSE);
End;
End;
Procedure Tform1.btExcluirClick(Sender:Tobject);
Begin
If tbLeitor.RecordCount=0
then exit;
CodLeitor:=-1;
FrmConsultaLeitor.ShowModal;
If (CodLeitor>0) then begin
PanelDAdos.Enabled:=False;
ControlaBotoes(FALSE);
End;
End;
A propriedade recordCount retorna a quantidade de registros na tabela. Se for igual 0, a tabela, obviamente, estará vazia.
Para validar os campos, basta criarmos uma função de controle na tela de cadastro de leitor (FrmCadLeitor), mostrada a seguir:
Type
TfrmCadLeitor = class(TForm)
.
.
.
private
{ Private declarations }
public
procedure
ControlaBotoes(Ativa:Boolean);
Function EstaCorreto:Boolean
end;
var
FrmCadLeitor:TfrmCadLeitor
Implementation
Function TfrmCadLeitor.EstaCorreto:Boolean;
Begin
Result:=True;
If TbLeitor.Fieldbyname(‘Nome’).asString=’’ then
begin
ShowMessage(‘O nome não pode ficar em branco’);
Dbnome.SetFocus;
Result:=False;
End;
If tbLeitor.Fieldbyname(‘nascimento’).asDateTime>Date then begin
Showmessage(‘data inválida’);
DbNascimento.SetFocus;
Result:=False;
End;
End;
E basta usarmos a função no botão confirmar:
Prcoedure TfrmCadLeitor.btconfirmarClick(Sender:Tobject);
Begin
If (tbLeitor.State=dsinsert) or (tbLeitor.State=dsEdit)then
begin
If EstaCorreto then
TbLeitor.Post Else
Exit;
End Else
begin
TbLeitor.Delete;
PanelDAdos.Enabled:=True;
End;
ControlaBotoes(TRUE);
End;
Podemos também validar o campo CPF. Antes, devemos definir uma máscara para DBCPF. Sempre quando formos definir máscara para objetos linkados (palheta Datacontrol),
a máscara será definida no objeto TTABLE, e não no objeto de edição.
Siga os procedimentos:
Dê um clique duplo no objeto TbLeitor; a janela Fields Editor será mostrada. Clique com o botão direito sobre esta janela, e no menu flutuante, clique em Add All Fields.
Todos os campos da tabela serão mostrados na janela Fields Editor. Cada item da lista foi instanciado como um objeto, representando o respectivo campo da tabela. Clique sobre eles e repare que suas propriedades aparecem no object Inspector.
Selecione o campo CPF e vá na propriedade EditMask. Clique no botão a direita, para a janela Input Mask Editor ser mostrada.
Na caixa Input Mask, digite a máscara de CPF, 999999999-99, e clique em OK. Execute o programa e repare que o objeto DbCPF reflete a máscara selecionada.
Agora só falta fazer a validação do CPF. Para isto, utilizei a função ValidaCPF”, listada abaixo:
Basta chamarmos a função em EstaCorreto:
Function TfrmCadLeitor.EstaCorreto:Boolean;
Begin
Result:=True;
if TbLeitor.
Fieldbyname(‘Nome’).asString=’’ then
begin
ShowMessage(‘O nome não pode ficar em branco’);
Dbnome.SetFocus;
Result:=False;
end;
if tbLeitor.Fieldbyname
(‘nascimento’).asDateTime>Date then
begin
Showmessage(‘data inválida’);
Dbnascimento.SetFocus;
Result:=False;
end;
if not (ValidaCPF(Tbleitor.Fieldbyname(‘CPF’).asString)) then
begin
Showmessage(‘CPF inválido’);
DBCPF.SetFocus;
Result:=False;
End;
End;
Considerações Finais
Na próxima edição do jornal continuaremos este pequeno sistema. É claro que este tipo de interface não é a única, nem a melhor que existe. Escolhemos pelo valor didático.
O conteúdo deste artigo e o codigo fonte do formulário estão em
nossa home-page em http://www.clubedelphi.com.br
Espero que tenham gostado, e que este possa ajudá-los
no aprendizado desta agrandiosa
ferramenta.
Qualquer dúvida, crítica ou sugestão, escrevam para: admin@clubedelphi.com.br
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo