PDA

View Full Version : Probleme mit RPG-Tabellen



harkne
13-05-13, 13:12
Hallo zusammen,

ich habe ein seltsames Ergebnis bei einem Lookup auf eine RPG-Tabelle

Definition:


0015.00 D*
0016.00 D TAB001 S 1 DIM(6) CTDATA PERRCD(1) ZAHL-MODUS
0017.00 D TAB002 S 15 DIM(6) ALT(TAB001)
0018.00 D*


Ausführung im Programm


C A01MOD LOOKUP TAB001 TAB002 21
C *IN21 IFEQ '1'
C MOVEL TAB002 MODUS
C ELSE
C MOVE *BLANKS MODUS
C MOVEL A01MOD MODUS
C MOVE 'ERROR' MODUS
C END


Vor und nach Ausführung der ersten Anweisung zeigt mir der Debugger in der Variablen TAB002 den Wert 88natlich und beim zweiten Satz der ausgegeben wird 18natlich an. Wo die Zahlen herkommen ist für mich ein Rätsel. Ich dachte erst er kommt in den ELSE-Zweig aber da kommt er nicht rein. Vor allem Stellt er dieses Ergebnis auch in die Variable MODUS.

Tabellendefinition sieht wie folgt aus:


** Zahlungs-Modus
MMonatlich
QVierteljährlich
1Jährl. Januar
2Jährl. April
3Jährl. Juli
4Jährl. Oktober


Kann sein dass dies ein mit CVTRPGSRC konvertiertes RPGIII Programm ist und bei der Konvertierung ein Fehler unterlaufen ist oder habt ihr eine Idee.

Inzwischen denke ich riecht das nach PTF
Vor dem CALL auf ein Programm steht noch in TAB002 monatlich drin. Nach dem CALL auf das Programm steht 88natlich drin. TAB002 ist nicht in Parameter des Programms in irgendeiner weise verwickelt.

Danke im Voraus

Viele Grüße Harald

BenderD
13-05-13, 14:16
... riecht nach abweichenden Parameterdefinitionen im aufrufenden und aufgerufenen (zu lang) Programm aus.

D*B

harkne
13-05-13, 14:25
Hi,

Danke,

Es waren abweichende Parameterdefinitionen. Komisch Komisch das dies dadurch verursacht wird.

Viele Grüße Harald

BenderD
13-05-13, 14:53
... die Übergabe der Parameter erfolgt im default by reference, sprich es werden Adressen übergeben (Pointer) und das aufgerufene Programm kann dann lustig im Speicher des aufrufenden Programms rummalen. stabiler geht das unter ILE mit Prototypen und expliziter Deklaration der Schnittstelle als VALUE (Übergabe by value).

D*B

Fuerchau
13-05-13, 14:54
Zur Laufzeit gibt es halt keine Prüfung, ob die Adressen zur Definition passen.
Man kann dann auf alles möglich zeigen.