View Full Version : Datenmüll verhindern! Aber wie ??
Hallo zusammen,
habe folgendes Problem:
Ich habe in einem RPG-Prg. eine Variable MSG die eine Länge von 132 hat. Aus einem anderen CL Prg wird diese Variable mit einer Nachricht gefüllt. Diese MSG Variable wird dann als Parameter an eine DDS Datei weitergeleitet.
Wenn ich jetzt einen query mache zeigt er mir wunderbar den richtigen Parameter an, doch leider auch jede Menge Dateneschrott der gar nicht von mir übergeben wurde!
Hab bereit MoveL (p) versucht (...mit Leerzeichen auffüllen). Klappt nicht.
Habe es mit einer zweiten Hilfsvariable probiert! Klappt nicht!
Es erscheint immer wieder vereinzelte Zeichen hinter dem Parameter.
Hat jemand einen Tipp für ich? Hab wirklich schon jede Menge ausprobiert. Klappt aber nichts.
Thx
Hallo,
da scheinen abweichende Definitionen der Parameter im Spiel zu sein. Die saubere Lösung ist der Wechsel zu CALLP und die Verwendung von Prototypen.
mfg
Dieter Bender
Oh oh,
das kann teuer werden, wenn das Zwangspfand für Einwegparameter und unnötigen Datenmüll eingeführt wird.
Dieter
PS: sorry, ich konnte wieder mal nicht widerstehen. :-)
Was bedeutet denn "Wechsel zu CALLP" ?, mit Prototypen hab ich leider auch noch nicht gearbeitet. Werde mir das auf jeden Fall
im Buch nachlesen. Befinde mich noch im Anfangsstadium...
:rolleyes:
Vielleicht kannst du mir einen kurz dazu was sagen. Wäre nett.
Thx
....streich das "einen" bitte !
:p
Mit CALLP meint Bender bestimmt den Einsatz von Prozeduren unter RPG IV (RPGLE).
Es dürfte aber auch einfach reichen wenn du nachprüfst ob dei Variable die übergeben wird im aufrufenden Programm genau so lang ist wie im aufgerufenen Programm.
Rince
Hallo,
am einfachsten und konkretesten kann man Hinweise geben, wenn man die Quellen sieht. Wo ist der Aufruf, was wird aufgerufen, welcher Fehler tritt auf.
Zu den Prototypen noch ein paar Bemerkungen:
In einem Prototyp kann man die Eigenschaften von Parametern genauer beschreiben als in ENTRY PLIST Einträgen oder im CL direkt möglich. Das ist insbesondere dann erforderlich, wenn Literale übergeben werden, oder ein SBMJOB erfolgt, oder Command Strings an QCMDEXC übergeben werden und "Datenmüll" Probleme damit vorprogrammiert sind.
Hier ist es auch sinnvoll mal in die Bedienerhilfe des OS/400 Befehls CALL zu sehen.
mfg
Dieter Bender
PS: ein Kurzkurs Prototypen und CALLP ist in so einem Forum leider nicht so ohne weiteres möglich.
Hallo Jabber,
ich bin derselben Meinung wie Rincewind. Du solltest prüfen, ob die Variablen in beiden Programmen die gleiche Länge hat. Wenn der Parameter im rufenden CL-Programm nämlich kürzer ist als im gerufenen RPG-Programm, wird der Rest des Feldes mit "Müll" aufgefüllt.
Gruß,
KM
Hallo,
dem ist leider nicht so, was hinter der deklarierten Länge kommt, ist kein "Müll", sondern Speicherbereich des aufrufenden Programmes.
Dieter Bender
Genau, und wenn man den Bereich auch noch ändert, KANN es fürchterlich knallen, es muss aber nicht sofort sein.
Dies ist genauso wie diese ominösen "Sicherheitslücken" in Windoof, Überschreibungen von Puffern (hier Parameterfelder) mit längeren Informationen als im Programm definiert.
Bei der AS/400 ist dies (Gott sei Dank) auf den Job beschränkt !!