4D v14.3Überblick zu Datensatz sperren |
||
|
4D v14.3
Überblick zu Datensatz sperren
Überblick zu Datensatz sperren
4D und 4D Server verwalten die Datenbanken automatisch bei Mehrfachbenutzung. Zwei Benutzer bzw. zwei Prozesse können nicht gleichzeitig denselben Datensatz oder dasselbe Objekt ändern. Der zweite Benutzer bzw. Prozess kann zur selben Zeit nur im Lesemodus darauf zugreifen. Multi-User Befehle bieten sich an, wenn Sie:
Setzen Sie eine Datenbank in der Multiprozess-Umgebung ein, müssen Sie folgendes beachten:
In den folgenden Abschnitten verwenden wird die Begriffe wie folgt: Ein gesperrter Datensatz kann weder vom lokalen Benutzer noch vom laufenden Prozess geändert werden. Er kann geladen, jedoch nicht geändert werden. Ein Datensatz ist gesperrt, sobald einer der anderen Benutzer oder Prozesse diesen im Lese-/Schreibmodus geladen hat oder der Datensatz gestapelt ist. Nur der Benutzer, der den Datensatz ändert, sieht ihn als nicht gesperrt. Für alle anderen Benutzer und Prozesse erscheint dieser Datensatz als gesperrt. Sie können keine Änderungen vornehmen. Der Datensatz hat nur dann den Status nicht gesperrt, wenn die dazugehörige Tabelle im Lese-/Schreibmodus ist. Jede Tabelle in einer Anwendung ist entweder im Lese-/Schreibmodus oder Nur-Lesen für jeden Benutzer und jeden Prozess der Datenbank. Nur-Lesen bedeutet, dass die Datensätze einer Tabelle geladen, aber nicht geändert werden können. Lesen/Schreiben bedeutet, dass Datensätze für die Tabelle geladen und geändert werden können, wenn kein anderer Benutzer den Datensatz zuvor gesperrt hat. Ist eine Tabelle im Modus Nur-Lesen und wird ein Datensatz geladen, ist der Datensatz immer gesperrt, d.h. er lässt sich anzeigen, drucken oder anderweitig nutzen, aber nicht verändern. Der Status Nur-Lesen gilt nur für das Bearbeiten vorhandener Datensätze, er hat keine Auswirkung auf das Erstellen neuer Datensätze. In einer Tabelle im Modus Nur-Lesen können Sie Datensätze über die Befehle CREATE RECORD und ADD RECORD oder über die Menübefehle der Designumgebung hinzufügen. Beachten Sie, dass der Nur-Lesen Status nicht für den Befehl ARRAY TO SELECTION gilt, da er Datensätze erstellen und ändern kann. 4D setzt eine Tabelle für Befehle, die keinen Schreibzugriff auf Datensätze benötigen, automatisch auf Nur-Lesen. Das sind folgende Befehle: DISPLAY SELECTION, DISTINCT VALUES, EXPORT DIF, EXPORT SYLK, EXPORT TEXT, _o_GRAPH TABLE, PRINT SELECTION, PRINT LABEL, QR REPORT, SELECTION TO ARRAY, SELECTION RANGE TO ARRAY.
Den Status einer Tabelle können Sie jederzeit mit der Funktion Read only state herausfinden. Vor der Ausführung einer dieser Befehle sichert 4D den aktuellen Status der Tabelle (Lesemodus oder Lese-/Schreibmodus) für den laufenden Prozess . Dieser Status wird nach Ausführung des Befehls wiederhergestellt. Ist eine Tabelle im Lese-/Schreibmodus und wird ein Datensatz geladen, wird der Datensatz entsperrt, wenn ihn zuvor kein anderer Benutzer gesperrt hat. Ist der Datensatz von einem anderen Benutzer gesperrt, wird er als gesperrt geladen und kann vom lokalen Benutzer nicht verändert werden. Eine Tabelle muss in den Lese-/Schreibmodus gesetzt werden, damit der geladene Datensatz entsperrt wird und änderbar ist. Lädt ein Benutzer einen Datensatz von einer Tabelle im Lese-/Schreibmodus, kann kein anderer Benutzer diesen Datensatz zum Ändern laden. Er kann jedoch in der Tabelle Datensätze hinzufügen, entweder über die Befehle CREATE RECORD und ADD RECORD oder manuell in der Designumgebung. Alle Tabellen sind standardmäßig im Lese-/Schreibmodus, wenn eine Datenbank geöffnet und ein neuer Prozess gestartet wird. Sie können den Status einer Tabelle über die Befehle READ ONLY und READ WRITE ändern. Wollen Sie den Status einer Tabelle ändern, um einen Datensatz auf Nur-Lesen oder Lesen/Schreiben zu setzen, müssen Sie den Befehl vor Laden des Datensatzes ausführen. Die Befehle READ ONLY und READ WRITE gelten nicht für den bereits geladenen Datensatz. Jeder Prozess hat seinen eigenen Status (Nur-Lesen oder Lesen/Schreiben) für jede Tabelle in der Datenbank. Bevor ein lokaler Benutzer einen Datensatz ändern kann, muss die Tabelle im Status Lesen/Schreiben sein und der Datensatz geladen und entsperrt sein. Jeder Befehl, der einen aktuellen Datensatz (sofern vorhanden) lädt, wie NEXT RECORD, QUERY, ORDER BY, RELATE ONE, etc., setzt den Datensatz auf gesperrt oder entsperrt. Der Datensatz wird gemäß dem aktuellen Status seiner Tabelle (Nur-Lesen oder Lesen/Schreiben) und seiner Verfügbarkeit geladen. Es kann auch ein Datensatz einer verknüpften Tabelle geladen werden, wenn einer der Befehle eine automatische Verknüpfung auslöst. Ist eine Tabelle im Nur-Lesen Status, ist der geladene Datensatz gesperrt. Ein gesperrter Datensatz kann von einem anderen Prozess weder gesichert noch gelöscht werden. Nur-Lesen ist der bevorzugte Status, da so andere Benutzer den Datensatz laden, ändern und dann sichern können. Ist eine Tabelle im Lesen/Schreiben Status, ist der geladene Datensatz nur dann nicht gesperrt, wenn er nicht zuvor durch einen anderen Benutzer gesperrt wurde. Ein nicht gesperrter Datensatz lässt sich ändern und sichern. Eine Tabelle sollte in den Lesen/Schreiben Status gesetzt werden, bevor ein Datensatz geladen, geändert und gesichert wird.
Hinweis: Wird UNLOAD RECORD in einer Transaktion verwendet, entsperrt er den aktuellen Datensatz nur für den Prozess, der diese Transaktion verwaltet. Für andere Prozesse bleibt der Datensatz gesperrt, bis die Transaktion bestätigt oder annulliert wurde. Verwenden Sie den Befehl LOCKED ATTRIBUTES, um feststellen, welcher Benutzer bzw. Prozess einen Datensatz gesperrt hat. Folgendes Beispiel zeigt die einfachste Schleife zum Laden eines nicht-gesperrten Datensatzes: READ WRITE([Customers]) ` Setze Tabelle auf Lese-/Schreibmodus Die Schleife läuft solange, bis der Datensatz freigegeben ist. Diese Schleife wird nur verwendet, wenn Sie davon ausgehen können, dass der Datensatz nicht durch jemand anderen gesperrt ist. Denn der Benutzer muss das Beenden der Schleife abwarten. Der Fall ist relativ unwahrscheinlich, da der Datensatz nur über eine Methode geändert werden kann. Folgendes Beispiel verwendet die obige Schleife, um einen ungesperrten Datensatz zu laden und anschließend zu ändern: READ WRITE([Inventory]) Der Befehl MODIFY RECORD zeigt dem Benutzer automatisch an, ob der Datensatz gesperrt ist und unterbindet so eine Änderung. Folgendes Beispiel umgeht diese automatische Anzeige durch den Test mit der Funktion Locked. Ist der Datensatz gesperrt, kann der Benutzer abbrechen. Dieses Beispiel prüft in optimaler Weise, ob der aktuelle Datensatz für die Tabelle [Commands] gesperrt ist. Wenn ja, wird der Prozess von der Methode um eine Sekunde verschoben. Diese Technik können Sie sowohl in der Multi-User- als auch in der Multiprozessumgebung einsetzen: Repeat Ein Reihe von Befehlen der Programmiersprache arbeiten bei nicht-gesperrten Datensätzen normal. Treffen sie auf einen gesperrten Datensatz, führen sie ganz bestimmte Aktionen aus. Es handelt sich um folgende Befehle:
|
EIGENSCHAFTEN
Produkt: 4D SIEHE AUCH
LOAD RECORD ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v12.4) Gesplittet : Überblick zu Datensatz sperren ( 4D v14 R3) |