Um das Speicherproblem zu lösen: Nimm einen Forward-Only Curser. D.h. jeder Datensatz den du schon mal angeschaut hast wird nach aufruf von .Next verworfen.
Alternativ .FetchAll = False setzen.
Um einen Abbruch zu ermöglichen wäre u.U. das
BeforeFetch-Event geeignet.
Windows Vista - Eine neue Erfahrung in Fehlern.