[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    May 2006
    Beiträge
    88

    Danke für die Tips

    Jetzt gehts!!
    Danke für die Tips!!!

    Eine Frage habe ich aber noch:

    Ich rufe die Prozedur in der sich der SQL-Aufruf befindet aus einer anderen Prozedur im selben Programm auf. Wenn ich beim Debugen(STRDBG) in eine Prozedur wechseln will mache ich das über die F22-Taste(Step into) oder ich setze gleich einen Breakpoint (mit F6) in der Prozedure. Will ich aber die Prozedur mit dem SQL-Statment debugen so komme ich nicht in die Prozedur und ich kann diese auch nicht im Debugmodus anzeigen. Es ist wie wenn diese nicht vorhanden ist.

    Das Programm habe ich mit CRTSQLRPGI gewandelt.

    CRTSQLRPGI OBJ(Lib/Programm) SRCFILE(Lib/QRPGLESRC) OBJTYPE(*MODULE)
    Muss ich beim Aufruf der Debugfunktion etwas beachten oder habe ich etwas bei der Umwandlung falsch gemacht?

  2. #14
    Registriert seit
    Dec 2002
    Beiträge
    302
    Beim Befehl CRTSQLRPGI den Parameter DBGVIEW auf den Wert *SOURCE setzen.
    Frank Hildebrandt

  3. #15
    Registriert seit
    May 2006
    Beiträge
    88

    Keine Änderung

    Die Änderung der Generierung hat nichts bewirkt. Zusätzlich habe ich in die Prozedur einen Rückgabewert eingefügt den ich innerhalb der Prozedur stumpf mit einem Wert gefüllt habe. Der Wert ist als VALUE deklariert und wird aber nicht verändert durch den Aufruf der Prozedure.

    P GetBLFOLGE2 B
    D GetBLFOLGE2 PI
    D pMdt like(FRD1.MDT) CONST
    D pBlFolge like(FRD1.BLFOLGE)
    //--------------------
    // Lokale Variablen
    //--------------------
    D vBlFolge S like(FRD1.BLFOLGE) inz
    ‚C/EXEC SQL
    ‚C+ DECLARE C1 CURSOR FOR
    C+ SELECT * FROM SCHUELLER/ARBP2P
    C+ WHERE FERT1B BETWEEN 680 AND 699 AND BLOCKN <> 0
    C+ ORDER BY MDT, BLOCKN, FERT1B, LFDNREH, STKZ2B,
    C+ CASE RLB WHEN 'R' THEN '1' WHEN ' ' THEN '2' WHEN 'L' THEN '3' END
    C+ FOR UPDATE OF BLFOLGE
    ‚C/END-EXEC

    šC/EXEC SQL
    C+ OPEN C1
    ‚C/END-EXEC

    ‚C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1
    ‚C/END-EXEC
    C*-----------------------------
    ‚C* SQLCOD DOUNE 0
    C*-----------------------------
    ‚C/EXEC SQL
    ˆC+ FETCH C1 INTO :BLFOLGE
    šC/END-EXEC
    C*-----------------------------
    C* ENDDO
    C*-----------------------------
    C/EXEC SQL CLOSE C1
    C/END-EXEC
    C*-----------------------------

    C DONE1 TAG
    /FREE

    pBlFolge = 99;
    return;

    /END-FREE

  4. #16
    Registriert seit
    Feb 2001
    Beiträge
    20.743
    Definiere einen Rückgabewert auf dem Interface

    d*Prototyp
    D GetBLFOLGE2 PR 5S 0
    :

    d*Interface
    D GetBLFOLGE2 PI 5S 0
    :
    :
    return BlFolge;

    Oder Übergebe den Paramter nicht als VALUE.
    Dies bedeutet nämlich, dass eine Kopie der Variablen übergeben wird !
    Definierst du einen Returnwert, kannst du das dann auch netter aufrufen:

    NewBlFolge = GetBLFOLGE2(Parameter);

    Achtung:
    Dein DONE1-Tag muss VOR dem Close sitzen, da der Fehler nicht beim Open gemeldet wird. Ansonsten ist es besser SQLCOD = 100 (EOF) abzufragen.
    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. #17
    Registriert seit
    Dec 2002
    Beiträge
    302
    Das Modul muss in jedem Fall mit dem Parameter DBGVIEW(*SOURCE) über den Befehl CRTSQLRPGI umgewandelt werden. Ohne dem geht es in keinem Fall. Jetzt versuch mal noch den. 1. STRDBG PGM(Programmname) 2. Dann drückst Du F14=Mit Modulliste arbeiten. Dann gibst Du vor dem Modul mit der ominösen Prozedur die Auswahl 5=Modulquelle anzeigen
    ein. Dann gehst Du mit dem Cursor auf das Statement mit der ersten C-Bestimmung innerhalb der Prozedur und drückst dort F6=Unterbrechungspunkt hinzufügen. Wenn Du dann dein Programm aufrufst, dann sollte der Debugger in der Prozedur stoppen. Nur noch mal der Vollständigkeit halber. Zuerst mit dem Befehl CRTSQLRPGI das Modul erstellen und dann mit CRTPGM das Programm erstellen.
    Frank Hildebrandt

  6. #18
    Registriert seit
    May 2006
    Beiträge
    88

    Thumbs up Jetzt gehts!!

    Hatte die ganze Zeit das Programm nicht mit CRTPGM umgesetzt. Für die Erstellung eines Moduls oder eines Serviceprogramms haben wir das normalerweise auf ein Kürzel gelegt. Dieses erstellt über einen Programmaufruf die Programme.

    Zu Fürchau:

    Auf einen Parameter möchte ich das Ergebnis nicht legen, weil ich die Funktion wie folgt benutzen will:
    if not GetBlFolge(pMDT :vBlFolge);

    endif;
    Als Rückgabwert erhalte ich einen bolschen Wert der aussagt Fehler oder keine Fehler. Dies ist nicht mehr möglich wenn ich BlFolge als Rückgabewert erstelle.

    Zu Frank Hildebrandt:

    Danke das war der Tip der mir gefehlt hat.
    Manchmal ist man halt nicht auf das naheliegenste.

    Danke nochmal an Euch für die Hilfe bei meinem Problem.

Similar Threads

  1. CREATE VIEW
    By Franz Karl in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-01-07, 09:04
  2. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 19:04
  3. CREATE SQL FUNCTION
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 23-02-06, 11:29
  4. SQL VIEW
    By KM in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 12-01-06, 09:52
  5. Create View über 3 Dateien
    By Mädele in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 24-08-05, 13:26

Berechtigungen

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