PDA

View Full Version : Array mit Sql befüllen



tarkusch
23-12-13, 19:13
Hallo,

ich fülle per Sql ein Array.


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


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

B.Hauser
25-12-13, 09:06
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

Fuerchau
25-12-13, 14:15
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.