PDA

View Full Version : MONMSG für Diagnostic



Seiten : [1] 2

Matthias182
16-01-09, 08:28
Hallo Leute,

ich versuche gerade vergeblich eine Nachricht vom Typ *Diagnostic per MONMSG abzufangen. Mittlerweile habe ich auch verstanden, dass dies nicht geht.

Dennoch muss ich den Fehler dieser Meldung in meinem Programm entsprechend behandeln.

Hier mal die betroffene Stelle:

RUNSQLSTM SRCFILE(HAMMIWMG/QSQLSRC) SRCMBR(WDGVIEW) COMMIT(*NONE) NAMING(*SQL) DFTRDBCOL(&LIBAD)

MONMSG MSGID(SQL9010) EXEC(DO)
RCVMSG MSGTYPE(*DIAG) MSG(&MSG) MSGDTA(&MSGDTA) +
MSGID(&MSGID)
ENDDO

MONMSG MSGID(CPF0000 SQL0000) EXEC(SNDBRKMSG +
MSG('Creation of SQL View WDGVIEW failed! +
Check setup in KNFW107882') TOMSGQ(&MSGQ))

Hoffe, es hat jemand eine Idee, wie ich das lösen kann.

Vielen Dank und Gruß
Matthias

Fuerchau
16-01-09, 08:32
Die SQL-Nachrichten werden leider nicht an den Aufrufer gesendet, daher gibts den CPF.
Nachrichten, die nicht direkt an das Programm gesendet werden, sind nicht abrufbar.
Schau mal ins Joblog, mit F1 auf die Nachricht, dann F9, dann siehst du an wen die Nachicht ging.

Ansonsten ist RCVMSG auch ohne MONMSG möglich.

Matthias182
16-01-09, 08:44
Du hast recht, die Nachricht, die ich benötige, wurde nicht an mein Programm geschickt:

To program . . . . . . . . . . : QSQCRTV
To library . . . . . . . . . : QSYS
To module . . . . . . . . . : QSQCRTV
To procedure . . . . . . . . : CLEANUP
To statement . . . . . . . . : 13208

Bei dem RCVMSG sind die Variablen auch leer, was mir logisch erscheint, da er diese Nachricht wohl dann nicht sieht.

Wie komme ich denn an diese Meldung ran? Ich benötige sie zwingend.

kuempi von stein
16-01-09, 09:05
mhh.. wie bist Du denn an diese Meldung gekommen? Genau auf diesem Wege könnte man dann doch auch per Programm rankommen?

Und mal ne andere idee:
Geht es da immer um den CRT einer View? Kann man das Objekt ansich nicht auf Existenz dananch abfragen?
Ich weiß, ist von hinten durch die Brust ins Auge und so... aber was solls?

kuempi

Matthias182
16-01-09, 09:32
Die Meldung stammt aus dem interaktiven Joblog. Wie soll ich die über das Program gezielt erreichen, wenn diese nicht an das Programm geschickt wurde?

Nein es sind nicht nur Create Views.

Fuerchau
16-01-09, 10:31
Am einfachsten wäre es eigentlich, an Stelle eines RUNSQLSTM ein kleines ILERPG mit:

D MyStmt 32000 Varying

exec sql execute direct :MyStmt;

Dann bekommst du alle Fehler in der SQLCA und die lästigen Spools sind auch weg.

Ansonsten hilft da nur die Joblog-API's (komplex) zu bemühen oder die SPLF auszuwerten.

Matthias182
16-01-09, 10:38
RPG kann ich leider gar nicht. Werde ich wohl bei Gelegenheit mal ändern müssen.

Also werde es mit dem CHKOBJ versuchen, auch wenn die Lösung nicht ganz state of the art ist.

Danke an alle

Gruß
Matthias

Fuerchau
16-01-09, 11:37
Wie wärs dann mit REXX ?
Da gibts auch SQL.

BenderD
16-01-09, 13:01
schick deinen RUNSQLSTM über qcmdexc weg, der müsste das gegen eine Escape Message tauschen.

D*B


Hallo Leute,

ich versuche gerade vergeblich eine Nachricht vom Typ *Diagnostic per MONMSG abzufangen. Mittlerweile habe ich auch verstanden, dass dies nicht geht.

Dennoch muss ich den Fehler dieser Meldung in meinem Programm entsprechend behandeln.

Hier mal die betroffene Stelle:

RUNSQLSTM SRCFILE(HAMMIWMG/QSQLSRC) SRCMBR(WDGVIEW) COMMIT(*NONE) NAMING(*SQL) DFTRDBCOL(&LIBAD)

MONMSG MSGID(SQL9010) EXEC(DO)
RCVMSG MSGTYPE(*DIAG) MSG(&MSG) MSGDTA(&MSGDTA) +
MSGID(&MSGID)
ENDDO

MONMSG MSGID(CPF0000 SQL0000) EXEC(SNDBRKMSG +
MSG('Creation of SQL View WDGVIEW failed! +
Check setup in KNFW107882') TOMSGQ(&MSGQ))

Hoffe, es hat jemand eine Idee, wie ich das lösen kann.

Vielen Dank und Gruß
Matthias

Fuerchau
16-01-09, 13:08
QCMDEXC hilft da auch nicht weiter, da der auch nicht mehr kann als das CLP in diesem Fall.
QCMDEXC routet auch nur die Nachrichten weiter, die er erhält.