Artigo Clube Delphi Edição 1 - Controle de Biblioteca

Artigo da Revista Clube Delphi Edição 1.

Esse artigo faz parte da revista Clube Delphi edição 1. Clique aqui para ler todos os artigos desta edição


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