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
--
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus