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é?

Poste link onde se baixa esse Delphi2Html
ResponderExcluirFala Fernando!
ResponderExcluirO 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.
ResponderExcluirMuito bom essa forma de validação! Eu acrescentei o comando abaixo abaixo para setar o foco no componente!
ResponderExcluirDataset.Fields[i].FocusControl;
fininhus@gmail.com
Bacana Fininhus, com isso a função fica completa.
ResponderExcluirTé+
Muito boa essa função usei aqui no meu programinha e deu certinho ! Valeu mesmo !
ResponderExcluirabraço
perfeito! estava procurando por isso.
ResponderExcluir