hallo brigitta,

vielleicht habe ich ja doch nicht so genau erklärt wie ich es wollte.

nach den bedingungen, die in einer subroutine laufen, wird die fetch subroutine aufgerufen und die daraus erhaltenen daten zur anzeige gebracht. der zyklus wiederholt sich da sich die bedingungen jederzeit ändern können.

************************************************** **************
* SR000 HAUPT - ROUTINE
************************************************** **************
C SR000 BEGSR
C ExSr SR100
C ExSr SR110
C ER000 ENDSR
************************************************** **************
C/Eject
*---------------------------------------------------------------
* SR100 - Subfile SFL000 initialisieren
*---------------------------------------------------------------
C SR100 BegSr
C Eval RNRA# = 0
C Eval *In80 = '0'
C Write CTL000
C Eval *In80 = '1'
C ER100 EndSr
C/Eject
*---------------------------------------------------------------
* SR110 - Subfile SFL000 füllen
*---------------------------------------------------------------
C SR110 BegSr
*
/Free
If C0PNR# <> *Zeros;
#SQLSEL = ' and TXTXNR = ' + %Char(C0PNR#);
EndIf;
If C0NAME <> *Blanks;
#SQLSEL = ' and TXTXB1 like ''' + %Trim(C0NAME) + '%''';
EndIf;
If C0ART <> *Blanks;
#SQLSEL = ' and TXTXB4 like ''' + %Trim(C0ART) + '%''';
EndIf;
If C0KFZ <> *Blanks;
#SQLSEL = ' and TXTXB5 like ''' + %Trim(C0KFZ) + '%''';
EndIf;

Select;
When (*In31 = '1' and *In21 = '1') or (*In34 = '1' and *In21 = '1');
#SQLSTM = #SQLSTM + #SQLSEL + #SQLORP;
When (*In31 = '1' and *In21 = '0') or (*In34 = '1' and *In21 = '0');
#SQLSTM = #SQLSTM + #SQLSEL + #SQLORN;
When *In32 = '1' and *In21 = '1';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINB + #SQLOR + #SQLSEL + #SQLORP;
When *In32 = '1' and *In21 = '0';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINB + #SQLOR + #SQLSEL + #SQLORN;
When *In33 = '1' and *In21 = '1';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINS + #SQLOR + #SQLSEL + #SQLORP;
When *In33 = '1' and *In21 = '0';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINS + #SQLOR + #SQLSEL + #SQLORN;
EndSl;

/End-Free
C ExSr SR112
C Eval SIDX1 = 1
C Eval %OCCUR(S00S01L) = SIDX1
C DOW SIDX1 <= I#
C Add 1 RNRA#
C Move ' ' S0AUSW
C Move L1TXNR S0PERS#
C Movel L1TXB1 S0NAME
C Movel L1TXB2 S0INFO
C Movel L1TXB4 S0ART
C Movel L1TXB6 S0KFZ
C Movel L1STK1 S0STK1
C Movel L1STK2 S0STK2
C Movel L1STK3 S0STK3
C Write SFL000
C EVAL SIDX1 = SIDX1 + 1
C EVAL %OCCUR(S00S01L) = SIDX1
C EndDo
*
C ExSr SR140
C ER110 EndSr
*---------------------------------------------------------------
* SR112 - alle auslesen
*---------------------------------------------------------------
C SR112 BegSr
C CLEAR *ALL S00S01L
*
* Statement vorbereiten
*
C/EXEC SQL
C+ PREPARE S1 FROM: #SQLSTM
C/END-EXEC
*
* Cursor defnieren
*
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR S1
C/END-EXEC
*
* Cursor schliessen
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
* Cursor öffnen
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
* alle Zeilen laden
*
C Eval SIDX2 = 5000
C/EXEC SQL
C+ FETCH FROM C1 FOR :SIDX2 ROWS INTO :S00S01L:IND_ARRAY
C/END-EXEC
*
C Eval I# = SQLERRD(3)
*
* Cursor schliessen
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC

C ER112 EndSr
C/Eject
*---------------------------------------------------------------

wie man sehen kann wird der cursor am ende der verarbeitung geschlossen.

also warum funktioniert es trotzdem nicht ???