Anmelden

View Full Version : SQL Fehlerbehandlung in FreeRpg



KingofKning
12-10-12, 10:01
Hallo *all,

ich habe jetzt mein FreeRPG Programm am Laufen.

Das Programm wird im Batch ausgeführt.

Ich würde jetzt gerne etwaige Fehler per sndmsg an den qsysopr senden.

Ich habe mir mal das http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/topic/rzajp/rzajp.pdf
angesehn, werde aber nicht ganz schlau daraus.

Mein Prg sieht etwa so aus:

/FREE
EXEC Sql Set Option COMMIT=*NONE;
EXEC SQL delete from aruba_msvc/MISpf300 where
ORDB00 = 'ADKNA2';
exec sql insert into aruba_msvc/mispf300
select 'ADKNA2', adfa, '0', '0', '0', '0', '0', adkto,
adknam
from adr01pf
where adabkz = 0;

Wenn das Statement jetzt auf Fehler läuft, wie müßte dann das exception aussehen?

Vermutlich ja etwas in der Form IF sqlcod > 0

Hat evtl. jemand ein Codeschnipsel für mich.

GG

S.Neinawaie
12-10-12, 10:14
Hallo!

Ich würde die Überprüfung auf die Variable "SQLSTT" empfehlen (z.B 02000 wäre im Falle von Delete -> The number of rows identified in the searched UPDATE or DELETE statement was zero.).

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzala%2Frzalaccl.htm



If SQLStt <> '00000';
//Schreibe Fehlermeldung
EndIf;
Um nähere Informationen zu erhalten:



Exec SQL
Get Diagnostics Condition 1 :w_Text = MESSAGE_TEXT;In w_Text befinden sich dann Infos zum Fehler.

Bitte beachte: Du solltest nach jeder SQL Anweisung auf SQLSTT überprüfen!

LG,
Sam

Nachtrag:
Zitat B. Hauser:

Bei einem negativen SQLCOD oder einem SQLSTT bei dem die ersten beiden Stellen weder '00' noch '01' noch '02' sind liegt ein Fehler vor.

Daher fragst du am besten auf die ersten 2 Stellen ab und wenn die ungleich 00, 01 & 02 sind -> Schreibe Fehlermeldung.

Fuerchau
12-10-12, 11:10
SQLCODE reicht aus.
Fehler ergeben einen negativen Wert.

Die Anzahl Sätze erfährt man in SQLER3.

KingofKning
12-10-12, 11:14
Das ich den SQLCOD prüfe war mir ja schon klar....
Mich interessierte halt hier wie ich das sndmsg im FreeRPG hinbekomme.

GG

andreaspr@aon.at
12-10-12, 11:50
Je nach Jobdefinitionen reicht meist ein

/Free
DSPLY 'Nachricht';
/End-Free
aus.
Oder

/Free
Dsply 'Nachricht' 'MYMSGQ';
/End-Free

Ansonsten kannst du auch den CMD absetzen



H BNDDIR('QC2LE')
Dsystem pr 10i 0 extproc('system')
D cmd * value options(*string)

/Free
system ('SNDMSG ...');
/End-Free


lg Andreas

Fuerchau
12-10-12, 12:00
Man kann auch das API QMHSNDPM bemühen.