Version 11
SET QUERY AND LOCK (Sperren)
Parameter | Typ | Beschreibung | |
Sperren | Boolean | Wahr = Durch Suchläufe gefundene | |
Datensätze sperren, | |||
Falsch = Gefundene Datensätze nicht sperren |
Beschreibung
Mit dem Befehl SET QUERY AND LOCK können Sie festlegen, dass die Datensätze gesperrt werden, die durch Suchläufe, ausgelöst durch Aufruf dieses Befehls in der aktuellen Transaktion, gefunden werden. Das bedeutet, dass die Datensätze zwischen der Suche und dem Bearbeiten des Suchergebnisses nur im aktuellen Prozess verändert werden können.
Standardmäßig sind die durch eine Suche gefundenen Datensätze nicht gesperrt. Übergeben Sie im Parameter Sperren Wahr, wird das Sperren aktiviert.
Dieser Befehl muss innerhalb einer Transaktion verwendet werden. Bei Aufruf außerhalb dieses Kontexts wird ein Fehler erzeugt. So lässt sich das Sperren von Datensätzen besser steuern.
Die gefundenen Datensätze bleiben gesperrt, bis die Transaktion durch Bestätigen oder Abbrechen beendet wird. Dann sind wieder alle Datensätze freigegeben.
Wurde SET QUERY AND LOCK(Wahr) ausgeführt, nehmen die Suchbefehle, wie z.B. QUERY eine spezifische Funktionsweise an, wenn beim Suchen Datensätze gefunden werden, die bereits gesperrt sind:
- Die Systemvariable OK wird auf 0 (Null) gesetzt,
- Die aktuelle Auswahl wird aufgehoben
- Die Systemmenge LockedSet wird aktualisiert: Sie enthält die beim Suchen gefundenen gesperrten Datensätze.
Folglich müssen Sie in diesem Zusammenhang bei einer ergebnislosen Suche (aktuelle Auswahl leer bzw. Variable OK auf 0 gesetzt) die Menge LockedSet testen, um den Grund für die fehlgeschlagene Suche herauszufinden.
Die Datensätze werden für alle Tabellen in der aktuellen Transaktion gesperrt. Rufen Sie SET QUERY AND LOCK(Falsch) auf, um diese Operation anschließend wieder aufzuheben.
Beispiel
In diesem Beispiel lässt sich zwischen den Befehlen QUERY und DELETE SELECTION ein Kunde, der von Kategorie C in Kategorie A übertragen wird, nicht verändern.
START TRANSACTION SET QUERY AND LOCK(True) QUERY([Customers];[Customers]Category="C") `In diesem Moment werden die gefundenen Datensätze automatisch für alle anderen Prozesse gesperrt. DELETE SELECTION([Customers]) SET QUERY AND LOCK(False) VALIDATE TRANSACTION
Fehler verwalten
Wird der Befehl außerhalb einer Transaktion aufgerufen, wird ein Fehler generiert.
Referenz