Nie sprawdziłem ale po mojemu zadziała myk opisany w przed ostatnim poście zresztą pytający potwierdza ale nie wiem co się stanie przy sporej ilości rekordów myślę że może zamulać.
To jest z gruntu parszywy pomysł, a winna jest ta linia:
If Not dataset.Active Or (dataset.RecordCount <= Self.RowCount - 1) Then
Co do zasady, aby mieć poprawną wartość w RecordCount najpierw trzeba pobrać wszystkie dane z serwera.
A to słabo.
Jasne, można to zrobić lepiej, ale sporo zależy od używanych komponentów bazodanowych.
W FireDAC jest (ale ma ograniczenia i to poważne) łatwiej, ponieważ istnieje tryb Live Data Window.
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Browsing_Tables_(FireDAC)
Generalnie to dość skomplikowany temat, jeśli ma to działać z dowolnym zapytaniem SQL.
Po prostu trzeba zaimplementować stronicowanie danych, a to z kolei w połączeniu z komponentami db aware co do zasady nie jest proste.