[Lazarus] db grid/dataset components that only load currently visible records?
Luca Olivetti
luca at wetron.es
Fri Feb 24 10:44:02 CET 2023
El 23/2/23 a les 17:16, Michael Van Canneyt ha escrit:
write a TDataset descendant tailor made for this
>> application, any pointer on how to write a minimal descendant?
>> I'm looking at the TMemDataset implementation as an example, is it a
>> good one?
>
> As good as any other.
>
>> The idea is to substitute open and scrolling (next/prior/locate/etc.)
>> with the appropriate sql statements to just retrieve a small buffer of
>> data around the current record (I can do that easily enough), though
>> I'm not sure that would be enough to fool the TDBGrid.
>
> I don't know what the grid exactly does, so I cannot advise.
I did some tests and the grid is not a problem (it only fetches the
records that are visible), the TDataset is: either I am blind or the
only way for the TDataset to realize there is data is to fetch every
record and allocate the corresponding buffers.
That's because FRecordCount/FBof/FEof are private
procedure TDataSet.DoInternalOpen;
begin
InternalOpen;
FInternalOpenComplete := True;
{$ifdef dsdebug}
Writeln ('Calling internal open');
{$endif}
{$ifdef dsdebug}
Writeln ('Calling RecalcBufListSize');
{$endif}
FRecordCount := 0;
RecalcBufListSize; <-- this will fetch all the records
FBOF := True;
FEOF := (FRecordCount = 0); <--- FRecordCount must be set
end;
There's no point overriding
GetNextRecords/GetNextRecord/GetPriorRecords/GetPriorRecord (called by
RecalcBufListSize) since I cannot directly modify the private fields of
the TDataSet.
Any idea?
Bye
--
Luca Olivetti
Wetron Automation Technology http://www.wetron.es/
Tel. +34 93 5883004 (Ext.3010) Fax +34 93 5883007
More information about the lazarus
mailing list