Criando uma função que retorna os campos alterados em uma tabela
Nesta dica mostrarei como criar um função que receberá como parâmetros um ClientDataSet e um String com os nomes dos campos que serão verificados e retornará um String com o nome do campo alterado, o valor antigo do campo e o valor atual. Eu uso esta função para gravar as alterações na tabela LOG.
Eis o código da função:
function CampoAlterado(ACDS: TClientDataSet; ACampos: String): String;
var
CampoAlt : array of String;
X, Y : Integer;
A, B : String;
begin
Result := '';
Y := 0;
for X := 1 to length(ACampos) do
begin
A := Copy(ACampos, X, 1);
if A = ';' then
begin
Y := Y + 1;
SetLength(CampoAlt, Y);
CampoAlt[Y - 1] := B;
B := '';
end
else
begin
B := B + A;
end;
end;
var
CampoAlt : array of String;
X, Y : Integer;
A, B : String;
begin
Result := '';
Y := 0;
for X := 1 to length(ACampos) do
begin
A := Copy(ACampos, X, 1);
if A = ';' then
begin
Y := Y + 1;
SetLength(CampoAlt, Y);
CampoAlt[Y - 1] := B;
B := '';
end
else
begin
B := B + A;
end;
end;
for X := 0 to Y -1 do
begin
A := ACDS.FieldByName(CampoAlt[X]).OldValue;
B := ACDS.FieldByName(CampoAlt[X]).NewValue;
if A <> B then
Result := Result + 'Alterado o campo ' + ACDS.FieldByName(CampoAlt[X]).DisplayLabel + ' de ' + A + ' para ' + B + #13;
end;
end;
begin
A := ACDS.FieldByName(CampoAlt[X]).OldValue;
B := ACDS.FieldByName(CampoAlt[X]).NewValue;
if A <> B then
Result := Result + 'Alterado o campo ' + ACDS.FieldByName(CampoAlt[X]).DisplayLabel + ' de ' + A + ' para ' + B + #13;
end;
end;
usando a função:
var
Texto : String;
begin
Texto := CampoAlterado(cdsCliente, 'NOME;DATA_NASCIMENTO;');
if Texto <> '' then
begin
Query.SQL.Add('INSERT INTO LOG (DATA, TEXTO) VALUES (CURRENT_DATE, :TEXTO)');
Query.ParamByName('TEXTO').AsString := Texto;
Query.ExecSQL;
end;
end;
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo