PDA

View Full Version : Prorammverhalten unter 5.4 <=> 6.1



urrumpel
22-12-10, 14:52
Wir haben ein SQLRPGLE - PGM, das wie gewünscht unter OS 5.4 erstellt wurde und unter OS 5.4 & 6.1 läuft. Aufgrund eines fachlichen Fehlers wurde das PGM unter 6.1 umgewandelt und 'gedebugt'.

Das PGM hat nun eine Merkwürdigkeit, die vorher nicht da war.
Meldet man sich an der i5 an und führt das Programm aus, so sollen u.a. in eine Tabelle x Werte aus Tabelle y eingetragen werden. Die Werte werden aber für keinen Datensatz eingetragen.
Führt man dasselbe Programm nochmals aus, dann wird der Datensatz geschrieben.
C/exec sql
C+ UPDATE table1 SET IDSOID = :P1OID WHERE CURRENT OF S1
C/end-exec

:confused: Beim 1. Durchlauf (da wo nicht geschrieben wird) ist im Debug-Modus das SQL ausgesternt
Beim 2. Durchlauf ist das SQL nicht ausgesternt.:confused:

Unsere Programmierer konnten mir nicht weiterhelfen, ich selbst bin kein RPG-Programmierer, sondern debugge nur hin und wieder. Insofern bitte nicht in Hieroglyphen antworten, vielen Dank!

Pikachu
22-12-10, 15:04
Vielleicht gibt es das Programm mehrfach.

Prüft mal mit WRKOBJ OBJ(*ALL/Programmname) OBJTYPE(*PGM)

urrumpel
22-12-10, 15:18
Bei gleicher LIBL?
Ich mache folgendes
1. Programm via Befehl aufrufen => Update klappt nicht
2. F9 & Datenfreigabe => Update klappt

Dschainers
22-12-10, 15:20
Programm mal mit COMMIT(*NONE) umwandeln
:)

Fuerchau
22-12-10, 15:28
Der SQL ist normalerweise immer auf Kommentar, da er durch den Precompiler ersetzt wird.
Mit F15 auf Spool-Sicht umschalten um den tatsächlichen RPG-Code zu sehen.
Außerdem sollte man nach dem SQL-Befehl mal den SQLCOD auswerten.

Pikachu
22-12-10, 15:31
Ist denn die LIBL wirklich die gleiche? Vielleicht ändert das Programm ja die LIBL?

Am besten vor jedem Programmaufruf mal ein WRKOBJ OBJ(*LIBL/Programmname) OBJTYPE(*PGM) machen und vergleichen.

Die Debugansicht (1) mit ausgesternten SQL-Anweisungen deutet darauf hin, daß das Programm mit CRTSQLCBL OPTION(*LSTDBG) gewandelt wurde.

Die Debugansicht (2) mit nicht ausgesternten SQL-Anweisungen deutet darauf hin, daß das Programm mit CRTSQLCBLI DBGVIEW(*SOURCE) gewandelt wurde.

Oder wird das Programm vor dem zweiten Durchlauf neu gewandelt?

urrumpel
22-12-10, 16:12
Vielen Dank. COMMIT = *NONE hat geholfen

urrumpel
22-12-10, 16:25
@Fuerchau
Da hatte ich anscheinend Tomaten auf den Augen, das SQL war in beiden Fällen, -wie es sich gehört- im DEBUG ausgesternt.
SQLCOD auslesen ist mir nicht eingefallen - merke ich mir für nächstes Problem, Danke.
C*exec sql
C* UPDATE IDPCD1AA SET IDSOID = :P1OID WHERE CURRENT OF S1
C*end-exec
C EVAL SQL_00043 = P1OID SQLCOD 0
C Z-ADD -4 SQLER6
C CALL SQLROUTE
C PARM SQLCA
C PARM SQL_00038
1. Lauf: SQLCOD = -000000508
2. Lauf: SQLCOD = 000000000


SQL0508SQLCODE-508SQLSTATE24504
Explanation: Cursor&1notpositionedonlockedrow

urrumpel
22-12-10, 16:33
Nochmals vielen Dank für die schnelle, kompetente Hilfe an alle.
@Pikachu
SQL ILE RPG-Objekt erstellen (CRTSQLRPGI)
'*LSTDBG ' für Parameter OPTION ungültig.
=> Das Problem mit dem nicht ausgesternten SQL im DEDBUG ist wohl auf einen Fehler zwischen Stuhl und Tastatur zurückzuführen -:((
=>Drückt man im Debug F8, sieht man nicht alles, was ganz links so steht...

Pikachu
22-12-10, 16:42
@Pikachu
SQL ILE RPG-Objekt erstellen (CRTSQLRPGI)
'*LSTDBG ' für Parameter OPTION ungültig.
Achso, du hast ja RPG. Da geht bei ILE natürlich kein CRTSQLRPG (wo es diesen Parameter gibt) wie bei COBOL mit CRTSQLCBLI und CRTSQLCBL.