@Fuerchau,

ich habe mich villeicht falsch ausgedrückt; ich meinte es in etwa so:

Code:
 *-------------------------------------------------
 ***** für SQL Statement                           
 *-------------------------------------------------
D SIDX1           S              5  0 Inz(1)       
D SIDX2           S              5  0 Inz(1)       
D                                                  
DS00S01L          DS                  OCCURS(5000) 
D   L1TXNR                       6A                
D   L1TXB1                      30A                
 *
DS1PTR            S               *   INZ(%ADDR(S00S01L))   
D                 DS                  BASED (S1PTR)         
DS00S02L                       235A   DIM(5000) DESCEND     
D   L2TXNR                       6A   OVERLAY(S00S02L:1)    
D   L2TXB1                      30A   OVERLAY(S00S02L:*NEXT)
*
 * ANZAHL DER FELDER ( DIM(XX) ) MUSS MIT ANZAHL IN SELECT ÜBEREINSTIMMEN !! 
DIND_ARRAY        DS                  OCCURS(5000)                           
D INDS                           4B 0 DIM(12)
und dann in den C-Bestimmungen

Code:
/free
      #SQLSTM =                                                            
    'Select TXTXNR, TXTXB1, TXTXB2, TXTXB3, TXTXB4, TXTXB5, TXTXB6, ' + 
    'TXTXB7, TXSTK1, TXSTK2, TXSTK3, TXKDF1 from TABD ' +               
    'WHERE TXSART = ''TX'' and TXFIRM = ''1'' and TXWKNR = ''000'' ' +  
    'and TXTXRT = ''PE'' ';                                             
/end-free

 *                           
 * 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                   Eval      SIDX1 = 1                
C                   Eval      %OCCUR(S00S01L) = SIDX1  
C                   DOW       SIDX1 <= I#              
 * Verarbeitung
C                   Move      L1TXNR        S0PERS#    
C                   Movel     L1TXB1        S0NAME     
 *
C                   EVAL      SIDX1 = SIDX1 + 1          
C                   EVAL      %OCCUR(S00S01L) = SIDX1    
C                   EndDo