[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    163

    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

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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
    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
    Aug 2003
    Beiträge
    163
    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.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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
    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

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    163
    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

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    163
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    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. Systemanruf bei Fehler
    By harkne in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 24-11-15, 14:37
  2. Antworten: 7
    Letzter Beitrag: 23-03-15, 18:21
  3. Fehler beim GET im FTP
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-04-03, 18:15
  4. Fehler in der Lizenzverwaltung??
    By Pia in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-03-03, 13:22
  5. Fehler bei FTP
    By K_Tippi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-12-02, 12:41

Berechtigungen

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