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 lesenRecLink()
– verknüpften Datensatz lesenRecInsert()
– Datensatz einfügenRecReplace()
– 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 beiRecReplace()
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.