PDA

View Full Version : Update DTAARA in RPG/LE



HoScHiE
10-06-02, 10:11
Hallo,

ich wollte jetzt mal nach 10000000 Versuchen einen Tip von Euch haben, bevor ich noch mehr Löcher in meinen Schreibtisch beisse ;-).

Also ich möchte gerne den Datenbereich "DAT1"
in meinem Programm lesen und später auch mehrmals updaten.

Aber ich bekomme andauernd einen *lock oder so und muss dann mit *unlock etc. arbeiten ... und beim Aufruf folgendes:
"DAT1 kann nicht fortgeschrieben werden, da er nicht zum fortschreiben zugeordnet ist ..."

so siehts bei mir im Programm aus:

C *DTAARA DEFINE DAT1 $DAT1
C UNLOCK $DAT1
C *LOCK IN $DAT1

beim updaten:
C *LOCK OUT $DAT1
C UNLOCK $DAT1

wie gesagt...manchmal gehts dann wieder nicht ... :-((
Helft mir mal bitte,

Riiiiiiiiiesen Dank,
HoScHiE

[Dieser Beitrag wurde von HoScHiE am 10. Juni 2002 editiert.]

mk
10-06-02, 11:26
Hallo HoScHiE


Du kannst im RPG die DTAARA Lesen:
Dazu kein *Lock angeben.(Es können nur Daten gelesen werden.)
Wenn Du *Lock angibst musst Du mit *OUT die Daten wieder zurückschreiben. ( Sonst ist die DTAARA gesperrt.)

na dann viel Spass
Michael

HoScHiE
10-06-02, 12:37
HAllo,

aber wie update ich mehrmals und warum brauch ich manchmal nen UNLOCK ?!?!?!

Aufgabe:
1. Lesen DTAARA
2. Verarbeitung
3. Update DTAARA in schleife = 10 mal.
4. SET LR

Danke

alex
10-06-02, 14:26
Hey,

im normalen RPG sieht das so aus. Das kann man dann auch mehrfach in einer Schleife einbauen

*NAMVAR DEFN PERSPR 1
*LOCK IN *NAMVAR
MOVEL'X' PERSPR
OUT *NAMVAR

UNLCK*NAMVAR

Fuerchau
10-06-02, 15:06
Das Problem ist, dass der OUT-Befehl die DTAARA entsperrt, ein Update ist also grundsätzlich nur in einer IN .. OUT -Sequenz machbar.
Wenn man mit *NAMVAR arbeitet, ist also jedesmal ein IN-Befehl und dann ein OUT-Befehl erforderlich. Zusätzlich sollten Bezugszahlen gesetzt werden, da beim OUT-Befehl eine exclusive Sperre auf die DTAARA gesetzt wird, d.h., dass zu diesem Zeitpunkt KEIN anderes Programm Zugriff auf die DTAARA haben darf ! Falls doch, wird die Bezugszahl angesetzt und der Update erfolgt NICHT.

Die andere Variante ist die DTAARA in den I-Bestimmungen (UDS) zu definieren. Dann wird die DTAARA beim programmstart gesperrt und beim Programmende (*INLR = *ON) automatisch upgedatet. Das problem hierbei ist, dass zur Laufzeit des programmes KEIN anderes Programm einen Update durchführen kann. EIN DSPDTAARA ist aber jederzeit möglich.