muy buenísimo tu código, Gracias che.
La única acotación es que al dataset hay que ponerlo en estado de edición o inserción.
procedure TForm1.CopiarRegistros(ADataSet1, ADataSet2 :TDataSet);
var
i: Integer;
begin
AdataSet2.Insert;
// Adataset2.Edit;
for i := 0 to ADataSet1.Fields.Count-1 do begin
ADataSet2.Fields[i].Value := ADataSet1.Fields[i].Value;
end;
Adataset2.Post;
end;