Un par de interrogantes:
1. ¿Porque concatenas de esa manera los valores y luego haces un ciclo buscando si el valor de cada registro concuerda?, podrías usar un Locate en el segundo dataset con los valores del primero
Código Delphi
[-]
if DataSet2.Locate('FIELD1;FIELD2;FIELD3', VarArrayOf([Dataset1Field1.Value, Dataset1Field2.Value, Dataset1Field3.Value]), []) then
begin
end;
2. ¿Porque realizas el proceso de filtrado de esa manera en lugar de armar el filtro con el valor de los campos del primer dataset?
Código Delphi
[-]
Dataset2.Filter := Format('(FIELD1 = %s) and (FIELD2 = %s) and (FIELD3 = %s)', [Dataset1Field1.Value, Dataset1Field2.Value, Dataset1Field3.Value]);
Dataset2.Filtered := True;