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é?
7 comentários:
Poste link onde se baixa esse Delphi2Html
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/
muito bom, mas como fazer para que o foco caia no edit do campo.
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
Bacana Fininhus, com isso a função fica completa.
Té+
Muito boa essa função usei aqui no meu programinha e deu certinho ! Valeu mesmo !
abraço
perfeito! estava procurando por isso.
Postar um comentário