[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Dec 2005
    Beiträge
    131

    Cursor (open state) prüfen

    Hallo,

    wie kann ich vor einem CLOSE eines Cursors prüfen, ob dieser geöffnet ist?
    Aktuell erzeugen wir durch ein präventives CLOSE ewig viele Joblogeinträge:
    Cursor C1 nicht geöffnet.
    => Ursache . . . . : Der Cursor C1 wurde in einer Anweisung FETCH oder
    CLOSE angegeben, aber der Cursor ist nicht geöffnet.

    Dieses möchten wir gerne verhindern, bzw. sauber abfangen.
    Ich habe in einem screenshot eines Programms gesehen, dass dort eine Prozedur aufgerufen wird, wo eben bei erfolgreicher Prüfung ein CLOSE erfolgt.
    Zumindest ließ der Name darauf schließen (in etwa "CloseCursorIfOpen")
    Leider konnte ich weder den Code dazu sehen, noch konnte ich Kontakt zum Programmierer aufnehmen.

    Da ich davon ausgehe, dass das entweder ein kleiner Schnipsel im RPG ist oder aber eine API, hoffe ich hier auf die (oder eine) Lösung.

    Vielen Dank

  2. #2
    Registriert seit
    Apr 2019
    Beiträge
    43

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    %OPEN funktioniert nicht mit SQL sondern ist eine reine RPGLE-Funktion auf Dateien der F-Bestimmungen.

    Präventive Closes bedeuten ja nichts anderes als dass man nicht weiß was in dem Programm geschieht.
    Generell gibt es eine Option wann ein Cursor automatisch geschlossen wird.

    set option closqlcur = *ENDMOD / *ENDACTGRP;

    Zusätzlich könnte man Hauprprogramme die aus einem Menü aufgerufen werden immer mit ACTGRP(*NEW) umwandeln, dann wird auch alles geschlossen was zu der ACTGRP gehört.

    Ansonsten ist es halt guter Stil, wenn man im Programm Ressourcen freigibt wenn man sie nicht mehr braucht.
    Und wenn ihr halt grundsätzlich einen Close vor einem Open macht dann gibts halt die Joblogeinträge.

    Also bevor man eine Unterroutine verlässt immer überlegen, ob man den geöffneten Cursor in dieser Routine nicht schließt. Dies gilt auch für Fehlerbehandlung.
    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
    Feb 2017
    Beiträge
    41
    Ich habe das auch einige Zeit so gemacht, immer den einen close auf den Cursor abzusetzen bevor der open kommt. Habe mich aber auch an den Meldungen im Joblog gestört.
    Inzwischen gehe ich folgendermaßen vor:
    Zum einem rufe ich im on-exit immer den close cursor auf. Zum anderen rufe ich stumpf den open cursor auf und wenn ich dann den Code -502 (Cursor bereits geöffnet) bekomme, mache ich einen close gefolgt von einem erneuten open. Nach dem open dann nochmal den Code abfragen und wenn alles gut gehts weiter, sonst Abbruch.

  5. #5
    Registriert seit
    Dec 2005
    Beiträge
    131
    Danke für die Tipps - saubere Programmierung ist natürlich das sinnvollste.
    Aber die Abfrage beim OPEN (und anschließender CLOSE + OPEN) werde ich trotzdem mal ausprobieren.

Similar Threads

  1. Artikel: Open-Source in Deutschland
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 31-01-17, 21:04
  2. open : Fehlercode 0P
    By WalterB in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 13-11-15, 13:20
  3. 9P bei open
    By fredywit in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 19-08-15, 14:07
  4. chgpftrg state(*enabled/disabled) Praxiserfahrung?
    By tfroehlich in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 23-07-14, 10:24
  5. Open Software/400
    By Alexander in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 15-11-01, 08:00

Berechtigungen

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