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

    MCH3601 in Prozedur

    Hallo zusammen,

    ich poste die Anfrage hier noch einmal; beim ersten Mal habe ich das falsche Forum erwischt.

    Beim Aufruf einer Prozedur (steht in einem Service Programm) erhalte ich die Fehlermeldungen

    Pointer not set for location referenced.
    Function check. MCH3601 unmonitored by QDBGETKY at statement *N,
    instruction X'0CD1'.
    The call to ADDORD2SHP ended in error (C G D F).

    die Prozedur sieht so aus:


    Code:
    P AddOrd2ShpmOrd  B                   export         
    d                 PI             2                   
    d  pcusno                        6  0 value          
    d  pShipment                     7  0 value          
    d  pOrdno                        6  0 value          
                                                         
    c     Key           klist                            
    c                   kfld                    pcusno   
    c                   kfld                    pordno   
                                                         
    c     key           setll     ssshlc30               
    c                   if        %found(ssshlc30)       
    c                   return    '1'                    
    c                   else                             
                                                         
    c                   eval      CUSNO     = pcusno     
    c                   eval      SSSHPMID  = pShipment  
    c                   eval      ORDNO     = pOrdno     
    c                   write     SSHC30                 
    c                                                    
    c                   return    '0'       
    c                   endif               
                                             
     p                 e
    Im Debugger habe ich lokalisiert, dass der Fehler beim SETLL auftritt. Hat jemand eine Idee, was da falsch läuft?

    Danke

    Hubert

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wo wird denn die Datei definiert ?
    Wann wird diese eröffnet ?

    Eine Serviceprocedure muss alle benötigten Ressourcen beinhalten.
    Eine globale Definition reicht nicht aus.
    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

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    163
    Die Datei wird im Serviceprogramm geöffnet. Ich habe auch versucht, ob der Fehler mit USROPN vermieden wird, hatte damit aber auch keinen Erfolg.
    Das Service Programm enthält 13 (ob das ein böses Omen ist? ) Prozeduren. Ich habe diese Prozedur testweise in einem anderen Serviceprogramm isoliert. Die Fehlermeldung blieb dann aus, aber eine andere Prozedur meldete dann den gleichen Fehler.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dann tippe ich auf die Parameterübergabe.
    Das rufende Programm übergibt die Wert ggf. nicht per Value oder zuwenig Parameter.

    Prüfe den Inhalt der Parameter im Debugger.
    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 2003
    Beiträge
    163
    Anzahl und Art der parameter sind identisch, sie werden alle by value übergeben. Beim debuggen werden auch die erwarteten Werte in den Schlüsselfeldern angezeigt.

  6. #6
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo Hubert,

    ich kann nicht genau sagen ob es daran liegt,
    aber deine Prozedur gibt 2 Stellen zurück.
    Gefüllt wird aber von Dir nur 1n
    Vielleicht stört das ?????

    Gruss
    Michael

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @MK
    Der "return" funktioniert hier wie der "eval", linksbündig mit blanks füllen.
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    ggf. kommt der Compiler (bzw. die Runtime) an dieser Stelle nicht mit den Parametervariablen (value!) zurecht.
    Übertrage diese doch mal in Hilfsfelder, da die Runtime grundsätzlich "Call by reference" benötigt.

    "Call by value" mag aber vom Compiler anders aufgelöst sein, so dass die Runtime hier keinen Zugriff auf die Variablen 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

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    163
    Ich habe den Fehler gefunden:

    In dem Programm wird eine Prozedur eines Service Programms aufgerufen. In dieser Prozedur wird eine Prozedur eines anderen Service Programms aufgerufen. Diese Prozedur hatte ich um einen Parameter (by Reference) erweitert und diese Erweiterung bei einem Prozeduraufruf nicht nachgezogen. Obwohl die Anzahl der Parameter (keine optionalen) abwich hat das Binden problemlos funktioniert. Nur die Ausführung ließ dann zu wünschen übrig.

    @MK Der Parameter war ursprünglich einstellig. in einem anderen Thread hatte ich gelesen, dass es damit manchmal Probleme gibt (ebenfalls MCH3601) und deshalb hatte ich es geändert.

    Danke für eure Unterstützung

    Hubert

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das Binden klappt auch deshalb problemlos, da die Anzahl der Parameter leider immer variabel ist (max. 255).
    Dies lässt sich per %-Funktion oder SDS abfragen.

    Einzig der Compiler prüft die Anzahl der Parameter durch das Prototyping.
    Nicht neu erstellte Programme betrifft das leider nicht.

    Deshalb sollte man bei Parameteränderungen liber eine neue Prozedur erstellen und die alte ruft dann die neue mit der Konvertierung auf.
    Neue Programme werden mit dem neuen Prototyp (gleicher Definitions-Name, aber andere externe Prozedur) gewandelt, der alte Prototyp entfällt.

    Wandelt man nun alte Programme, meldet der Compiler einen Fehler.
    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. MCH3601
    By HPKahn in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 30-01-07, 14:22
  2. Prozedur, in welchem Modul
    By loeweadolf in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-11-06, 15:05
  3. Antworten: 4
    Letzter Beitrag: 23-02-06, 16:01
  4. Rückgabe von 2 Werten aus einer Prozedur
    By BUG in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-10-04, 13:55

Berechtigungen

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