PDA

View Full Version : Zugriff auf Datei wo Keyfeld vom Typ variabler Länge



holly
26-11-04, 09:33
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

Fuerchau
26-11-04, 12:24
Das Key-Feld muss mit dem Attribut VARLEN definiert werden.

Ggf. ist noch eine H-Zeile mit ALWNULL(*USRCTL) nötig.

holly
26-11-04, 13:17
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

Fuerchau
26-11-04, 17:39
Stimmt.
Durch Varying wird allerdings das Längenattribut automatisch verwaltet.

B.Hauser
28-11-04, 15:52
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

holly
07-12-04, 13:16
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

Fuerchau
07-12-04, 13:23
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