PDA

View Full Version : Write mit DS / *RNF7701



RaMai
06-07-07, 20:33
Hallo,
ich habe 4 identisch aufgebaute Dateien wo ich nur Daten verteile. Dachte da waere doch eine DS angebracht.
Habe die DS der 4 dateien wie folgt definiert:

D FtFuelDs DS LikeRec(RFTFUE)
D FxFuelDs DS LikeRec(FXFUELR)
D FxFuelMbDs DS LikeRec(FXFUELMBR)
D FxFuelNbDs DS LikeRec(FXFUELNBR)

einlesen funktioniert wunderbar, uebertragen in eine der anderen DS ebenso.
Allerdings bekomme ich Write nicht gebacken, wenn ich z.B. folgenden write machen will:
C Write FXFUELR FxFuelDs

bekomme ich diesen Fehler.

*RNF7701 20 1 The data structure is not allowed for the operation.

Kann mir jemand dabei helfen? Ich hab keine Lust Seitenweise Felder zu uebertragen ;-)

VLD im voraus und schoenes Wochenende

Ralf

Fuerchau
07-07-07, 11:15
Extern beschriebene Dateien können nicht mit einer DS direkt geschrieben werden.
RPG generiert die internen Moves aus den automatisch definierten Feldern der I- bzw. O-Bestimmungen.

Wenn du dir die Moves sparen willst, musst du die Felder in den I-Bestimmungen der jeweiligen Datei so umbenennen, dass Namensgleichheit zwischen den Dateien besteht, Strukturen sind dann nicht erforderlich.

Sind die Strukturen aller Dateien tatsächlich IDENTISCH, jedoch mit unterschiedlichen Feldnamen, kannst du die DS'n auch einfach mit

D MyFileDS E DS EXTNAME(MYFILE)

definieren.
Damit legst du die Felder direkt in Strukturen und kannst dann die Strukturen moven.

Zu beachten ist lediglich, dass ein Name nicht 2 Mal in verschiedenen Strukturen auftaucht, in diesem Fall kann man aber die Felder in I-Bestimmungen passend umbenennen.

B.Hauser
07-07-07, 18:41
Extern beschriebene Dateien können nicht mit einer DS direkt geschrieben werden.


Das war einmal vor langer Zeit!
Seit Release V5R2 können für extern beschriebene Dateien (DDS und SQL) bei Chain, allen Reads, Update und Write Datenstrukturen verwendet werden!

Unter Release V5R2 ist es nur möglich Datenstrukturen, die mit LikeRec definiert wurden zu verwenden, ab Release V5R3 (auch wenn es in der Referenz schon in Release V5R2 dokumentiert ist) können auch externe Datenstrukturen verwendet werden.

@Ralf:
Werden Datenstrukturen beim Write verwendet (egal ob mit LikeRec oder als externe Datenstrukturen definiert), müssen diese als *OUTPUT gekennzeichnet werden.



D FxFuelDs DS LikeRec(FXFUELR: *OUTPUT)

C Write FXFUELR FxFuelDs


Birgitta

RaMai
09-07-07, 13:07
Danke fuer die Antworten, ich bin immer wieder froh dieses Forum gefunden zu haben :D

@Birgitta
ich hatte es jetzt so geloest dass ich die DS doppelt definiert habe.
Also fuer read mit LikeRec und fuer Write mit ExtName, werde jetzt aber noch Deinen Tip versuchen - macht das ganze uebersichtlicher.

Gruss Ralf