PDA

View Full Version : LikeRec oder Overlay oder ganz was anderes ?



Seiten : [1] 2

KaFi
26-03-10, 16:36
Hallo,

ich habe mal wieder ein kleines Problem:

Am besten poste ich mal den Source zu meinem Problem:


D ind1 S 3I 0 Inz(1)
*
D VarField S 30 Dim(20)
/Free
Read DBDatei;
DoW Not %Eof(DBDatei) and ind1 <= 20;
VarField(ind1) = DBFeldName;
Read DBDatei;
ind1 = ind1 + 1;
EndDo;
D_Feld01 = VarField(1);
D_Feld02 = VarField(2);
D_Feld03 = VarField(3);
. . .
. . .
. . .
D_Feld20 = VarField(20);
ExFmt TabelleS1;
*InLR = *On;
Return;
/End-Free


Die Felder D_Feld01 - D_Feld20 sind OUTPUT-Felder einer DSPF-Datei. Diese Felder werden hier aus einer DBDatei vor Aufruf der Maske gefüllt.

So, nun zu meiner Frage : Wie kann ich die 20 Zuweisungen umgehen ? :confused:

Ich habe mit LikeRec und mit Overlay experimentiert, im Forum gelesen, IBM-Literatur gelesen - nichts hat geholfen (oder ich habs halt noch nicht verstanden) ;)

Kann mir da jemand helfen ?
Vielen Dank. :)

Gruß

KaFi

Fuerchau
26-03-10, 16:57
D MyDs DS
D MyFields 600
D Field 30 dim(20) overlay(MyFields)
D DS01 30 overlay(MyFields:1)
D DS02 30 overlay(MyFields:31)
:
D DS20 30 overlay(MyFields:571)

KaFi
26-03-10, 17:50
Danke, für die Antwort. :)

Ich habe deinen Vorschlag übernommen - Das wird auch Fehlerfrei übersetzt ...

aber wie bekomme ich die "Verknüpfung" zu den Feldern in der DSPF-Datei hin ? :confused:
In den Feldern D_Feld01 - D_Feld20 steht nach wie vor nichts :confused:

Gruß

KaFi

Fuerchau
26-03-10, 18:13
Durch die Namensgleichheit!
Ein Feld in einer DS muss nur genauso heißen wie in einer Datei. Das darf aber nur einmal gemacht werden, da ein Name nur 1x pro DS (ausser bei Qualiefied, was mit Datei nur in ILE geht) definiert werden kann.

Du kannst dir ggf. die Tipparbeit sparen, wenn du dir die DS per LikeRec(DSPF-Satz) definierst, dir die Anfangsposition merkst und dann per

D MyFields AnfPos EndPos 30 dim(20)

in die selbe DS packst.

B.Hauser
26-03-10, 18:50
Angenommen die 20 Felder aus der Datenbank Datei heißen xxFld1 - xxFld20 und die Felder in der Display File heißen DspfFld01 - DspFFld20 kann wie folgt vorgegangen werden:
Die Datei-Felder werden in einer Datenstruktur hinterlegt und mit einer Feldgruppe überlagert.
Dabei ist keinerlei Länge-Angaben notwendig!!! Überlagerte Felder sind allein durch die Überlagerung definiert und Felder, die in einer Datei in den F-Bestimmungen definiert wurden sind ebenfalls definiert. Werden unqualifizierte Datenstrukturen verwendet, werden die Felder automatisch beim Lesen gefüllt und beim Schreiben fortgeschrieben.



D DSDspf DS
D DspfFld01
D DspfFld02
D DspfFld03
D
D DspfFld19
D DspfFld20
D FgDspF Like(DspfFld01) Dim(20)
D overlay(DSDspf)

D DSDBFile DS
D XXFld1
D XXFld2
D XXFld3
D
D XXFld19
D XXFld20
D FGDBFile Like(XXFld1) Dim(20)
D overlay(DSDBFile)

/Free
Read DBFile;
FgDspF = FgDBFile;
Exfmt DSPF;
//Eingabe-Prüfung
FgDBFile = FgDSPF;
Update DBFile;
/End-Free


Birgitta

BenderD
26-03-10, 20:20
... ich staune immer wieder wieviel Gehirnschmalz manche Leute verbraten um unleserliche Programme zu schreiben.

D*B

B.Hauser
27-03-10, 15:39
Manchmal würde es aber auch nichts schaden, wenn manche Leute sich (mehr) Gedanken darüber machen würden, wie man den Code so schreiben kann, dass er auch in einem halben Jahr noch/wieder lesbar ist.

Birgitta

Fuerchau
29-03-10, 09:07
Und noch ne Variante:
In den I-Bestimmungen der Datenbank-Datei die Felder einfach passend zur DSPF umbenennen.

Das ganze funktioniert allerdings nur, wenn die Definition identisch ist.

holgerscherer
29-03-10, 11:10
Manchmal würde es aber auch nichts schaden, wenn manche Leute sich (mehr) Gedanken darüber machen würden, wie man den Code so schreiben kann, dass er auch in einem halben Jahr noch/wieder lesbar ist.

Birgitta

Dafür gibts doch Programmgeneratoren (mit lesbarem Meta-Code), die dann ruhig unleserliches RPG produzieren können ;-)

-h

Fuerchau
29-03-10, 11:48
Jepp, das hatte ich früher mal mit Signon, nach Analyse der generierten Quellen entschieden wir uns damals doch für native Programmierung.
Die Programm waren dann erheblich leichter zu warten (vom Ressourcen- und Laufzeit-Bedarf der generierten Objekte mal ganz abgesehen).