Aber mit fmAll passiert es nicht.
Bei
fmAll werden alle Datensätze an den Client übertragen und der Cursor danach freigegeben. Daher kommt es in diesem Fall nicht zu einem Deadlock. Bei
fmDemand bleibt der Cursor aber offen, damit die Next Calls auch klappen.
Ich würde es zunächst auch erstmal mit einem
ckStatic Cursor versuchen. Der arbeitet auf einem temporären Snapshot und macht auch keine Locks. Das verlagert den Speicherbedarf allerdings auf den Server, aber der kann da in der Regel besser mit umgehen.
Es gilt aber zu beachten, daß auch bei
fmDemand der lokale Speicher ziemlich anwachsen kann, wenn mit den Next-Calls dann doch alle Datensätze irgendwann im Speicher liegen. Dann hilft nur
Unidirectional auf True zu setzen, damit der Speicher für die vorigen Datensätze auch gleich freigegeben wird. Sollte das nicht gehen, musst du dir ein Verfahren aussuchen, bei dem die Result-Sets kleiner werden.