PDA

View Full Version : SQ20226 - Die maximale Anzahl der STACKED - Diagnosebereiche wurde überschritten



DIEVOG
01-03-06, 14:25
Hallo,
ich baue in Delphi über den ODBC Treiber von Client Access 5.7 eine Verbindung zur AS/400 auf (V5R3). Mit Hilfe einer ADOConnection, einem ADODataSet und einer SQL Anweisung "SELECT...FROM...WHERE...WITH >ISOLATION LEVEL<" möchte ich eine Bildschirmtabelle asynchron füllen, da die Herkunftstabelle recht groß ist und der Anwender nicht so lange auf die Anzeige warten soll.

Bevor die Tabelle komplett gelesen wurde, bekomme ich die Fehlermeldung "SQ20226 - Die maximale Anzahl der STACKED - Diagnosebereiche wurde überschritten". Ich habe bereits alle "Isolation Level" beim SELECT ausprobiert.

Hat jemand einen Lösungsvorschlag?

Fuerchau
01-03-06, 15:54
Das Problem ist da wohl eher die Cursor-Art.
Beim Client-Cursor hat ADO die Angewohnheit das komplette Ergebnis ins Recordset zu laden. Der Zugriff auf die RecordCount-Eigenschaft reicht dafür schon.
Wenn das Recordset also sehr groß wird, musst du ggf. einen ForewardOnly-Cursor verwenden, die CachSize/PageSize-Eigenschaften einstellen und NIEMALS vor EOF=TRUE auf die RecordCount-Eigenschaft zugreifen.
Alternativ nimm einen dynamischen Serverside-Cursor. RecordCount liefert dann allerdings immer -1 !

Wenn du das nirgends einstellen kannst, musst du den Select halt in mehrere Schritte zerlegen: Where-Bedingung und passende MaxRecords-Eigenschaft.

DIEVOG
02-03-06, 07:38
Vielen Dank für die Antwort :) ,
das Problem wurde beseitigt. Die von Dir vorgeschlagene Lösung hat aber leider nicht funktioniert.
Ich habe mir nocheinmal das SELECT Statement genauer angesehen. Dabei ist mir aufgefallen, dass ich bei einem LEFT OUTER JOIN ein numerisches Feld (JJJJMMTT) mit VarChar und Concat in ein alphanumerische Feld umwandele (TT.MM.JJJJ). So weit so gut. Der Fehler tritt erst dann auf, wenn ich vor die Umwandlung ein DATE setzte um den alphanumerischen Wert in ein Datum umzuwandeln.
Im Allgemeinen sollte man also bei OUTER JOIN Verbindungen mit Feldumwandlungen sehr vorsichtig sein. ;)