PDA

View Full Version : Datenmüll verhindern! Aber wie ??



Jabber
08-10-03, 11:15
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

BenderD
08-10-03, 11:44
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

BenderD
08-10-03, 11:53
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. :-)

Jabber
09-10-03, 11:12
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

Jabber
09-10-03, 11:13
....streich das "einen" bitte !

:p

Rincewind
09-10-03, 11:35
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

BenderD
09-10-03, 11:47
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.

KM
09-10-03, 12:28
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

BenderD
09-10-03, 12:46
Hallo,

dem ist leider nicht so, was hinter der deklarierten Länge kommt, ist kein "Müll", sondern Speicherbereich des aufrufenden Programmes.

Dieter Bender

Fuerchau
09-10-03, 15:10
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 !!