PDA

View Full Version : LF mit 2 Formaten



GUK
04-01-22, 13:57
Hallo liebes Forum,

ich habe eine Frage zu einem LF mit 2 Formaten.
Lt. Programm sollte es die Kilometer ermitteln.



FRELATDL1 IF E K DISK

C RELKEY KLIST
C KFLD AORT (=WIEN)
C KFLD EORT (=SALZBURG)



SELECT * FROM relatdp
WHERE REBLO = 'SALZBURG'
and REELO = 'WIEN'
Beladeort ENTLADEORT km
1 SALZBURG WIEN 296
2 WIEN SALZBURG 296


Obwohl es den Datensatz WIEN-Salzburg gibt findet er das im Chain nicht.


relkey chain relatdl1
if %found
eval milage = rekma
endif


Kann das so eigentlich funktionieren mit diesen 2 Formaten in den logischen Datei?
Müssten da alle Keys angegeben werden?

In Faktor 2 den Format angeben hat auch nicht funktioniert da ich dann den Key nicht angeben kann.


PF: RELATDP

A UNIQUE
A R RELATD TEXT('RELATIONSDATEI')
*
A REBLO R TEXT('BELADEORT ')
A REELO R TEXT('ENTLADEORT ')
A REKMI R
A REBPLZ 9 TEXT('PLZ Beladeort ')
A REEPLZ 9 TEXT('PLZ Entladeort ')
A REKMA R
A REKMI1 R REFFLD(REKMI)
A REKMA1 R REFFLD(REKMA)
A REKMI2 R REFFLD(REKMI)
A REKMA2 R REFFLD(REKMA)
A REBLSL 3 TEXT('Landschl. Beladeort ')
A REELSL 3 TEXT('Landschl. Entladeort ')
A*
A*
A K REBLO
A K REELO
A K REBLSL
A K REELSL
A K REBPLZ
A K REEPLZ

Logische: RELATDL1

A R RELATDF1 PFILE(*LIBL/RELATDP)
A*
A REBLO R
A REELO R
A REROU R
A REKMI R
A REKMA R
A* :
A REBLSL R
A REELSL R
A* :
A REBPLZ R
A REEPLZ R
A REKMMG R
A*
A*
A K REBLO
A K REELO
A K REBLSL
A K REELSL
A K REBPLZ
A K REEPLZ
A*
A R RELATDF2 PFILE(*LIBL/RELATDP)
A*
A REBLO R
A REELO R
A REROU R
A REKMI R
A REKMA R
A* :
A REBLSL R
A REELSL R
* :
A REBPLZ R
A REEPLZ R
A*
A K REELO
A K REBLO
A K REELSL
A K REBLSL
A K REEPLZ
A K REBPLZ

Dank im Voraus

Kaya

RobertMack
04-01-22, 14:10
Wozu eigentlich die LF, es verweisen doch beide Satzformate auf die gleiche PF? Alternative wäre ein Zugriff per SQL statt Chain, auf eine View RELATDV1 mit den beiden "Satzformaten" via UNION und entsprechend getauschten Feldern im jeweiligen Select).

GUK
04-01-22, 14:18
Ein Ex-Kollege hat mir den Rat gegeben mit auf den Satzformatnamen zu chainen:
chain relkey RELATDF1;

Ich verstehe nur nicht den Sinn von 2 Satzformaten in einer Logischen.
Das meiste mache ich mit Sql aber es gibt halt noch viele Pgm die noch umgestellt gehören...

RobertMack
04-01-22, 14:43
Hallo GUK, der Trick mit den zwei Satzformaten ist (war seinerzeit) gar nicht mal so schlecht, hat man doch die beiden Felder Von und Nach jeweils getauscht "untereinander" ;-)

Und, gerade sehe ich, dass es Chain(E) heißen sollte damit if %found ein Ergebnis liefert...

GUK
04-01-22, 15:02
Ich dachte mir schon das ein cooler Trick dabei ist, aber ich bin nicht drauf gekommen und habe es auch nicht googlen können.
Und das wollte ich niemanden zu nahe treten und sauge das Wissen gerne auf.

Mit Chain(E) liest er dann den nächstes Satzformat bei einem Error?
Weil jetzt funktioniert es auch ohne (E).

Fuerchau
04-01-22, 16:36
SQL unterstützt keine Multiformat-LF's, da wird nur die 1. PF der LF verwendet.
Per "Chain Dateiname" wird jedes Format gefunden. Die INFDS sagt dir dann, welches Format ggf. gelesen wurde.
Per "Chain Formatname" wird nur die gewünschte PF gelsen.

Für SQL kannst du das nur als Union-View erstellen um es mit SQL zu lesen.