Anmelden

View Full Version : AS400 - Window verschwindet



Seiten : 1 [2] 3 4

woy
13-02-15, 08:50
Guten Morgen miteinander
Zuerst einmal vielen, vielen Dank für Eure Tips, finde ich super.

Brigitta: ja werde ich probieren

Dschainers: Sorry, ich hatte ja geschrieben, dass ich neu in dieser Umgebung bin, also bitte entschuldige meine wahrscheinlich naive Frage: Wo genau muss ich denn
CHGDSPF 'Bibliothek/Bildschirmdatei RSTDSP(*YES)
eingeben - was heisst "auf Befehlseben"?

Ich habe übriges einen weiteren Test gemacht. Wenn ich aus dem ersten Fenster kein weiteres Pgm/Fenster aufrufe, sondern den auszugebenden Wert in meinem ersten Pgm/Fenster direkt einstelle und dann das Fenster wie gewohnt ausgebe, fubktioniert alles bestens, d.h. der Hintergrund bleibt bestehen. Lange Rede kurzrêr Sinn, es funktioniert nur dann nicht, wenn ich ein zweites Fenster ausgebe

LG Günter

woy
13-02-15, 09:08
Ich hätte da noch eine weitere Frage:

Wir bewegen uns hier in einer AS400-Umgebung unter Cobol. Auf die Files/Datenbank kann entweder direkt mit SQL oder aber mit den normalen Befehlen "READ" (Normalfall) etc, zugegriffen werden. Nun habe ich folgendes Problem:

Es existieren zwei Systemumgebungen, eine Für die Schweiz und eine für Luxemburg. Nun muss von der Umgebung Luxemburg auf die Files in der Umgebung Schweiz zugegriffen werden. Dazu findet ein Systemwechsel wie folgt statt:

*----Systemverbindungen aufbauen
SET BS-ERRLVL TO TRUE
SET A-CONNECT TO TRUE
EXEC SQL CONNECT TO :SQL-LOCRDB END-EXEC
EXEC SQL CONNECT TO :SQL-RMTRDB END-EXEC

*----Systemwechsel Remote
SET BS-ERRLVL TO TRUE
SET A-SETCONNECT TO TRUE
EXEC SQL SET CONNECTION :SQL-RMTRDB END-EXEC

Anschliessend wird dann via SQL auf die Remote-DB zugegriffen:

EXEC SQL
DECLARE CRSCTNO CURSOR FOR
SELECT
T01.DAIDT,
T01.TERMDT,
T02.SHORTN
FROM VMKLF175 T01,
VMKJF25801 T02
WHERE T01.CTNO = :SQL-CTNO AND
T02.CTNO = :SQL-CTNO
FOR FETCH ONLY
END-EXEC.

EXEC SQL FETCH CRSCTNO INTO
:SQL-DAIDT,
:SQL-TERMDT,
:SQL-SHORTN
END-EXEC

Nun meine Frage: Was meinst Ihr, könnte, nachdem der Systemwechsel stattgefunden hat, nicht auch via den normalen Befehlen "READ", etc. auf die Remote-Files zugegriffen werden?

Vielen Dank und lG
Günter

B.Hauser
13-02-15, 09:29
Die Situation, dass das der Hintergrund verschwindet, sobald ein weiteres Fenster aufgemacht wird ohne zuvor in dem "Haupt-"Programm den Bildschirm erneut angezeigt zu haben (EXTFMT) ist alt bekann.
An dieser Stelle wird sich auch nichts mehr ändern, da der Stand der "green Screen"-Entwickung "stabilisiert" ist.

Birgitta

Robi
13-02-15, 09:45
@ mit Read lesen nach Systemwechsel

Bin zwar kein Cobolaner, denke aber, wenn du die Datei zu macht und neu öffnest sollte das gehen.
Wir nutzen für diese Dinge (Für alle Dateizugriffe) 'Leseprogramme'.
D.H. ein PGM liest/schreibt Datei A System A, ein anderes Datei A System B
(SQL: Connect to ...)

So können wir immer nach Bedarf die richtige Datei vom richtigen System lesen

Ach ja, wenn wir nicht mit SQL zugreifen nutzen wir DDM Files dafür (aber auch mit Lesepgmmen)

Robi

KingofKning
13-02-15, 09:46
Naja, ihr werdet doch auch noch eine Befehlseingabemöglichkeit haben. Da wo Du z.B. den strpdm eingibst gibst du dann den chgdspdf ein.BTW. Ich würde SQL-Aufrufe und normale Reads und writes nicht unbedingt kombinieren. Was spricht gegen ein SQL-Read?GG

Fuerchau
13-02-15, 11:24
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.

woy
13-02-15, 16:04
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

Fuerchau
13-02-15, 16:07
Natürlich sind mehrere Fenster möglich.
Aber du brauchst in jeder DSPF ein Format mit ASSUME.

woy
13-02-15, 16:22
Das habe ich auch und es funktioniert trotzdem nicht

Fuerchau
13-02-15, 18:01
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/knowledgecenter/api/content/ssw_ibm_i_71/rzakc/rzakcmstzusrrstd.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.