Anmelden

View Full Version : Datei ist gesperrt ?



sarge
27-12-04, 22:09
Hallo zusammen !

Ich habe ein VARPG-Programm, welches eine Datei auf der AS400 pflegt.
Auf der AS400 habe 2 RPG-Programme .

1. PGM1 Ein Programm, das einen Datensatz per Chain auf der Iseries
liest und in einer Datenstruktur (1 Feld - 512 Alpha) bereitstellt.

2. PGM2 Ein Programm, dass einen Datensatz in der Iseries Datei
schreibt(Write) oder aktualiisert (Update).
Die Daten werden jeweils per Datenstruktur geliefert.

Jetzt das Problem :
Bei mir (V5R3) funktioniert das auch .
Auf unsere V4R4M0 AS400 geht es nicht.
Dort bekomme ich die Meldung : CPF5032
Der Satz ist schon gesperrt ...

Der Ablauf ist eigentlich folgender :
Es wird zuerst pgm1(AS400) aufgerufen, und die Daten in ein Fenster geladen.
Klickt man dann auf speichern(VARPG PC), dann wird pgm2(AS400) aufgerufen.
PGM2(AS400) bekommt dann per Paramter wieder die Daten und macht dann einen
Update, bzw. soll einen Update machen.
Vor dem Update wird allerdings nochmal ein Chain gemacht, damit auch
der richtige Datensatz geladen ist.

Das Problem ist wahrscheinlich, das erst ein Chain von pgm1 gemacht
wird, und dann von pgm2 und das auf die gleiche Datei.
Aber wie gesagt, auf der neuen ISeries läuft das ja.


Jemand ne idee

Gruss sarge

zannaleer
28-12-04, 08:32
Hallo Sarge,

wie ist das Programm auf der iSeries denn aufgebaut? Ich würde es immer so machen, dass ich die Datei mit usropn definiere und explizit vor dem Verlassen von pgm1 die Datei schliesse. Dann kann kein lock mehr vorhanden sein. Warum es bei V5R3 klappt und bei V4R4 nicht, weiß ich allerdings auch nicht.

Gruß
Alexander

Pikachu
28-12-04, 09:41
Hallo sarge !

Die Datei ist in deinem ersten Programm vermutlich für "Update" geöffnet und deshalb setzt der CHAIN dort eine Sperre. Deiner Ablaufbeschreibung nach zu urteilen willst du aber nur lesen. Dann setze die Datei in der Dateidefinition im Programm auf "Input".

Dadurch ergibt sich natürlich wieder ein anderes Problem: Wie bekommst du mit, ob ein anderer Benutzer gleichzeitig auch eine Änderung an dem Datensatz macht oder machen will? Falls du deshalb im Programm 1 eine Sperre setzen willst: Es ist nicht so gut, dass ein Datensatz gesperrt wird und dann auf eine Benutzeraktion gewartet wird, die längere Zeit auf sich warten lassen kann. ;)

Viele Grüße
Jürgen

Rincewind
28-12-04, 11:26
Hi,

Würde folgendes vorschlagen

Datei in pgm1 nur input öffnen.

In PGM2 bei dem entscheidenden CHAIN kann ja immer nur einer zugreifen, also die Daten schön aus der Datei laden und verwalten lassen.

Bei dem CHAIN jedoch mit CHAIN(E) machen.
Dann einfach %ERROR abfragen und solange warten bzw erneut probieren bis nicht mehr %ERROR
(Alternativ: Zurück zu pgm1 mit Meldung: Satz wird schon bearbeitet.)

Gruss

Rince

(Ob es die ILE Funktionen schon unter älteren Releasen als 520 gibt kann ich dir leider nicht sagen, unsere Maschinen sind alle auf 520 (noch *gg*)