hallo allerseits,

ich habe folgendes problem und bin daher auf der suche nach einer lösung:

aufgrund verschiedener bedingungen werden unterschiedliche sql-statements generiert, die je nach bedingung ausgeführt werden sollen. jetzt habe ich aber das problem das der cursor immer das erste zutreffende statement auswählt und für dieses werte zurückgibt. kann mir bitte jemand erklären warum und ob man das ändern kann ? cursor vernichten oder so in etwa ?

hier die entsprechenden codezeilen für die vorbereitung
/Free
#SQLSTM =
'Select TXTXNR, TXTXB1, TXTXB2, TXTXB3, TXTXB4, TXTXB5, TXTXB6, ' +
'TXSTK1, TXSTK2, TXSTK3 from TABD ' +
'WHERE TXSART = ''TX'' and TXFIRM = ''1'' and TXWKNR = ''000'' ' +
'and TXTXRT = ''PE''';

#SQLINB = 'and TXTXB4 in(''BFS'', ''B40'', ''B60'', ''B100'')';
#SQLINS = 'and TXTXB4 in(''SFS'', ''SR'', ''SI'', ''SAAB'')';
#SQLOR = ' or TXSART = ''TX'' and TXFIRM = ''1'' ' +
'and TXWKNR = ''000'' and TXTXRT = ''PE'' and TXTXB4 = '' ''';
/End-Free

C INITE ENDSR

hier die bedingungen

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

und zu guter letzt das fetch

*
* 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)