View Full Version : Zugriff auf Datei wo Keyfeld vom Typ variabler Länge
Hallo all,
Ich habe folgendes Problem in RPGiV:
Zugriff auf Datei mit Key-Feld vom TYP variabler Länge soll erfolgen :confused: :
DSFFD:
NUMBER2 CHAR 11 13 185 Beides NUMBER2
Feld mit variabler Län-- Zugeordnete Länge: Keine
Läßt den Nullwert zu
ID des codierten Zeichensatzes . . . . . : 273
Bei Umwandlung erhalte ich folgenden Fehler der Wertigkeit 30:
*RNF7073 30 883 052100 KFLD bei Folgenummer 481 hat eine Länge von 13. Das
Schlüsselfeld hat eine Länge von 13.
Code:
H DATEDIT(*DMY.) DECEDIT(*JOBRUN) CVTOPT(*VARCHAR) ALWNULL(*USRCTL)
H EXTBININT(*YES)
…
* CONTACT: logical File
FSUT5I5 IF E K DISK PREFIX(CO_)
…
* Contact-Key
C CONKEY KLIST
C KFLD *IN95 CO_NUMBER2
…
…
0521.00 C CONKEY CHAIN SUT5I5 94
Wo steckt der Fehler?
Dabke schon mal, Holger
Das Key-Feld muss mit dem Attribut VARLEN definiert werden.
Ggf. ist noch eine H-Zeile mit ALWNULL(*USRCTL) nötig.
Hallo Fuerchau,
ALWNULL(*USRCTL) ist drin siehe oben!
mit Atrribut VARLEN meinst Du da VARYING:
D ds1 DS
D CO_NUMBER2 13A VARYING
D NUM_len 5I 0 OVERLAY(CO_NUMBER2:1)
D NUM_data 11A OVERLAY(CO_NUMBER2:3) ??
Gruß Holger
Stimmt.
Durch Varying wird allerdings das Längenattribut automatisch verwaltet.
Hallo Holger,
Dein Problem liegt in der Verwendung des Schlüssel-Wortes CVTOPT(*VARCHAR) in den H-Bestimmungen. Durch die Angabe dieses Schlüssel-Wortes werden die Felder mit variabler Feldlänge aus externen Dateien in Felder mit fixer Feldlänge umgewandelt.
Damit stimmt die in RPG-verwendete Feldlänge (fix 13A) des Schlüssel-Feldes nicht mehr mit der tatsächlichen Länge des Schlüssel-Feldes (13A mit variabler Länge) überein. Das ist der Compile-Fehler!
Wird das Schlüssel-Wort CVTOPT nicht angegeben, oder mit CVTOPT(*NoVarChar) werden die Felder auch in RPG als Felder mit variabler Länge gehandelt.
Birgitta
Hallo Holger,
Dein Problem liegt in der Verwendung des Schlüssel-Wortes CVTOPT(*VARCHAR) in den H-Bestimmungen. Durch die Angabe dieses Schlüssel-Wortes werden die Felder mit variabler Feldlänge aus externen Dateien in Felder mit fixer Feldlänge umgewandelt.
Damit stimmt die in RPG-verwendete Feldlänge (fix 13A) des Schlüssel-Feldes nicht mehr mit der tatsächlichen Länge des Schlüssel-Feldes (13A mit variabler Länge) überein. Das ist der Compile-Fehler!
Wird das Schlüssel-Wort CVTOPT nicht angegeben, oder mit CVTOPT(*NoVarChar) werden die Felder auch in RPG als Felder mit variabler Länge gehandelt.
Birgitta
@Birgitta,
Danke für die Antwort, aber das Schlüssel-Wort CVTOPT nicht angeben, oder mit CVTOPT(*NoVarChar) geht leider nicht, da ich Felder vom Typ Binär 2 Byte Länge habe, in die ich den Wert X'4000' also DEC 16384 zuweisen muß. Dies bringt bei *NOVARCHAR einen RPG-Fehler.
Habe die Sache aber gelöst: das Varying Keyfeld muß 2 Byte kürzer definiert werden als das Feld in der Datei, weil er die Längeninfo selbst wieder dazurechnet bei Varying.
Danke an alle
Gruß Holger
Die Länge eines Varying-Feldes wird mit der Builtin-Funktion %LEN gesetzt bzw. auch automatsch bei Zuweisung verändert:
/free
myvarfield = 'Dies ist der Text'; // Die Länge ist nun 17
%len(myvarfield) = 100; // Die Länge ist nun 100, mit Leerzeichen aufgefüllt
%len(myvarfield) = 10; // Die Länge ist 10, die Daten abgeschnitten
/end-free