Anmelden

View Full Version : RENAME Problem



Seiten : [1] 2

a.wojcik
25-01-16, 10:07
Hallo *All,

ich habe zur Abwechslung eine RPG Frage :
wie soll man eine Datei im RPG deklarieren, die folgenden Aufbau hat :
A R LKOPPFF1 PFILE(LKOPEIN LKOPPF LKOPSEND)
A*
A K LKUNDE
A K LTEXT
Das sind drei verschiedene Dateien mit dem gleichen Schlüssel.
Bei der Umwandlung bekommt man Fehlermeldung :
*RNF2121 30 1 Satzformatname in extern beschriebener Datei bereits
definiert; das Satzformat wird ignored.
Ist OK, muss man umbenennen aber wie ?
Mit RENAME(LKOPPFF1:LKOPPFFA) wird nur das zweite Formatname umbenannt –
und weiter ?
Nächstes RENAME(LKOPPFF1:LKOPPFFB) im Programm produziert den Fehler :
Der Eintrag für den externen Satzformatnamen wurde bereits umbenannt.

Gibt es dazu eine Lösung ?

Danke im Voraus.
Gruß

dschroeder
25-01-16, 11:18
Ich verstehe nicht, was du machen möchtest. Du kannst nicht einfach 3 verschiedene Dateien als eine Datei im RPG ansprechen. Du könntest mit DDS eine Join-File erstellen und die dann im RPG ansprechen. Ich würde allerdings empfehlen, den Datenzugriff mit embedded SQL (die 3 Dateien joinen) zu realisieren.

Dieter

a.wojcik
25-01-16, 12:29
Hallo Dschroeder ,
die drei Dateien haben den gleichen Aufbau, die gleichen Satz- und Feldnamen - das geht.
Geht nicht diese 3 Dateien als JFILE zuverknüpfen.

camouflage
25-01-16, 13:02
Versteh ich nicht ganz. Du hast die Dateien so definiert?

FFILE1F IF E K DISK
F RENAME(FILE1G:REC1)
FFILE2F IF E K DISK
F RENAME(FILE1G:REC2)
FFILE3F IF E K DISK
F RENAME(FILE1G:REC3)


Das muss gehen. Ausserdem würde ich noch einen Prefix definieren oder in eine qualifizierte DS einlesen. (Nur wenn separate Reads gewünscht werden)

Anmerkung:
Der oben beschriebene Kontstrukt geht sehr wohl, da ein logisches File unter dem Keyword "PFILE" durchaus mehrere Files zulässt. PFILE(F1 F2 F3).

Ich hab in meiner ganzen Karriere noch nie sowas gebraucht. Man lernt halt nie aus.

a.wojcik
25-01-16, 13:27
Hallo Camouflage,
vielleich habe ich mich nicht richtig ausgedrück - das ist mein Ziel:
in den 3 Dateien gibt es ein Satz mit eingegebenem Text (Schlüsselfeld). Auf den Satz möchte ich positionieren und in einer SFL die Sätze anzeigen.
Also müsste man die Datei so deklarieren :
<code><code> FFILE1F IF E K DISK
F RENAME(FILE1G:REC1)
<code><code> F RENAME(FILE1G:REC2)
</code></code><code><code></code></code>was netürlich nicht funktioniert.
</code></code>

hel400
25-01-16, 15:04
Hallo a.wojcik,

ich kenne solche "Multiformat-Files" nur so:

*
R REC01 PFILE(LKOPEIN)
Feld1
Feld2
K Feld1
*
R REC02 PFILE(LKOPPF)
Feld1
Feld2
K Feld1
*
... usw...

Also nicht alle PFs in einer REC-Zeile, sondern die gewünschten PFs nacheinander mit eigener(!) REC-Angabe, somit entfällt auch das Umbenennen im RPG.
Im Pgm erhältst Du dann (wie gewünscht) die Sätze aus allen 3 Dateien in der richtigen Key-Folge.
(Kleiner Nachteil bei der obigen Art: Du musst alle gewünschten Felder einzeln in der LF angeben)

Pikachu
25-01-16, 15:32
In diesem Fall mußt du über den Namen der logischen Datei lesen (und nicht über den Namen eines Formats).


Also nicht alle PFs in einer REC-Zeile, sondern die gewünschten PFs nacheinander mit eigener(!) REC-Angabe, somit entfällt auch das Umbenennen im RPG.
Im Pgm erhältst Du dann (wie gewünscht) die Sätze aus allen 3 Dateien in der richtigen Key-Folge.
(Kleiner Nachteil bei der obigen Art: Du musst alle gewünschten Felder einzeln in der LF angeben)

hel400
25-01-16, 15:38
Genau so ist es auch, habe nichts anderes behauptet :-)

a.wojcik
26-01-16, 07:14
Hallo hel400,
Dein Vorschlag wäre gut, wenn die Satzformate in meinen 3 Dateien nicht den gleichen Namen hätten - dafür brauche ich nämlich das RENAME im RPG...

Fuerchau
26-01-16, 07:28
Du musst das schon ein deiner LF regeln.
Wenn die 3 Satzformate leider identisch sind, musst du in deiner LF die Satzformate neu benennen und den Nachteil in Kauf nehmen, alle Felder dann einzeln aufzuführen.
Einfach nur die Kopie des Satzformates funktioniert dann nicht.
Der RPG-Compiler kann nun mal je Datei sich nur für 1 Satzformat entscheiden.
Dass die DDS-LF dies unterstützt liegt nun mal an anderen HLL (z.B. COBOL), die damit keine Probleme haben.
Das Problem ist doch beim READ die Erkennung des richtigen Satzformates (INFDS) für die Zuweisung zu den richtigen Variablen. Schließlich wird in der INFDS das Format und nicht die Datei geliefert.
Die Umbenennung ist rein intern zur Laufzeit für die RPG-Sprache erforderlich damit EA-Befehle auf Satzformat das Richtige auslösen.