Hallo,
ich habe ein Problem mit dem Setzen von Datenbanksperren. Ich habe eine Anwendung die eine Z-Tabelle verarbeitet. Zu dieser habe ich eine Sperre erstellt mit den Schlüsselfeldern:
MANDT, Version (NUMC4), Attribut (CHAR2)
Wenn jetzt Benutzer A die Anwendung öffnet mit Version 1 (0001) und Attribut "AB" wird die Sperre ordnungsgemäß gesetzt, wie ich im Aufruf von ENQUEUE_READ sehen kann (Der Schlüssel sieht so aus: 123 0001 AB, die Leerzeichen sind zum besseren Lesen). Wenn jetzt Benutzer B die Anwendung öffnet mit Version 0 (0000) und Attribut "AB", dann wird das Anfordern der Schreibsperre aber abgelehnt, obwohl weiterhin nur der Datensatz mit der Version 1 gesperrt ist.
Wenn Benutzer A das Programm beendet, und Benutzer B mit Version 0 reingeht, sieht man mit ENQUEUE_READ folgenden Eintrag: 123 AB, die Nullen werden nicht angezeigt. Wenn man sich den Wert genauer ansieht, sind anstelle von 4 Nullen 4 @-zeichen zurückgegeben. Ich habe mir dann im Debugger den Sperrbaustein angesehen und finde da auch eine Ursache:
Code: Alles auswählen.
IF NOT VERSION IS INITIAL OR
NOT x_VERSION IS INITIAL.
MOVE VERSION TO:
%a_ZTAB-VERSION.
ENDIF.
0000 ist ja der Initialwert der Version, und ich gehe davon aus, das in %a_ZTAB-VERSION das @-Zeichen vorbelegt ist.
Meine Frage ist jetzt, ob es dafür einen Ausweg gibt? Ich komme an der Version 0 zur Zeit nicht vorbei.
VG
Xilukarim