PDA

View Full Version : Datenstruktur - DS - Abbruch Dezimaldatenfehler



Seiten : [1] 2

falke34
10-11-10, 11:08
Hallo, folgendes Problem

habe zwei Datenstrukturen erstellt
D KEYGRP S LIKE(KEY)

D KEY DS
D FIRMA 1 2P 0
D ARTIKEL 10
D NUM1 11 17 0
D NUM2 18 25 0
D NUM3 26 33 0

die Felder FIRMA, ARTIKEL, NUM1, NUM2 und NUM3
kommen aus einer Datei, um Änderungen zu bemerken schiebe ich die Daten in die KEYGRP
es wird aber ein call gemacht bei dem NUM3 als Parameter übergeben wird, dann wird habe ich einen Dezimaldatenfehler im aufgerufenen PGM

hilfe - hab keine Ahnung
danke für die Hilfe

Pikachu
10-11-10, 11:19
die Felder FIRMA, ARTIKEL, NUM1, NUM2 und NUM3 kommen aus einer Datei, um Änderungen zu bemerken schiebe ich die Daten in die KEYGRP ...
Wie genau? Wie ist denn der entsprechende Programmcode?

falke34
10-11-10, 12:31
Programmcode

D KEYGRP S LIKE(KEY)

D KEY DS
D FIRMA 1 2P 0
D ARTIKEL 10
D NUM1 11 17 0
D NUM2 18 25 0
D NUM3 26 33 0

C EVAL KEYGRP = KEY


C CALL 'TEST'
C PARM KDNR
C PARM NUM3

C *ENTRY PLIST
C PARM KDNR
C PARM NUM3

C NUM3 CABEQ *ZERO ENDE
- hier der Dezimaldatenfehler im Programm TEST
:mad:

K_Tippi
10-11-10, 13:01
Ist dein Programm ein CL
Da werden num Parameter immer gepackt erwartet!

Klaus

B.Hauser
10-11-10, 13:04
Wenn Du die Datenstruktur KEY initialisierst (Schlüssel-Wort INZ in der DS-Zeile) sollte das Problem behoben sein.

Kleiner Tipp: Schau Dir mal die neueren Programmier-Techniken an. z.B. Datenstruktur-Unterfelder ohne VON/BIS-Angaben, dafür mit absoluter Definition, definieren von Datenstrukturen mit LIKEDS, Prototyping und Free-Format RPG.

Birgitta

Pikachu
10-11-10, 13:04
Wie wird denn NUM3 vor dem CALL bestückt?

falke34
10-11-10, 13:35
Es sind beides RPGLE Programme
Mit dem INZ bin ich nicht weiter gekommen.

NUM3 ist ein Feld aus einer Datei, daher bekomme ich auch den Wert.

Feld Art Länge Länge Position Verwend. Überschrift
LMENG ZONED 8 0 8 53 Beides Liefermenge

Jetzt hab ich das NUM3 als 8P 0 definiert
D LMENG 8P 0

dann hab ich keinen Abbruch mehr !!

Aber wieso??? verstehen tun ich es nicht!! :confused:

Pikachu
10-11-10, 15:35
War das Feld wirklich exakt gleich benannt?
Wie ist denn die Definition der beiden Felder in der Umwandlungsliste?

B.Hauser
11-11-10, 08:24
Gezonte Felder, die in Dateien, die in den F-Bestimmungen definiert wurden werden in gepackte Felder konvertiert, es sei den es wird eine (externe) Datenstruktur für die Datei angelegt. Felder in Datenstrukturen werden so ausgegeben wie sie definiert wurden, d.h. gezonte Felder bleiben gezont.

In Deiner Datenstruktur wurden die Felder übrigens auch gepackt definiert (numerische Felder ohne Angabe des Datentypen P/S/I/U werden als gepackte Felder definiert). Für gezonte Felder muss explizit der Datentyp S angegeben werden.

Bei der Parameter-Übergabe über (*Entry) PList wird ein Pointer auf das (gepackte) Feld übergeben. Es erfolgt keinerlei Prüfung. Eine Parameter-Prüfung und ggf. interne Konvertierung in den erwarteten Datentypen (bei input only Parametern) erfolgt nur bei Verwendung von Prototyping.

Die ganze Konvertiererei von gepackten und gezonten numerischen Feldern ist schon UUUUUUUUUralt und kommt aus der Zeit als Speicherplatz knapp und teuer war.

Anbei ein Link zu der Konvertierung von numerischen Feldern in RPG:
Quiz: Numerische Felder in RPG! (http://www.sss-software.de/inn/enews/iNN-eNews0404.html#Tekki1)

Birgitta

falke34
15-11-10, 14:29
Vielen Dank - für die Hilfe :)

so klappt es - also als gepackt definieren und INZ(*ZERO) setzen

danke
falke34