FNeurieser
23-04-12, 18:54
@Fuerchau,
ich habe mich villeicht falsch ausgedrückt; ich meinte es in etwa so:
*-------------------------------------------------
***** 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
/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
ich habe mich villeicht falsch ausgedrückt; ich meinte es in etwa so:
*-------------------------------------------------
***** 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
/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