PDA

View Full Version : Letzten Satz aus Datei lesen



Dw4rf79
17-08-07, 13:49
Hallo zusammen,
ich soll aus einem Table den "letzten" Satz, sprich den Satz mit der höchsten Adressnummer auslesen. Diese Adressnummer soll bei Neuanlage einer Adresse um eins erhöht werden.
Kann mir jemand sagen, wo der Fehler in PrcMaxAdrNr liegt?


Table


0002.00 CREATE TABLE YYPERR
0003.00
0004.00 (PERMANDA CHAR (05) WITH DEFAULT ' ' ,
0005.00 PERFIRMA CHAR (03) WITH DEFAULT ' ' ,
0006.00 PERADRNR NUMERIC (4 , 0) WITH DEFAULT 0 ,
0007.00 PERANRED CHAR (04) WITH DEFAULT ' ' ,
0008.00 PERTITEL CHAR (20) WITH DEFAULT ' ' ,
0009.00 PERVNAME CHAR (20) WITH DEFAULT ' ' ,
0010.00 PERNNAME CHAR (20) WITH DEFAULT ' ' ,
0011.00 PERSTRAS CHAR (36) WITH DEFAULT ' ' ,
0012.00 PERPLZ CHAR (20) WITH DEFAULT ' ' ,
0013.00 PERORT CHAR (20) WITH DEFAULT ' ' ,
0014.00 PERLAND CHAR (20) WITH DEFAULT ' ' ,
0015.00 PERTEL CHAR (20) WITH DEFAULT ' ' ,
0016.00 PERFAX CHAR (20) WITH DEFAULT ' ' ,
0017.00 PERMOBIL CHAR (20) WITH DEFAULT ' ' ,
0018.00 PERMAIL CHAR (36) WITH DEFAULT ' ' ,
0019.00 PERLOEKZ CHAR (1) WITH DEFAULT ' ' ,
0020.00 PERAENKZ CHAR (1) WITH DEFAULT ' ' ,
0021.00 PERUSER CHAR (10) WITH DEFAULT ' ' ,
0022.00 PERPROGR CHAR (10) WITH DEFAULT ' ' ,
0023.00
0024.00 PRIMARY KEY (PERMANDA, PERADRNR) );
RPG-Prog
0074.01 *-----Hoechste vorhandene Adressnummer ermitteln
0074.02 d PrcMaxAdrNr PR 4 0
0074.03


0149.00 d GDsUeb DS
0150.00 d GAnManda 5A
0151.00 d GAnLoeKz 1A
0152.00 d GNuAdrNr 4 0
0153.00 d GAnNName 20A
0154.00 d GAnOrt 20A
0155.00 d GAnTel 20A
0160.00 c KeyYyPerp KList
0161.00 c KFld ExManda
0162.00 c KFld GNuAdrNr
0163.00
0164.00 c move *date Gsysdat


0172.01 * Adressnummer bei Neuanlage festlegen:
0172.02 c callp PrcMaxAdrNr
0173.00 c eval GNuAdrNr = PrcMaxAdrNr


0709.00 *------------------------------------------------------------------
0710.00 * PrcMaxAdrNr
0711.00 *------------------------------------------------------------------
0712.00 p PrcMaxAdrNr B
0713.00 d PrcMaxAdrNr PI 4 0
0714.00
0715.00 d LNuAdrNr s 4s 0 inz(2)
0718.00
0719.00 c KeyYyPerp KList
0720.00 c KFld ExManda
0721.00 c KFld GNuAdrNr
0727.00
0730.00 c eval GNuAdrNr = *HIVAL
0730.01 c
0731.00 c KeyYyPerp setgt YyPerp
0732.00 c KeyYyPerp readpe(n) YyPerp
0732.03 c
0733.00 c if %eof(YyPerp)
0734.00 c eval GNuAdrNr = *zero
0735.00 c else
0736.00 c eval GNuAdrNr = PerAdrNr + 1
0737.00 c endif
0737.01 c
0737.02 c*** Wert für Adressnummer zuweisen ***
0737.03 c eval LNuAdrNr = GNuAdrNr
0737.04
0737.05 c*** Testwert für Adressnummer ***
0737.06 c* eval LNuAdrNr = 111
0737.07
0741.00 c return LNuAdrNr
0742.00
0743.00 p PrcMaxAdrNr E

MfG Dw4rf79

B.Hauser
17-08-07, 14:00
Hallo,

ich würde beim Rückwärtslesen nur einen Teilschlüssel (EXMANDA) verwenden.



0719.00 c KeyYyPerp KList
0720.00 c KFld ExManda
0721.00 c KFld GNuAdrNr
0727.00
0730.00 c eval GNuAdrNr = *HIVAL
0730.01 c
0731.00 c KeyYyPerp setgt YyPerp
0732.00 c ExManda readpe(n) YyPerp

Birgitta

Dw4rf79
17-08-07, 14:07
Danke für die schnelle Antwort. Mit nur einem Teilschlüssel hat die Prozedur auch direkt gemacht, was sie sollte :)

MfG Dw4rf79