PDA

View Full Version : CL



Walter
13-06-11, 11:55
Hallo Freunde.

Ich suche eine Lösung für folgende Probleme:

1.) Aus CL wird mittels STRQMQRY QMQRY(BIBLIOTHEK/ABFRAGE) SETVAR((VARIABLE &WERT))
ein Query aufgerufen. Das Query liest eine Tabelle und erstellt ein neues File.
Wie kann ich nun nach dem STRQMQRY den SQL Code abfragen ?

2.) Wie lese ich mittels CL einen gestimmten Record in einem File, damit ich einzelne Feldinhalte auf einer Bildschirmmaske ausgegeben ?

3.) Wie kann ich Felder in einer Bildschirmmaske für die Eingabe sperren und wieder entsperren?

Fuerchau
13-06-11, 20:21
Wenn der SQL auf einen Fehler läuft, bekommst du eine Abbruchnachricht, die man mit MONMSG abfangen kann.

Die Anzahl Sätze der Ausgabedatei kann man mit RTVMBRD abfragen.

Einen bestimmten Satz kann man in CL nicht so einfach lesen. CL liest nur sequentiell und am Ende kannst du nicht erneut lesen.

DSP-Felder sperrst/entsperrst du per DSPATR(PR) und einer Bezugszahl.

Walter
14-06-11, 06:55
Der Befehl:
STRQMQRY QMQRY(OLYNUM2S01) OUTPUT(*OUTFILE) +
OUTFILE(QTEMP/OLYNUM2F01) +
SETVAR((WSKAT &WSKAT) +
(WEBECODE &WEBECODE))

wird in CL ausgeführt. Mit monmsg kann ich den Returncode abfragen.
Nur welchen Returncode ?
Und kennst Du eine Möglichkeit den SQL Code (z.B. -100) abzufragen?

Gruss
Walter

Fuerchau
14-06-11, 10:01
STRQMQRY gibt keinen SQLCODE zurück, daher ist er auch nicht abzufragen.
-100 gibt es nicht, du meinst wohl 100.
100 gibt es nur wenn beim letzten Fetch keine Daten mehr da sind.
Mit MONMSG kannst du nur SQL-Fehler abfangen, die das Ausführen überhaupt verhindern.

Die Ausgabedatei wird ohne SQL-Fehler immer erstellt, ob Daten vorhanden sind kannst du per RTVMBRD ... NBRCURRCD(&RCDS) feststellen.

Pikachu
15-06-11, 08:33
Auf einen bestimmten Datensatz kann in CL mittels des Befehls OVRDBF unter Angabe des Parameters POSITION() positioniert werden.


DCL VAR(&FIELDS) TYPE(*CHAR) LEN(gesamte Länge)

OVRDBF FILE(Datei) POSITION(*KEY AnzahlSchlüsselfelder Format &FIELDS)
RCVF
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))

Falls der Schlüssel allerdings Leerzeichen am Ende enthält, geht das nur über einen Umweg mittels CHGVAR und CALL QCMDEXC:


DCL VAR(&FIELDS) TYPE(*CHAR) LEN(gesamte Länge)
DCL VAR(&S) TYPE(*CHAR) LEN(1) VALUE('''')
DCL VAR(&CMD) TYPE(*CHAR) LEN(2000)
DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(2000)

CHGVAR VAR(&CMD) VALUE('OVRDBF FILE(Datei) +
POSITION(*KEY AnzahlSchlüsselfelder Format' *BCAT +
&S *CAT &FIELDS *CAT &S *CAT ')') /* ALLE ZEICHEN */
CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
RCVF
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))