Konfliktverwaltung
Ob Sie sich beim Aktualisieren nun für die Zwischenspeicherung, für Transaktionen oder für Ansichten entscheiden, Sie müssen bei Konflikten im Aktualisierungsprozess handlungsfähig sein.
Konflikte bei der Zwischenspeicherung
Sie können die Effizienz von Datenaktualisierungsoperationen erhöhen, indem Sie sorgfältig entscheiden, wie und wann Datenbestände in einer Mehrbenutzerumgebung geöffnet, zwischengespeichert und gesperrt werden. Sie sollten in jedem Fall die Zeit beschränken, für die ein Datensatz oder eine Tabelle zum Gegenstand von Zugriffskonflikten werden kann. Trotzdem müssen Sie die in einer Mehrbenutzerumgebung unvermeidlichen Konflikte voraussehen und Vorkehrungen treffen. Ein Konflikt tritt auf, wenn ein Benutzer versucht, einen Datensatz oder eine Tabelle zu sperren, der bzw. die zur Zeit von einem anderen Benutzer gesperrt ist. Zwei Benutzer können nicht denselben Datensatz oder dieselbe Tabelle gleichzeitig sperren.
Ihre Anwendung sollte also über eine Routine verfügen, mit der derartige Konflikte gelöst werden können. Falls die Anwendung nicht über eine solche Konfliktroutine verfügt, kann es sein, dass das System gesperrt wird. Eine Blockierung (Deadlock) tritt auf, wenn ein Benutzer einen Datensatz oder eine Tabelle gesperrt hat und versucht, einen weiteren Datensatz zu sperren, der aber von einem zweiten Benutzer gesperrt wurde, der wiederum versucht, den Datensatz zu sperren, der vom ersten Benutzer bereits gesperrt wurde. Diese Situation tritt zwar selten auf, doch je länger ein Datensatz oder eine Tabelle gesperrt ist, desto größer ist die Wahrscheinlichkeit einer Blockierung.
Abfangen von Fehlern
Für den Entwurf einer Mehrbenutzeranwendung oder beim Hinzufügen von Netzwerkfähigkeit zu einem Einzelbenutzersystem ist es erforderlich, dass Sie sich mit derartigen Kollisionen auseinander setzen und mögliche Fehler abfangen. Ein Teil dieser Arbeit wird durch die Verwendung der Visual FoxPro-Datensatz- und Tabellenpufferung vereinfacht.
Wenn Sie versuchen, einen Datensatz oder eine Tabelle zu sperren, die bereits von einem anderen Benutzer gesperrt wurde, gibt Visual FoxPro eine Fehlermeldung zurück. Sie können nun SET REPROCESS verwenden, um derartige erfolglose Sperrversuche automatisch bearbeiten zu lassen. Dieser Befehl, in Kombination mit einer ON ERROR-Routine und dem RETRY-Befehl, ermöglicht es Ihnen, mit dem Sperrversuch fortzufahren oder diesen abzubrechen.
Im folgenden Beispiel wird die automatische Wiederverarbeitung einer fehlgeschlagenen Operation mit Hilfe des SET REPROCESS-Befehls dargestellt.
Verwenden von SET REPROCESS und ON ERROR zur Bearbeitung von Benutzerkonflikten
Code | Kommentar |
---|---|
|
Diese Routine wird ausgeführt, wenn ein Fehler auftritt. Öffnet die Dateien nicht-exklusiv. Die Wiederverarbeitung eines erfolglosen Sperrversuchs erfolgt automatisch. Öffnen Sie die Tabelle. Erstellt erforderlichenfalls die Tabelle APPEND FROM. |
|
Start der Hauptroutine. Diese Befehle sind Beispiele für Code, der im Verlauf Ihres Programms ausgeführt werden könnte. |
|
Ende der Hauptroutine. |
|
Routine zum Anhängen eines leeren Datensatzes. |
|
Routine zum Ersetzen von Daten im aktuellen Datensatz. |
|
Routine zum Ersetzen von Daten in allen Datensätzen. |
|
Routine zum Ersetzen von Daten im aktuellen Datensatz. |
|
Routine zum Anhängen von Datensätzen aus einer anderen Datei. |
Das folgende Beispiel enthält eine Fehlerprozedur, die gestartet wird, wenn der Benutzer ESC drückt.
Fehlerbehandlung unter Verwendung von ESC
Code | Kommentar |
---|---|
|
Dieses Programm wird aufgerufen, wenn ein Fehler auftritt und der Benutzer den Warteprozess durch Drücken von ESC beendet. |
|
Ermittelt, was für eine Art Fehler aufgetreten ist. Handelt es sich um den Fehler "Datei wird von einer anderen Person verwendet"? |
|
|
|
Oder handelt es sich um den Fehler "Datensatz wird von einer anderen Person verwendet"? |
|
Oder ist es ein unbekannter Fehler? |
|
Zeigt eine Fehlermeldung in einem Dialogfeld mit Ausrufungszeichen und der Schaltfläche OK an. |
Siehe auch
Verwaltung von Updates mit Sichten | Ermitteln und Lösen von Konflikten | Programmieren für freigegebenen Zugriff | SET REPROCESS | ON ERROR | RETRY