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