[fpc-pascal] Why TSdfDataSet doesn't simply return FCurRec as RecNo?

Joost van der Sluis joost at cnoc.nl
Thu Oct 30 22:29:44 CET 2014


On 10/30/2014 04:34 PM, Michael Van Canneyt wrote:
>
>
> On Thu, 30 Oct 2014, Michael Van Canneyt wrote:
>
>>
>>
>> On Thu, 30 Oct 2014, Luca Olivetti wrote:
>>
>>> Hello,
>>>
>>> TFixedFormatDataSet (ancestor of TSdfDataSet) overrides GetRecNo
>>> (correct) but it does a strange contortion instead of simply returning
>>> FCurRec:
>>>
>>> function TFixedFormatDataSet.GetRecNo: Longint;
>>> var
>>>  BufPtr: TRecordBuffer;
>>> begin
>>>  Result := -1;
>>>  if GetActiveRecBuf(BufPtr) then
>>>    Result := PRecInfo(BufPtr + FRecInfoOfs)^.RecordNumber;
>>
>> The records in the buffer may be in a different order than they are
>> displayed in the grid.
>
> Forget this. I was too quick to respond.
>
> I have done some digging, but cannot find a reason for the current
> behaviour.

Easy: Some systems use the recno as some sort of 'bookmark'. And some 
people insist that this is the correct behaviour for a dataset. (Note 
that for TBufDataset a call to recno is really slow, as it has to 
iterate over all records to get the correct recno.)

So some datasets have recno's that uniquely identify a record. I've 
tried to unify that once, but that was not easily done. So I decided to 
leave this decision to the author of each dataset. Hence the GetRecNo.

But that TDBGrid uses the recno is troublesome... But I don't see a 
better solution.

Joost.




More information about the fpc-pascal mailing list