Quick Tip : Validar campos Required em um DataSet

Veja nesta Quick como validar os campos required antes de tentar incluir no DataSet.



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



Artigos relacionados