CC locktable tut es nicht wie erwartet

8. November 2016 11:55

Hallo Zusammen,

folgendes kurzes Codeschnipsle arbeitet nicht wie ich es erwartet habe :
Code:
locEntfernung.LOCKTABLE(TRUE);
locEntfernung.SETRANGE(MaNr, '101');
locEntfernung.FIND('-');
locEntfernung.FIND('-');
locEntfernung.FIND('-');
locEntfernung.FIND('-');


Wenn wir diesen Code in 2 Clients parallel im Debugger testen und Client 1 in der 4 Zeile anhalten läuft der Client 2 trotzdem am locktable vorbei und liefert die bekannte Fehlermeldung "Tabelle gespperrt"

Warum ?

Viele Grüße
Hans-Dieter

Re: CC locktable tut es nicht wie erwartet

8. November 2016 11:59

Hallo,

habs jetzt gerade nicht parat, aber entweder ein programmierter MODIFY/INSERT oder eine Zuweisung auf eine Variable des Records führt zu einem richtigen Lock.

Gruß Fiddi

Re: CC locktable tut es nicht wie erwartet

8. November 2016 12:01

Hallo Fiddi,

aus der Hilfe:
Wait
Type: Boolean
Specifies what to do if the table is already locked.
If this parameter is true and if another application has already locked the table, the system will wait until the table is unlocked.
If this parameter is false and if another application has already locked the table, a run-time error occurs.


Daher erwarte ich eigentlich, dass Client 2 nicht am locktable vorbeikommt

Re: CC locktable tut es nicht wie erwartet

8. November 2016 12:09

h-d.neuenfeldt hat geschrieben:und Client 1 in der 4 Zeile anhalten
Client 1 hat also schon das Locktable ausgeführt, die Transaktion ist aber noch nicht beendet: Tabelle gesperrt.

läuft der Client 2 trotzdem am locktable vorbei

Das Locktable allein macht - scheinbar - auch nichts, solange keine Schreibtransaktion folgt.

und liefert die bekannte Fehlermeldung "Tabelle gespperrt"
So hätte ich es zumindest auch erwartet.

Geht es dir nur darum, dass du die Sperrmeldung schon für die Zeile Locktable des Client 2 erwartet hast?

Edit: Zum Zeitpunkt meiner Antwort habe ich den Doppelpost mit den anderen Antworten noch nicht gesehen.

Re: CC locktable tut es nicht wie erwartet

8. November 2016 12:21

Geht es dir nur darum, dass du die Sperrmeldung schon für die Zeile Locktable des Client 2 erwartet hast?


so bzw so ähnlich ..
ich erwarte auf jeden Fall, dass auf Client 2 KEINE Fehlermeldung erscheint ...

Re: CC locktable tut es nicht wie erwartet

8. November 2016 12:25

Daher erwarte ich eigentlich, dass Client 2 nicht am locktable vorbeikommt


Es reicht - glaube ich - das du eine Schreibtransaktion programmierst. Das Programm muss da noch nicht einmal hinkommen.

Der Locktable wird nur ausgeführt, wenn auch eine Schreibtransaktion im Anschluss durchgeführt werden würde. Und dann greift auch die Aussage der Hilfe für die anderen.

Gruß, Fiddi

Re: CC locktable tut es nicht wie erwartet

8. November 2016 13:02

Hallo Hans-Dieter,

ich glaube, das hängt damit zusammen, dass der LOCKTABLE wie alle schreibenden Aktionen erst beim nächsten Lesen ausgeführt werden.
Das hatte früher mal den Tittel "Write Buffer".

Wann erhält du die Fehlermeldung "Tabelle gesperrt"?
Meiner Meinung nach beim ersten "locEntfernung.FIND('-');", oder?

Re: CC locktable tut es nicht wie erwartet

8. November 2016 13:15

Meiner Meinung nach beim ersten "locEntfernung.FIND('-');", oder?


genau..