Anmelden

View Full Version : INFDS für mehrere Dateien als /COPY



jo400
15-03-10, 16:48
Hallo Forum,

ich komme im Moment mit einem Problem nicht weiter:

Wie kann ich die INFDS für Datenbank-Dateien in /COPY-Strecken auslagern und innerhalb eines Programmes bei mehreren Dateien verwenden. Wenn ich den gleichen Datenstrukturnamen bei INFDS mehrmals angebe, dann bricht die Umwandlung ab.

Kann ich das "irgendwie" mit PREFIX regeln?

Wie habt ihr dies gelöst?

Vielen Dank für eure Unterstützung.

Jo

BenderD
15-03-10, 17:14
... wie wärs mit LIKEDS?
(wobei man einiges auch mit %bifs machen könnte)

D*B



Hallo Forum,

ich komme im Moment mit einem Problem nicht weiter:

Wie kann ich die INFDS für Datenbank-Dateien in /COPY-Strecken auslagern und innerhalb eines Programmes bei mehreren Dateien verwenden. Wenn ich den gleichen Datenstrukturnamen bei INFDS mehrmals angebe, dann bricht die Umwandlung ab.

Kann ich das "irgendwie" mit PREFIX regeln?

Wie habt ihr dies gelöst?

Vielen Dank für eure Unterstützung.

Jo

B.Hauser
16-03-10, 06:09
Wie Dieter bereits gesagt hat:
Eine Referenz-Datenstrukur in einer Copy-Strecke anlegen und dann mit LikeDS(RefStruktur) definieren. Datenstrukturen, die mit LIKEDS definiert wurden sind automatisch qualifiziert, d.h. die Unterfelder müssen mit DSName.UnterFeld angesprochen werden. Damit kann das gleiche Unterfeld mehrfach verwendet werden.

Eine andere Möglichkeit wäre nur die Unter-Felder in eine Copy-Strecke packen und die Datenstruktur als qualified definieren. (M.E. ist allerdings die 1 Lösung die bessere!):


D InfDSXX DS LikeDS(RefInfDS)
D InfDSYY DS LikeDS(RefInfDS)

D InfDSAA DS Qualified
D/Copy QCPYLESRC,InfDSSubf

D InfDSBB DS Qualified
D/Copy QCPYLESRC,InfDSSubf
/Free
Chain (InfDSXX.RRN) MyFileXX;
Chain (InfDSBB.RRN) MyFileBB;
/End-Free

Birgitta

jo400
16-03-10, 07:58
Hallo Birgitta, hallo Dieter,

vielen Dank für eure Beiträge und dem Hinweis auf LIKEDS. Damit habe ich das Programm schonmal umwandeln können!

ABER: Eigentlich wollte ich eine Standard-INFDS als /COPY-Strecke erstellen (z.B. FILEINFDS mit den Spezial-Definitionen *FILE, *STATUS, *OPCODE, ...). Diese wollte ich NICHT hinter einer Datei als INFDS definieren, sondern nur dateispezifische DS (z.B. FILEXYZINFDS), die ich "irgendwie" aus der Referenz-INFDS erstelle.

Wenn ich - wie vorgeschlagen - mit LIKEDS arbeite, dann akzeptiert er die Spezial-Definitionen *FILE, *STATUS,... der Referenz-Datenstruktur nicht, da diese nicht als INFDS bei einer Datei verwendet wurde.

Habt ihr sonst noch einen Vorschlag?
Oder wie habt ihr dies gelöst?

Vielen Dank für weitere Ideen.

Jo

Fuerchau
16-03-10, 08:07
Die Positionen für *FILE, *STATUS usw. sind ja bekannt.
Es bleibt dir also nichts anderes übrig, als diese Felder mit expliziten Namen zu definieren.

BenderD
16-03-10, 08:14
... ob da in einer Copystrecke, die ich nie wieder anfasse, *File oder von Stelle 38 bis Stelle 45 steht, ist mir ziemlich schnurz.
Wichtig ist da noch im kleingedruckten dafür zu sorgen, dass der Name der deklarierten Struktur in der Copy Strecke nicht mehrfach in einer Quelle vorkommen kann, sonst kriegt der Compiler Husten. Deswegen sollte man diese Musterdeklarationen (ordentliche Programmiersprachen erlauben Type Definitions!!!) alle vom Namen her per Konvention pre oder postfixen (Birgitta fängt den Namen mit Ref an, ich lasse die mit Type enden) und wenn man dann noch alle Deklarationen dieser Art in eine QRPGLEH.TYPES zusammenfasst (analog zu Types.h in C), dann kann da nix mehr passieren. Allerdings sollte man diese Deklarattionen alle als based(dummy) machen, damit da zur Laufzeit kein Overhead entsteht, ach ja und die Pseudo Type declarations macht man dann auch noch qualified.

D*B


Hallo Birgitta, hallo Dieter,

vielen Dank für eure Beiträge und dem Hinweis auf LIKEDS. Damit habe ich das Programm schonmal umwandeln können!

ABER: Eigentlich wollte ich eine Standard-INFDS als /COPY-Strecke erstellen (z.B. FILEINFDS mit den Spezial-Definitionen *FILE, *STATUS, *OPCODE, ...). Diese wollte ich NICHT hinter einer Datei als INFDS definieren, sondern nur dateispezifische DS (z.B. FILEXYZINFDS), die ich "irgendwie" aus der Referenz-INFDS erstelle.

Wenn ich - wie vorgeschlagen - mit LIKEDS arbeite, dann akzeptiert er die Spezial-Definitionen *FILE, *STATUS,... der Referenz-Datenstruktur nicht, da diese nicht als INFDS bei einer Datei verwendet wurde.

Habt ihr sonst noch einen Vorschlag?
Oder wie habt ihr dies gelöst?

Vielen Dank für weitere Ideen.

Jo