Other people have asked and as far as I can see, the answer is no.
A search of the FreePascal source code shows, TDataSet.GetCurrentRecord(Buffer: TRecordBuffer): Boolean; is not implemented nor is it overrided by TDataSet derived classes.
ActiveBuffer "looks" promising, but a search of FreePascal source also shows TRecordBuffer is db format specific. ie: a Simple Move() instruction didn't work for me either by using MemSize() or RecordSize.
What you are after might (?) be possible via code like below (which
doesnt work as is).
procedure DataSetCopy(ASrc, ADst: TDataSet);
begin
ASrc.First;
while not ASrc.EOF do begin
ADst.Append;
Move(ASrc.ActiveBuffer^, ADst.ActiveBuffer^, ADst.RecordSize);
ADst.Post;
ASrc.Next;
end;
end;
It would seem the problem is, record buffers were never implemented at the TDataSet level, so each derived class implemented it own record buffer system. The code for these caching systems, looks ultra hairy, so I wouldn't even think about a trying to batch copy via TRecordBuffer.
So, no.