[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    904

    Parameter-Uebergabe - RNF5343: Feldgruppe hat zu viele übergangene Indizes

    Ich such mir hier nen Wolf.

    Was mit einem fixed RPGLE Programm funktioniert hat, soll nun plötzlich nicht mehr gehen.
    Dabei will ich doch nur mehrere Arrays in einer Prodzedur als Parameter übergeben und bekomm beim Kompilieren einen RNF5343 Fehler.

    Also:
    DCL-S $ARR char(3) dim(100)

    DCL-PR MyProc;
    *n like($ARR);
    END-PR;

    MyProc($ARR);

    Andersrum läufts. Hat jemand eine Idee?

    Danke.

    p.s. in eine DS möcht ich's halt wirklich nicht verpacken.
    kf

  2. #2
    Registriert seit
    Aug 2014
    Beiträge
    179
    was hälst Du von folgender Idee

    PHP-Code:
    dcl-s    $arr       char(3dim(100);

    $arr(01) = 'AAA';   
                        
    myproc(%addr($arr));

    dcl-proc myproc;                                        
    dcl-pi *n;                                              
            
    array_p     pointer const;                      
    end-pi;                                                 
                                                            
    dcl-s   piarr       like($arrdim(100based(array_p); 
                                                            
      
    piarr(02) = 'BBB';                                    
                                                            
    end-proc
    Viele Grüße
    Rainer

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ich kann da nicht erkennen, dass Arrays beim Like erlaubt wären:
    When the LIKE keyword is specified, the item being defined takes on the length
    and the data format of the item specified as the parameter. Standalone fields,
    prototypes, parameters, and data-structure subfields may be defined using this
    keyword. The parameter of LIKE can be a standalone field, a data structure, a data
    structure subfield, a parameter in a procedure interface definition, or a prototype
    name.
    The data type entry (position 40) must be blank.

    Wenn du also Like verwendest musst du hier (wie der Fehler ja sagt) einen Index angeben, also "like($arr(1))".
    Willst du ein Array komplett als Parameter so stell das Array in eine DS und definiere als Parameter "likeds(MyArrDs)".

    Eventuell wirds klarer wenn du dein "fixed"-RPGLE mal postest um zu prüfen, warum das funktioniert hat.
    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

  4. #4
    Registriert seit
    Jan 2007
    Beiträge
    904
    @Rainer:
    Das möcht ich mir eigentlich nicht antun ;-)
    Hab immerhin in etwa 10 Arrays zum übergeben.

    @Baldur:
    Ich hab's schon befürchtet, irgendwo hab ich's im Hinterkopf, dass es nur noch so geht. Ich versuchs mal. Nach Fixed Methode: DCL-S $ARR char(3) dim(100) und dann CALL xy und PARM $ARR, funktioniert wunderbar. Und in Freeform muss ich halt jetzt eine Prodzedur vorgängig definieren.
    kf

  5. #5
    Registriert seit
    Jan 2007
    Beiträge
    904
    Dank eure Ueberlegungen, mittlerweile hab ich's gefunden.

    In der Tat, produzieren Array-Likes bei Prozeduren wohl keine Fehler im RDi, werden aber nicht als solche bei Parameterübergaben erkannt.

    Heisst nun:

    DCL-S $ARR char(3) dim(100)

    DCL-PR MyProc;
    *n char(3) dim(100);
    END-PR;

    MyProc($ARR);

    und so flutscht es. Nicht schön, aber immerhin (bin kein Freund von doppelten Definitionen, wenn man es referenzieren kann).
    kf

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ich denke mal, dass RDi keinen internen Compiler (incl. Auflösen aller Verweise wie DDS, Copy, Include) verwendet sondern ausschließlich Syntax-Checks macht.
    D.h., der Like ist von der Syntax halt i.O. aber RDi erkennt den Variablentyp nicht.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Auszug aus der RPG-Referenz:

    Note:
    Attributes such as ALTSEQ(*NONE), NOOPT, ASCEND, DESCEND, CONST, dimension and null capability are not inherited from the parameter of LIKE by the item defined. Only the data type, length, format, decimal positions, and CCSID are inherited.

    When LIKE is used to define an item like an array, the DIM keyword is required to define the array dimensions. However, DIM(%ELEM(array)) can be used to define an array with the same dimension as another array.

    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Also muss die obige Deklaration wohl sein:
    like($arr(1)) dim(%elem($arr))
    Ganz schön kompliziert. Da wäre eine DS dann doch einfacher.
    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

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Nein die Definition muss sein:

    Code:
    DCL-S NewArr Like($ARR) Dim(%Elem($ARR));
    Das war übrigens schon immer so! Bei einer Referenz auf eine Feldgruppe wird die Dimension nicht mitgenommen. Damit ist es möglich, Feldgruppen mit dem gleichen Datentypen und Länge jedoch unterschiedlicher Anzahl an Elemente zu definieren.

    Für Array Datenstrukturen gilt übrigens die gleiche Regel

    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das erklärt aber den RNF5343-Fehler mit dem Index nicht.
    Der taucht auch auf, wenn ich in der Verwendung vergesse einen Index anzugebn.
    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. Index Advisor: Was bedeutet "Empfohlene Indizes entfernen"
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 18-11-15, 16:38
  2. Feldgruppe über extern beschriebene Datenstruktur legen
    By beegee in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 27-05-14, 13:56
  3. QRY und PARAMeter
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 28
    Letzter Beitrag: 17-01-08, 11:35
  4. Parameter empfangen in RPG??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 02-04-03, 16:53
  5. Query Parameter
    By Hans Zuther in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-10-02, 16:29

Berechtigungen

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