quarta-feira, junho 03, 2009

Validando Campos no Delphi

Salve,

Um coisa particularmente chata (porém fundamental) é a validação dos campos de um Dataset antes do salvamento. Afim de evitar o uso de estruturas condicionais (vulgo IF) desenvolvi uma rotina que faz essa validação de forma simples, bastando apenas a configuração de algumas propriedades e o uso de apenas um evento.

A primeira coisa a se fazer é setar através do FieldsEditor a propriedade Required dos campos que serão obrigatórios. Aproveite e ajuste também a propriedade DisplayLabel, que será usada pela rotina de validação para exibir uma mensagem amigável ao usuário. A seguir pode ser visto como deve ficar cada campo obrigatório no FieldsEditor:



Agora é necessário criar a function que fará a checagem dos campos. Abaixo temos seu código:

function TfrmExemplo.CheckFields(Dataset: TDataset): Boolean;
var i: Integer;
begin

i := 0;
Result := True;

for i := 0 to Dataset.Fields.Count - 1 do
begin
if (Dataset.Fields[i].Required) and (Dataset.Fields[i].IsNull) then
begin
MessageDlg('
O campo ' + Dataset.Fields[i].DisplayLabel + ' não foi informado!', mtWarning, [mbOk], 0);
Result := False;
Break;
end;
end;

end;

Como podemos ver, a função recebe como parâmetro um TDataset, que pode ADO, DBX, BDE, ClientDataSet, enfim, um Dataset. Dentro dela o campos são varridos e aqueles que forem obrigatórios e tiverem valor = nulo será considerado inválido. Neste caso, a função retorna false.

Feito isso, o próximo passo é codificar o evento OnBeforePost do Dataset, para que através da nossa function, o salvamento seja impedido em caso de algum campo em branco.


procedure TfrmExemplo.cdsImpostoDespesaBeforePost(DataSet: TDataSet);
begin

if (CheckFields(Dataset) = False) then
begin
Abort;
end;

end;

Pronto! Agora, sempre antes do salvamento, os campos de nosso Dataset serão validados e, caso algum campo obrigatório tenha ficado em branco, uma mensagem será exibida. A figura a seguir mostra um cadastrinho onde o usuário tentou salvar e deixou um campo obrigatório em branco. Notem que o registro continuará em edição. Ah! Vc pode compartilhar o evento entre vários Datasets, assim a mesma função valida qualquer campo. Bacana né?



Té+

PS: o crédito pela formatação do código fonte é do programinha Delphi2Html, desenvolvido pelo colega Diego Silva.

7 comentários:

marcio disse...

Poste link onde se baixa esse Delphi2Html

Diego Silva disse...

Fala Fernando!
O Programinha de Formatação está dosponível para download com código fonte no sourceforge.
Segue link: http://sourceforge.net/projects/delphi2html/

Anônimo disse...

muito bom, mas como fazer para que o foco caia no edit do campo.

Anônimo disse...

Muito bom essa forma de validação! Eu acrescentei o comando abaixo abaixo para setar o foco no componente!

Dataset.Fields[i].FocusControl;

fininhus@gmail.com

Fernando Nappe disse...

Bacana Fininhus, com isso a função fica completa.

Té+

Unknown disse...

Muito boa essa função usei aqui no meu programinha e deu certinho ! Valeu mesmo !
abraço

Anônimo disse...

perfeito! estava procurando por isso.