[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2003
    Beiträge
    90

    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

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Zitat Zitat von falke34 Beitrag anzeigen
    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?

  3. #3
    Registriert seit
    Sep 2003
    Beiträge
    90

    Thumbs up

    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


  4. #4
    Registriert seit
    Dec 2000
    Beiträge
    281
    Ist dein Programm ein CL
    Da werden num Parameter immer gepackt erwartet!

    Klaus

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Wie wird denn NUM3 vor dem CALL bestückt?

  7. #7
    Registriert seit
    Sep 2003
    Beiträge
    90
    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!!

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    War das Feld wirklich exakt gleich benannt?
    Wie ist denn die Definition der beiden Felder in der Umwandlungsliste?

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Sep 2003
    Beiträge
    90
    Vielen Dank - für die Hilfe

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

    danke
    falke34

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... 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 Zitat von falke34 Beitrag anzeigen
    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

    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Lexmark T630 nach 100 Seiten Abbruch
    By TARASIK in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 10-11-06, 14:52
  2. DS Übergabe
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 24-10-06, 08:44
  3. FETCH n ROws in einzelne Felder einer DS
    By pedro-zapata in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-09-06, 12:34
  4. Datenstruktur mit Mehrfachvorkommen
    By JP in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 09-08-06, 08:35
  5. Datenstruktur
    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
  •