[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    16

    ILE RPG / SQL Füllen einer Feldgruppe

    Hallo!

    Gibt es eine Möglichkeit in ILE RPG eine Feldgruppe direkt aus SQL zu füllen?

    Es handelt sich bei dem gewünschten Resultset um ein einzelnes Feld.

    Dachte da an sowas wie Fetch Cursor into Feldgruppe:Index...

    Gruß Holger

  2. #2
    Registriert seit
    Dec 2002
    Beiträge
    301
    Mit diesem kleinen Trick erreicht Du das Gewünschte.
    PHP-Code:
    dTEXTDS           DS                                         
    d TEXT_File                    800A                          
    d TEXT_Array                    80A   Dim
    (10Overlay(TEXTDS
    Beim Fetch gibst Du das Feld TEXT_File an. Anschließend kannst Du über das Feld TEXT_Array auf die einzelnen Elemente zugreifen.
    Frank Hildebrandt

  3. #3
    Registriert seit
    Oct 2005
    Beiträge
    16
    Danke für die schnelle Antwort.

    Da hab ich mich wohl falsch ausgedrückt. Mit einem Feld meinte ich, dass ich im Select nur ein Feld habe und somit keine Unterfelder definieren muss.

    d FG_AUFTRAG S 6 0 DIM(100)
    d IDX S 3 0

    select aunr from Datei where ...


    Alle Auftragsnummern die mir dieser Select zurückgibt sollen in der Feldgruppe FG_AUFTRAG abgelegt werden. Der Index der Feldgruppe ist IDX. Dachte mir, dass ich einen Cursor benötige und diesen dann über einen Fetch in die Feldgruppe schieben kann.

    Ist das überhaupt möglich?

    Gruß Holger

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hallo

    es ist nicht möglich eine Feldgruppe oder einzelne Feldgruppen-Elemente mit embedded SQL direkt anzusprechen.

    Ab Release V5R3M0 ist es jedoch möglich Array-Datenstrukturen zu verwenden und diese direkt zu füllen. Vielleicht hilft Dir das ja weiter:

    PHP-Code:
    D DSArray         DS                  dim(100)           
    D  MyFld                        10A                      
                                                             
    D Elements        S              5I 0 inz
    (%Elem(dSArray))
    D AnzRows         S              5I 0                    
     
    *-------------------------------------------------
    C/EXEC SQL                      
    C
    + Declare MyCsr Cursor for     
    CSelect FieldA From MyTable where ...
    C/End-Exec
                          
    C
    /EXEC SQL Open  MyCsr                                 
    C
    /END-EXEC                                             
                                                          
    C
    /EXEC SQL                                             
    C
    Fetch next from MyCsr                               
    C
    +       for  :Elements rows into :dSArray 
    C
    /END-EXEC                                             
    C                   
    Eval      AnzRows SQLER3         
                                                          
    C
    /EXEC SQL Close MyCsr                                 
    C
    /END-EXEC                                     
     
    /Free                                                 
       
    For Index 1 to AnzRows;                          
           
    Dsply DSArray(Index).MyFld;                    
       EndFor;                                            
       *
    InLR = *On;
    /
    End-Free 
    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

  5. #5
    Registriert seit
    Oct 2005
    Beiträge
    16
    Hallo Forum!

    Da ich mittlerweile über V5R3 verfüge, konnte ich den Vorschlag von Birgitta testen und er hat funktioniert.

    Nur stellt sich mir jetzt ein Problem wenn ich die DS im Programmverlauf anders sortieren will, da es sich bei der DS nicht um ein Array handelt.

    Normalerweise habe ich ein Array mit einer DS wie folgt definiert:

    PHP-Code:
    D                 DS                                         
    D DS_DATEN                            ascend    dim
    (99)      
    D  DA_FARBE                     10    OVERLAY(DS_DATEN:1)    
    D  DA_TYP                        1    OVERLAY(DS_DATEN:*NEXT)
    D  DA_MENGE                     11  2 OVERLAY(DS_DATEN:*NEXT
    Hier kann ich dann nach den Unterfeldern sortieren.
    Da mein SQL sehr umfangreich ist, soll nicht für jede neue Sortierung das SQL neu ausgeführt werden.
    Wie kann ich mein Dilemma lösen? Hat jemand einen Vorschlag?

    Gruß Homue

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    D DSArray DS dim(100)
    D MyFld 10A


    d MyPtr s * inz(DSArray(1))
    D DS based(MyPtr)
    D DS_DATEN ascend dim
    (99)
    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

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. ILE RPG und dynamisches Array
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-10-06, 08:53
  3. embedded SQL in RPG
    By muadeep in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 03-08-06, 13:25
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. embedded SQL in ILE RPG, UPDATE
    By Zupfl50 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-10-04, 21:04

Berechtigungen

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