-
Fehler RNX0115
Guten Tag,
ich versuche die Feldinformationen von Displayfiles zu lesen. Dazu habe ich im Netz die Source für ein Service Programm gefunden. Die Darin enthaltene Prozedur wird u.a. mit eine DS als Parameter aufgerufen. Die DS hat dieses Format:
Code:
D FldDtaDS DS occurs(1000)
D #FmtNam 10A
D #FldNam 10A
D #FldLen 5I 0
D #FldPlen 5I 0
D #FldDec 1
D #FldIO 1
D #FldAtr 1
D #FldDTUS 1
D #FldEdt 20A
D #FldRow 10I 0
D #FldCol 10I 0
D #FldCom 4000A varying
Es klappt auch wunderbar, aber wenn ich das Feld #FldCom in ein anderes Feld übertragen will bekomme ich immer die Fahlermeldung RNX0115 "Länge der Variablen variabler Länge liegt außerhalb des Bereichs."
Selbst wenn ich versuche, die Länge zu ermitteln, gibt es diese Fehlermeldung. Egal ob ich %LEN, %SIZE oder ein %SUBST auf die ersten zwei Stellen versuche.
Wie bekomme ich das Feld in ein "normales" Feld, damit ich das Ergebnis in einer Datei speichern kann?
Herzlichen Dankl im Voraus für Eure Hilfe
Hubert
-
Versuch mal die Datenstruktur zu initialisieren, d.h. INZ nach OCCURS(1000).
Außerdem würde ich versuchen anstatt einer Mehrfach-Datenstruktur eine Array-Datenstruktur (Schlüssel-Wort DIM() anstatt OCCURS()) zu verwenden.
Aufbau ist in beiden Fällen der gleiche! Aber bei der Array-Datenstruktur kannst Du die Unterfelder direkt ansprechen, während Du bei der Mehrfach-Datenstruktur zusätzlich ein OCCUR brauchst.
Allerdings gibt es nichts umsonst, d.h. Array-Datenstrukturen müssen qualifiziert (Schlüssel-Wort QUALIFIED) definiert werden und die Unterfelder folglich qualifiziert, d.h. DatenstrukturName(Vorkommen).Feld angesprochen werden.
Birgitta
-
Hallo Brigitta,
hat leider nichts gebracht. Weder INZ noch Array. Im Gegenteil: ich schreibe die Daten per SQL in eine Datei.
Code:
exec sql
insert into doku.DSPFFLD
values(
:#FmtNam,
:#FldNam,
:#FldLen,
:#FldPlen,
:#FldDec,
:#FldIO ,
:#FldAtr,
:#FldDTUS,
:#FldEdt,
:#FldRow,
:#FldCol,
:FeldInhalt
);
Beim Array
Code:
exec sql
insert into doku.DSPFFLD
values(
:FldDtaDS(i).#FmtNam ,
:FldDtaDS(i).#FldNam ,
:FldDtaDS(i).#FldLen ,
:FldDtaDS(i).#FldPlen ,
:FldDtaDS(i).#FldDec ,
:FldDtaDS(i).#FldIO ,
:FldDtaDS(i).#FldAtr ,
:FldDtaDS(i).#FldDTUS ,
:FldDtaDS(i).#FldEdt ,
:FldDtaDS(i).#FldRow ,
:FldDtaDS(i).#FldCol ,
:FeldInhalt
);
bekomme ich schon im Editor die Fehlöermeldung "Token : ungültig. Gültige Token: (. " Anscheinend mag SQL keine Arrays.
-
Könnte ein Definitionsfehler zwischen dir und dem Service liegen.
Schau dir mal die Variable #FldCom als Hexwert an.
Die ersten 2 Stellen sind der Binärwert (int(5)) der Länge und darf natürlich 4000 nicht übersteigen.
Ich vermute einfach mal, das Feld ist gar nicht als Varying definiert.
-
Mir war nicht klar, dass Du die Unterfelder qualifiziert im embedded SQL angeben willst.
Arrays, Array-Datenstrukturen bzw. deren untergeordneten Felder können mit embedded SQL nicht direkt verarbeitet werden. Da muss zunächst umgeladen werden (oder halt doch Mehrfach-Datenstrukturen verwendet werden)
Ebensowenig können mehrfachverschachtelte Datenstrukturen bzw. deren -Unterfelder als Host-Variablen in (embedded) SQL verarbeitet werden.
Birgitta
-
Die Definitionen im Service Programm sind:
Code:
H NoMain
*-------------------------------------------------------------------
* - RtvDspFDesc - Retrieve display file description (QDFRTVFD API)-
*-------------------------------------------------------------------
D RtvDspFDesc PR ExtPgm( 'QDFRTVFD' )
D 8
D 10I 0 Const
D 8 Const
D 20 Const
D 272
D RtvFlds PR N
D QDspFil 20A Value
D QNumFlds 10I 0
D QFlddta Like(FldDtaDS)
D FldDtaDS DS Based (p_FldDtaDS) occurs(1000)
D #FmtNam 10A
D #FldNam 10A
D #FldLen 5I 0
D #FldPlen 5I 0
D #FldDec 1
D #FldIO 1
D #FldAtr 1
D #FldDTUS 1
D #FldEdt 20A
D #FldRow 10I 0
D #FldCol 10I 0
D #FldCom 4000A varying
*---------------------------------------------------------------*
* Retrieve Display File Fields *
*---------------------------------------------------------------*
P RtvFlds B Export
D RtvFlds PI Like(LglTyp)
D QDspFil Like( QNamTyp ) Value
D Numflds 10I 0
D FldDta Like(FldDtaDS)
Die Source dazu habe ich aus dem Midrange Wiki
-
Das Serviceprogramm scheint der Fehler zu sein. Manchmal gibt es einen Wert zurück, der auch in den ersten zwei Stellen Blanks (X'4040') hat. Dazu wird dan eine Feldlänge > 16000 zurückgegeben. Nachdem ich das abgefragt habe, lief es so weit gut, bis ein Fehler im Service Programm auftrat.
Danke für Eure Bemühungen
-
Dann ist da ein Initialisierungsfehler im Serviceprogramm in dem wohl auf die Struktur Blanks gestellt werden an Stelle eines "Clear Struktur", das alle Felder korrekt initialisiert.
Similar Threads
-
By harkne in forum NEWSboard Programmierung
Antworten: 18
Letzter Beitrag: 24-11-15, 13:37
-
By oulbrich in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 23-03-15, 17:21
-
By malzusrex in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 23-04-03, 17:15
-
By Pia in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 17-03-03, 12:22
-
By K_Tippi in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-12-02, 11:41
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks