1. Benutz doch Cursors, jede richtige DB hat sowas.
2. Wenn Deine DB sowas wie LIMIT / TOP oder so beherrscht, also das bei einem SELECT nur maximal N Zeilen geliefert werden, dann kannst Du dir die Daten paketweise holen. Dazu erzeugst Du am besten einen Primary Key auf das ID-Feld und dann:
Du rufst die Daten paketweise ab, und zwar so:
"select * from tabelle where ID>

Limit 100" oder bei MSSQL
"select top 100 * from tabelle where ID>

"
beim 1.Aufruf ist 'x' = 0, also bekommst du die obersten 100 Zeilen. Nun kannst Du im Client damit hin und her laufen. Unten angekommen, nimmst Du die ID der letzten Zeile deine Paketes (nenn sie Y) und rufe das nächste Paket ab:
"select top 100 * from tabelle where ID>Y"
Du bekommst automatisch das nächste Paket. So kannst Du sehr einfach vorwärts scrollen,. Mit ein wenig Gehirnschmalz kannst das auch Rückwärts.