Pode ser que ajude...
O método abaixo calcula um Hash baseado em todos os campos de um DataSet, menos os campos informados na lista de Campos a ignorar
Uses ACBrUtil ;
...
function CalcHashDataSet(const ADataSet : TDataSet ; Chave : AnsiString = '';
IgnoreFields : TSetOfByte = [] ) : Word ;
var
NFields, I : Integer;
Buffer : AnsiString ;
begin
Buffer := '';
Result := 0;
NFields := ADataSet.FieldCount - 1 ;
For I := 0 to NFields do
begin
if (not (I in IgnoreFields)) and
(LowerCase( ADataSet.Fields[I].FieldName ) 'hash') then
Buffer := Buffer + ADataSet.Fields[I].AsString;
end ;
if Chave '' then
Buffer := StrCrypt( Buffer, Chave );
Result := StringCrc16( Buffer ) ;
end;
[/code]
Exemplo:
sqlDocumento.FieldByName('HASH').AsInteger := CalcHashDataSet(DataSet, 'SuaChave' );