[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.939
    Nun werden hier mehrere Themen durcheinander geworfen:

    1. Der Standard-Default für CRTDSPF ist RSTDSP(*YES) zumindest auf allen Systemen die ich kenne.
    Wenn er anders ist, gibt's aus irgendwelchen Gründen einen CHGCMDDFT.
    Ein RSTDSP(*NO) führt mitunter zu seltsamen Verhalten. Wenn eine Programm an Stelle von EXFMT nur Write/Read's verwendet (in COBOL geht das gar nicht anders), kann es mitunter vorkommen, dass bei "Unterbrechungen" der Bildschirm nicht korrekt wiederhergestellt wird. Das Programm wartet auf einem READ aber man kann keine Eingabe mehr tätigen, nochnicht mal F-tasten werden akzeptiert.
    RSTDSP(*YES) verhindert dies.

    2. ASSUME war schon immer nötig, wenn ein Programm ausschließlich ein Fenster mit Window bedient.
    Jeder Open einer DSPF prüft, ob es bereits eine geöffnete DSPF im Callstack übergeordnet gibt. Dieser Inhalt wird beim Open gesichert und beim Close wiederhergstellt falls RSTDSP(*YES) im übergeordneten DSPF angegeben ist.
    Dies führt daher zu dem Verhalten, dass die 1. Anzeige des Fensters klappt, ab der 2. Anzeige meistens nicht. Hier hilft mitunter ein USROPN, so dass ich eben OPEN/CLOSE durchführen muss.
    Noch komplexer wird es dann mit mehreren Ebenen die alle nur Fenster verwenden.

    3. SQL und Native-IO haben nichts gemeinsam. Ein SQL-Connect hat ausschließlich für SQL Bedeutung, normale Datei-Befehle merken davon nichts. Früher (funktioniert heute auch noch) verwendete man im Einzelnen DDMF's mit OVRDBF. Allerdings ist hier die Grenze bei 16 gleichzeitigen Open's und die Voraussetzung SNAoverIP.
    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

  2. #2
    Registriert seit
    Feb 2015
    Beiträge
    19
    Hallo alle miteinander
    Also auf jeden Fall vielen Dank für Eure Hilfe. Ist eine tolle Sache, das mit dem Forum.
    Das Problem des verschwundenen Hintergrund habe ich jetzt so gelöste, dass das erste Window kein Window mehr ist und jetzt funktioniert alles. Hat mich zwar schon gewurmt, dass zweifache Fenster nicht möglich sein sollen, aber ganz pragmatisch ist eine funktionierende Lösung halt das Wichtigste.

    Fuerchau: auch Dir besten Dank bez. SQL und Native IO, ok muss ich halt in diesen Fällen die SQL's einbauen.

    Schönes Wochenende und wenn ich wieder Probleme haben sollte, weiss ich ja jetzt, wohin ich mich wenden kann

    LG Günter

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.939
    Natürlich sind mehrere Fenster möglich.
    Aber du brauchst in jeder DSPF ein Format mit ASSUME.
    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 2015
    Beiträge
    19
    Das habe ich auch und es funktioniert trotzdem nicht

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.939
    Das Problem ist, dass das 2. Fenster das 1. überlagert und den Inhalt sichert.
    Da du dich in COBOL bewegst, wirst du sicherlich noch mit OPM-Cobol also CBL als Typ arbeiten.
    Ändere den Typ mal in CBLLE und mache generell ein Open/Close.
    An der Quelle brauchst du im Gegensatz zu den RPG'lern nichts ändern.

    Manchmal hilft auch USRRSTDSP:
    http://www-01.ibm.com/support/knowle....htm?locale=de
    Damit wird der SAVE/RESTORE bei Fenstern vermieden.
    Wichtig ist natürlich, dass die rufenden Programme ihren Bildinhalt komplett selber wieder herstellen!
    Das ist mitunter bei Subfile's nicht so trivial um z.B. die aktuelle Seite oder den Cursor nicht zu verschieben.
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.939
    Da ist mir ggf. noch was eingefallen.
    Wenn dem ggf. unbekannten übergeordneten Programm geholfen werden soll, kann auch folgendes API helfen:
    http://www-01.ibm.com/support/knowle...st.htm?lang=de

    Vorgehensweise:
    - Sichern des Bildschirminhaltes
    - Darstellen der Fenster mit USRRSTDSP
    - Wiederherstellen des gesicherten Inhaltes
    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
    Feb 2015
    Beiträge
    19
    Lieber Fuerchau
    Nochmals vielen Dank. Wie ich bereits sagte, habe ich das jetzt so gelöst, dass ich nur noch ein Fenster habe und es funktioniert. Sobald ich wieder etwas Luft habe, werde ich Deine Ratschläge ausprobieren.
    Schönen Tag noch
    Günter

  8. #8
    Registriert seit
    Feb 2015
    Beiträge
    19
    Jetzt habe ich noch eine Frage
    Ich muss aus meinem Cobol-Programm direkt via SQL lesen (weil ich via set-connect) in eine andere Systemumgebung gehe. Das habe ich so gelöst, dass ich das in einem Unterprogramm mache. Dort habe ich zwei Funktionen:
    1. Aufsetzen bei einem bestimmten Key
    EXEC SQL DECLARE CRSCTNO CURSOR FOR
    SELECT
    T01.SHORTN,
    T01.CTNO,
    T01.NAMPA1
    FROM VMKJF25001 T01
    WHERE T01.SHORTN >= :SQL-SHORTN
    FOR FETCH ONLY
    END-EXEC.
    2. Sequentielles witerlesen ab dem vorherigen KEY SQL-SHORTN
    Im vorherigen Cobol war dort einfach
    READ VMKJF25001 NEXT
    AT END MOVE 1 TO EOF
    Nun meine Frage: wie schaut den dieser Befehl im SQL aus, existiert dort in "Read next*
    Vielen Dank für Deine Hilfe
    Günter

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.939
    Nun da musst du mal ins SQL-Programmierhandbuch schauen.
    Kurz nur soviel:

    "declare ... Cursor " definiert einen Cursor, entspricht also dem COBOL-Select.
    Nun machst du nur noch
    open cursorname
    fetch Cursorname into ....
    Close cursorname

    Da du auch noch zu einer anderen DB willst benötigst du einen
    exec SQL connect ....
    mit RDB-Namen, User und Kennwort.

    Um zu Connecten benötigst du per WRKRDBDIRE den DB-Namen des Zielsystems.

    Host-Variablen müssen in COBOL zwischen exec SQL begin declare section end-exec und exec SQL end declare section end-exec eingebettet werden.

    Ggf. musst du per CRTSQLPKG die SQL's für das Zielsystem extrahieren wenn dies nicht automatisch passiert.
    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

  10. #10
    Registriert seit
    Aug 2006
    Beiträge
    2.140
    Er hat es in einem alten Thread auch nochmal etwas ausführlicher beschrieben.

    http://newsolutions.de/forum-systemi...ight=cobol+sql

    Wobei ich Deine Konstruktion nicht wirklich verstanden habe.....

    GG

  11. #11
    Registriert seit
    Feb 2015
    Beiträge
    19
    Hallo Fuerchau
    Ich hatte Dir Gestern Abend noch ein mail an Deine Web-Adresse gesandt, aber klar, ist ja Wochenende. Ich bin weitergekommen, aber habe immer noch ein Problem:
    Wie gesagt, ich habe nun einen Cursor gesetzt für das Positionieren:
    EXEC SQL
    DECLARE CRSCTNO CURSOR FOR
    SELECT
    T01.SHORTN,
    T01.CTNO,
    T01.NAMPA1
    FROM VMKJF25001 T01
    WHERE T01.SHORTN >= :SQL-SHORTN
    FOR FETCH ONLY
    END-EXEC.
    Der funktioniert auch prächtig, d.h. ich bekomme den ersten, der grösser/gleich dem SQL-SHORTN ist.

    Nun muss ich ab dieser Position weiterlesen. Wenn ich nun einen zweiten Cursor für dieses Weiterlesen definiere
    EXEC SQL
    DECLARE NXTCTNO CURSOR FOR
    SELECT
    T02.SHORTN,
    T02.CTNO,
    T02.NAMPA1
    FROM VMKJF25001 T02
    ORDER BY SHORTN
    FOR FETCH ONLY
    END-EXEC.
    bekomme ich durch den ORDER BY den ersten der DB, aber nicht den nächsten von dem, den ich mit dem ersten Cursor gelesen habe.

    Auch wenn ich den zweiten Cursor mit der WHERE analog dem ersten Cursor ergänze, ändert das nichts, er beginnt wieder vom Anfang der DB, so als ob der ORDER "stärker" als der "WHERE" wäre.

    Hättest Du evtl. eine Lösung?

    LG Günter

  12. #12
    Registriert seit
    Dec 2014
    Beiträge
    310
    ?
    Der zweite Cursor hat ja keinen Bezug zum ersten.
    However, wenn ich Deine Frage richtig verstehe, dann benötigst Du nur den zweiten(!) Cursor, da muss das WHERE und ORDER BY angegeben sein und Du kannst alle gewünschten Sätze nacheinander einlesen.
    Wenn das nicht funktioniert, hast Du irgendwo einen anderen fehler!

Similar Threads

  1. Antworten: 7
    Letzter Beitrag: 13-01-15, 16:43
  2. 3488 Info Window II
    By hdw2 in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-07-14, 14:27
  3. Eingabe Subfile in einem Window
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 16-04-14, 16:20
  4. Alter Hintergrund bei aufgerufenem Window
    By Robi in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 14-11-13, 16:18
  5. DSPF / Window / Overlay
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-05-03, 10:05

Tags for this Thread

Berechtigungen

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