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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo