-
Datenstruktur - DS - Abbruch Dezimaldatenfehler
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
-
Zitat von falke34
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?
-
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
-
Ist dein Programm ein CL
Da werden num Parameter immer gepackt erwartet!
Klaus
-
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
-
Wie wird denn NUM3 vor dem CALL bestückt?
-
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!!
-
War das Feld wirklich exakt gleich benannt?
Wie ist denn die Definition der beiden Felder in der Umwandlungsliste?
-
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!
Birgitta
-
Vielen Dank - für die Hilfe
so klappt es - also als gepackt definieren und INZ(*ZERO) setzen
danke
falke34
-
... schüttel - und da behaupte nochmal jemand, dass RPG eine "ordentliche" oder gar "moderne" Programmiersprache sei:
Nur einmal der Reihe nach:
- eine Like Definition mit Referenz auf eine andere Datenstruktur definiert ein (binäres) Alfafeld, das musste man früher manchmal machen, heute nimmt man da LIKEDS
- diese Definition hat mit deinem Problem garnichts zu tun!
- die Deklaration einer Datenstruktur ist eine (binäres) Alfafeld, mit überlagerten Feldern, am Anfang stehen da Blanks drin, was Dezimaldatenfehler zur Folge hat, wenn man ein numerisches Unterfeld an numerische Felder zuweist.
- das passiert ebenfalls - im aufgerufenen Programm (auch hierauf kommt man nur mit 10 Jahren RPG), wenn man das als Parameter für ein numerisches Feld beim call verwendet.
- mit dem Schlüsselwort INZ bei dem Datenstrukturnamen, wird jetzt nicht mehr das Alfafeld initialisiert, sondern die Unterfelder (auf sowas kommt man nur nach mindestens 10 Jahren RPG)
- einen Dezimaldatenfehler im aufrufenden Programm bekommt man ebenfalls hin, wenn die numerischen Formate voneinander abweichen.
- mit abweichenden Kommastellen klappts meistens, ist dann aber falsch
- stabiler ist das Ganze wenn man Prototypen und Callp verwendet und - die Prototypen übereinstimmen.
naja: Raten, Probieren, Gehtnicht
D*B
Zitat von falke34
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
Similar Threads
-
By TARASIK in forum NEWSboard Drucker
Antworten: 3
Letzter Beitrag: 10-11-06, 14:52
-
By Squall in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 24-10-06, 08:44
-
By pedro-zapata in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 11-09-06, 12:34
-
By JP in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 09-08-06, 08:35
-
By Bratmaxxe in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 24-07-06, 13:25
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks