PDA

View Full Version : KDS Delete RNF7072



tarkusch
14-02-17, 15:11
Hallo,

bekomme einen Fehler den ich nicht deuten kann.
Die Datei wurde nicht geändert und die Keyfelder stimmen auch überein:



*RNF7072 30 036169 KFLD bei Folgenummer 1436 ist CHAR, aber Schlüsselfeld ist NUMERIC.
*RNF7072 30 1 Art des KFLD stimmt nicht mit der des entsprechenden Schlüsselfelds in der Datei überein.


Mein Rpg-Code:


D ChainKey DS likerec(FILE : *key) INZ

Chain(n) %KDS(ChainKey) FILEP;
:
:
:
Delete (ChainKey) FILE;


Sobald ich die Felder einzel angebe bekomme ich keinen Kompelierungsfehler


Delete (S1_FLD1 : S1_FLD2 : S1_FLD3 : S1_FLD4) FILE;


Den Code habe ich für ein anderes Programm auch schon verwendet und da trat kein Fehler auf.

Nur ich finde keinen Hinweis was ich falsch machen.

lg

Fuerchau
14-02-17, 15:37
Wie wäre es mit
Delete %kds(ChainKey) FILE;
Ohne %KDS gibt es nur ein Alphafeld.

tarkusch
14-02-17, 16:07
Ist ausgezeichnet mit %kds.

Ich hatte bei dem anderen Programm glück da es sich um Alphafelder gehandelt hat.

Dankeschön

Fuerchau
14-02-17, 16:26
Aber schon extremes Glück, da eine DS als 1 Feld und der Key durchaus mehr als 1 Feld haben kann.
Bei einem verkürzten Key (Bespiel Firma(1), Werk(3), Teil(19), DS(23)) wird nur über den 1. Schlüssel gelöscht. Das muss dann nicht der gewünschte Satz sein.

Aber warum so kompliziert?
Ein "Delete (Key) File" muss über den Index den Satz erneut suchen.
Da du jedoch den Satz per "Chain (Key) FileP" im Zugriff hast, reicht ein simpler "Delete File", da dieser den aktuellen Satz löscht. Dies ist besonders bei nicht unique Keys ganz schön hilfreich und auch bei SQL gibt es den "delete ... where current of ...".

Bei mehreren 1000 Durchläufen kann man da echt Zeit einsparen.