RLOCK( )-Funktion
Versucht, einen oder mehrere Datensätze einer Tabelle zu sperren.
RLOCK([nWorkArea | cTableAlias] | [cRecordNumberList, nWorkArea
| cTableAlias])
Rückgabewerte
Logisch
Parameter
nWorkArea cTableAlias
Gibt die Arbeitsbereichsnummer oder den Alias für eine in einem anderen Arbeitsbereich geöffnete Tabelle an. Geben Sie keinen Arbeitsbereich oder Alias an, versucht RLOCK( ), den aktuellen Datensatz in der Tabelle im aktuell ausgewählten Arbeitsbereich zu sperren.cRecordNumberList
Gibt an, dass RLOCK( ) versucht, mehrere Datensätze zu sperren. Der Zeichenausdruck cRecordNumberList gibt eine oder mehrere durch Kommas getrennte Datensatznummern an, die RLOCK( ) zu sperren versucht. Wenn beispielsweise die ersten 4 Datensätze einer Tabelle gesperrt werden sollen, muss in cRecordNumberList 1, 2, 3, 4 angegeben sein.Zum Sperren mehrerer Datensätze muss SET MULTILOCKS auf ON eingestellt sein, und Sie müssen die Nummer des Arbeitsbereichs (nWorkArea) oder den Alias (cTableAlias) der Tabelle, in der mehrere Datensätze gesperrt werden sollen, angeben.
Sie können auch mehrere Datensätze sperren, indem Sie den Datensatzzeiger auf den Datensatz verschieben, den Sie sperren möchten, RLOCK( ) oder LOCK( ) eingeben und dieses Verfahren für weitere Datensätze wiederholen.
In Visual FoxPro können Sie 0 als Datensatznummer verwenden. Wenn Sie 0 als Datensatznummer verwenden, können Sie versuchen, den Tabellenvorspann zu sperren.
Vorsicht Lassen Sie einen Tabellenvorspann nur möglichst kurz gesperrt, da andere Benutzer ansonsten keine Datensätze zur Tabelle hinzufügen können.
Geben Sie die Sperre eines Tabellenvorspanns mit UNLOCK RECORD 0, UNLOCK oder UNLOCK ALL frei.
Wenn alle in cRecordNumberList angegebenen Datensätze erfolgreich gesperrt sind, gibt RLOCK( ) den Wert Wahr (.T.) zurück. Wenn einer oder mehrere der in cRecordNumberList angegebenen Datensätze nicht gesperrt werden können, gibt RLOCK( ) Falsch (.F.) zurück und sperrt keinen der betreffenden Datensätze. In jedem Fall bleiben vorhandene Datensatzsperren erhalten. Die Einrichtung zusätzlicher Datensatzsperren hebt vorhandene Datensatzsperren nicht auf.
Grundsätzlich ist es schneller, eine ganze Tabelle zu sperren, als eine noch so kleine Zahl von Datensätzen zu sperren.
Hinweise
RLOCK( ) ist identisch mit LOCK( ).
Wenn die Sperre bzw. die Sperren erfolgreich eingerichtet sind, gibt RLOCK( ) Wahr (.T.) zurück. Der Benutzer, der die Sperren einrichtet, hat Schreib- und Lesezugriff auf die gesperrten Datensätze. Alle übrigen Benutzer im Netzwerk haben Lesezugriff.
Die Ausführung von RLOCK( ) gewährleistet nicht, dass der Versuch einer oder mehrerer Datensatzsperren erfolgreich durchgeführt wird. So kann z. B. für einen Datensatz oder eine Tabelle, der/die bereits von einem anderen Benutzer gesperrt wurde, keine Datensatzsperre eingerichtet werden. Wenn die Datensatzsperre(n) aus irgendeinem Grund nicht eingerichtet werden kann/können, gibt RLOCK( ) Falsch (.F.) zurück.
Standardmäßig versucht RLOCK( ) ein einziges Mal, einen Datensatz zu sperren. Bei Angabe von SET REPROCESS wird die Sperrung eines Satzes automatisch wiederholt, wenn der erste Versuch fehlgeschlagen ist. SET REPROCESS steuert die Anzahl der Sperrversuche oder die Zeitspanne, während der die Sperrversuche durchgeführt werden, wenn der erste Versuch fehlschlägt. Weitere Informationen zu SET REPROCESS und zum Sperren von Tabellen finden Sie unter SET REPROCESS.
SET MULTILOCKS legt fest, ob in einer Tabelle mehrere Datensätze gesperrt werden können. Wenn SET MULTILOCKS ausgeschaltet ist (Standard), können Sie nur einen einzelnen Datensatz einer Tabelle sperren. Ist SET MULTILOCKS eingeschaltet, können Sie mehrere Datensätze einer Tabelle sperren. Weitere Informationen finden Sie in der Hilfe unter SET MULTILOCKS.
Ein Datensatz in einer Tabelle kann nur von dem Benutzer freigegeben werden, der ihn gesperrt hat. Datensatzsperren können durch Eingeben von UNLOCK, durch Schließen der Tabelle oder durch Beenden von Visual FoxPro freigegeben werden.
UNLOCK kann zum Aufheben von Datensatzsperren im aktuellen Arbeitsbereich, in einem bestimmten Arbeitsbereich oder in allen Arbeitsbereichen verwendet werden. Weitere Informationen finden Sie unter UNLOCK.
Wenn SET MULTILOCKS von ON auf OFF oder von OFF auf ON gewechselt wird, wird implizit UNLOCK ALL ausgeführt. Alle Datensatzsperren in allen Arbeitsbereichen werden aufgehoben.
Mit USE, CLEAR ALL oder CLOSE DATABASES werden Tabellen geschlossen.
Weitere Informationen zum Sperren von Datensätzen und Dateien sowie zum Freigeben von Tabellen in einem Netzwerk finden Sie unter Programmieren für freigegebenen Zugriff.
Beispiel
In dem folgenden Beispiel werden die ersten vier Datensätze in den Tabellen customer
und employee
freigegeben.
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
SET REPROCESS TO 3 AUTOMATIC
STORE '1,2,3,4' TO gcRecList
gcOldExc = SET('EXCLUSIVE')
SET EXCLUSIVE OFF
SELECT 0
USE employee && Open Employee table
SELECT 0
USE customer && Open Customer table
? LOCK('1,2,3,4', 'customer') && Lock 1st 4 records in customer
? RLOCK(gcRecList, 'employee') && Lock 1st 4 records in employee
UNLOCK IN customer
UNLOCK IN employee
SET EXCLUSIVE &gcOldExc
Siehe auch
CLEAR | CLOSE | FLOCK( ) | LOCK( ) | SET MULTILOCKS | SET RELATION | SET REPROCESS | UNLOCK | USE