View Full Version : 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
Frank Hildebrandt
27-06-06, 09:02
Mit diesem kleinen Trick erreicht Du das Gewünschte.
dTEXTDS DS
d TEXT_File 800A
d TEXT_Array 80A Dim(10) Overlay(TEXTDS)
Beim Fetch gibst Du das Feld TEXT_File an. Anschließend kannst Du über das Feld TEXT_Array auf die einzelnen Elemente zugreifen.
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
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:
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
C+ Select 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
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:
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
D DSArray DS dim(100)
D MyFld 10A
d MyPtr s * inz(DSArray(1))
D DS based(MyPtr)
D DS_DATEN ascend dim(99)