[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Array mit Sql befüllen

    Hallo,

    ich fülle per Sql ein Array.

    Code:
    D SqlArray        DS                  Qualified inz DIM(999)      
    D  QQTEXT                       10A                               
    D  QQKZ1                         1A                               
    D  QQKZ2                         1A                               
    D  QQKZ3                         1A                               
    D ArraySize       S              5I 0 inz(%Elem(SqlArray))        
    D Index           S              5  0 inz(0)                      
    D SqlEof          c                   const('02000')              
     
    :
    :
    exec sql                                       
      declare Input cursor for                     
      select W1TXT, W1KZ1, W1KZ2, W1KZ3        
      from ZW1                                 
      WHERE Z1KZA = 'J' AND Z1AUF = :QQAUF       
      order by Z1LFD#;                             
                                                  
    exec sql                                       
       open Input;                                 
                                                  
    dou sqlstt >= SqlEof                          
      exec sql                                     
       fetch next from Input                       
       for :ArraySize rows                         
       into :SqlArray;                             
    enddo;
    Anschließend hätte ich gerne mit der BIF %LOOKUP das Feld QQTEXT in der Datenstruktur/Array abgefragt.
    Aber leider weiss ich nicht wie ich das richtig angehen soll.

    Ich hätte es auch so probiert, aber leider ohne Erfolg
    Die DS verträgt sich mit dem Sql-Fetch nicht

    Code:
    D MyDS            DS                  Qualified INZ             
    D SqlArray                            DIM(999)                  
    D QQTEXT                        10A   Overlay(SqlArray)         
    D QQKZ1                          1A   Overlay(SqlArray: *Next)  
    D QQKZ2                          1A   Overlay(SqlArray: *Next)  
    D QQKZ3                          1A   Overlay(SqlArray: *Next)
    Dank im Voraus und besinnliche Feiertage

    Tarki

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Ab Release 7.1 ist ein %LookUp auf eine Array-Datenstruktur, bzw. ein Unterfeld in einer solchen Datenstruktur möglich.
    Solange Du noch nicht auf Release 7.1 bist, musst Du halt die 2. Datenstruktur aus der 1. befüllen, oder über Cursor die Sätze einzeln lesen und in die entsprechenden Datenstruktur-Unterfelder füllen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Durch geschickte Definition mit Based-Pointern kannst du das auch hinkriegen:

    D MYDS DS DIM(nnn)
    D F1 10

    D MyPtr s * inz(MyDS(0))
    D MyArray DS based(MyPtr)
    D FX 10 dim(nnn)
    D FX1 10 overlay(FX:1)

    Falls der inz-Ptr so nich geht, kannst du in auch per "eval MyPtr = %addr(Myds(0));" initialisieren.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •