Olá galera, nesta Quick Tips, irei mostra como validar os campos Required de um TDataSet , antes de gravar.  Evitando assim o erro de “Field 'Codigo' must have a value”.

 

Vamos a implementação, eu fiz um Clientdataset com base de dados em XML, a única coisa que teremos que fazer para termos o funcionamento deste Recurso, é ter um Label associado ao seu DBEdit, DBCombobox, etc, através da propriedades FocusControl, mas ao arrastarmos nossos Fields do ClientDataSet para o Form o Delphi já faz isso.

 

Vamos dar Uses em TypeInfo, para podermos pegar algumas propriedades através de RTTI.

 

Irei criar uma função chamada Valida

 

function TFrmPrincipal.Valida(Frm: TForm): boolean;

var

i: integer;

lbl: TLabel;

ds: TDataSource;

fn: string;

c: TObject;

begin

{Função de validação dos campos Requeridos}

  for i := 0 to Frm.ComponentCount - 1 do

  begin

  if Frm.Components[i] is TLabel then

  lbl := Frm.Components[i] as TLabel;

  lbl.Font.color := clWindowText;

  lbl.Font.Style := [];

  if lbl.FocusControl <> nil then

  begin

    c := lbl.FocusControl;

    if IsPublishedProp(c,'DataSource') then

    begin

     ds := TDataSource(GetObjectProp(c,'DataSource'));

     if IsPublishedProp(c,'DataField') then

       begin

        fn := GetStrProp(c,'DataField');

    {Validando se o campo é required e se esta vazio}

 

        if ds.DataSet.FieldByName(fn).Required then

        if ds.DataSet.FieldByName(fn).IsNull then

        begin

         lbl.Font.Style := [fsbold]; //Negrito

         lbl.Font.color := clred; //Definimos a cor

       end;

      end;

    end;

   end;

  end;

end;

end.

 

ClientDataset onBeforePost, pois antes de executar efetivamente o post no ClientDataSet podemos validar alguma informação.

 

procedure TFromPrincipal.CDSPadraoBeforePost(DataSet: TDataSet);

begin

  if not Valida(self) then

    abort;

end;

 

 

Obs : Uma forma de não precisarmos implementar o evento BeforePost de todos os ClientDataSet de nossa aplicação podemos associar o mesmo evento para todos eles, basta ir no BeforPost de todos e selecionar CDSPadraoBeforePost, assim temos validação para todos os ClientDataSet.

 

Fico por aqui ate à próxima Quick Tips.

 

Um abraço

 

Wesley Y

wyamazack@rwsolution.com.br