Programmierung

Datensatzsperren

Bei der Verwendung und Veränderung von Datensätzen im Mehrbenutzerbetrieb sind Datensatzsperren unabdingbar.

In diesem Artikel möchte ich erläutern, welche Sperrmodi zur Verfügung stehen und unter welchen Bedingungen ein Datensatz gesperrt beziehungsweise nicht gesperrt werden kann.

Mit Sperren können Schreibkonflikte im Mehrbenutzerbetrieb vermieden werden. Ein Datensatz muss zunächst gesperrt werden, damit er geändert werden kann. Für die Dauer der Sperre kann kein anderer Benutzer den Datensatz sperren.
Datensatzsperren können mit den folgenden Funktionen gesetzt oder entfernt werden:

  • RecRead() – Datensatz lesen
  • RecLink() – verknüpften Datensatz lesen
  • RecInsert() – Datensatz einfügen
  • RecReplace() – Datensatz ersetzen

Eine Sperre kann beim Lesen eines Datensatzes nur gesetzt werden, wenn er über einen eindeutigen Schlüssel oder die Datensatz-ID gelesen wurde.

Sperrmodi

Ein Datensatz ist entweder

  • nicht gesperrt,
  • vom eigenen Benutzer gesperrt,
  • von einem anderen Benutzer gesperrt oder
  • von mehreren Benutzern gemeinsam gesperrt.

Sperroptionen

  • _RecLock

    Mit dieser Option wird eine Sperre angefordert. Dies ist erfolgreich, wenn der Datensatz bisher nicht, oder nur vom eigenen Benutzer gesperrt ist. Ist der Datensatz von einem anderen Benutzer gesperrt, wird der Fehlercode _rLocked zurückgegeben.

  • _RecSingleLock

    Diese Option fordert eine Sperre an, prüft jedoch vorher, ob der Datensatz durch irgendeinen Benutzer gesperrt ist. Ist dies der Fall, wird der Fehlercode _rLocked zurückgegeben. Der Rückgabewert _rOK kommt nur zurück, wenn der Datensatz nicht gesperrt ist.
    Ausnahme: wird diese Option bei RecReplace() angegeben und der Datensatz ist zuvor gesperrt, wird ebenfalls _rOK zurückgegeben.

  • _RecSharedLock

    Die Option _RecSharedLock fordert eine gemeinsame Sperre an. Ist der Datensatz noch nicht, vom eigenen Benutzer einfach, oder von einem bzw. mehreren Benutzern gemeinsam gesperrt, ist das Resultat _rOK. Ist der Datensatz durch einen Benutzer gesperrt, kommt der Fehlercode _rLocked zurück.

  • _RecForceLock

    Mit der Sperroption _RecForceLock wird eine Sperre erzwungen. Alle bestehenden Sperren von anderen Benutzern werden aufgehoben.

    Diese Option sollte jedoch nur in Ausnahmefällen verwendet werden, da die Änderungen der anderen Benutzer verworfen werden.

  • _RecUnlock

    Mit dieser Option wird der gesperrte Datensatz entsperrt. Bei gemeinsam gesperrten Datensätzen wird nur die eigene Sperre aufgehoben. Das Resultat ist immer _rOK, unabhängig davon, ob der Datensatz durch den eigenen Benutzer gesperrt ist, oder nicht.

Keine Kommentare

Kommentar abgeben