[Allegro] if-Befehl bei Flex
Anando Eger
a.eger at aneg-dv.de
Mi Dez 17 16:27:56 CET 2014
Liebe Listenleserinnen und -leser,
Hallo Herr Wolf
"if usr" versucht die ?.tbl-Datei in RRRR.rrr umzubenennen.
Wenn das gelingt, wird diese wieder zurück-umbenannt und die
gewünschte Aktion ausgeführt (bzw. logisch negiert bei if not usr)
Bekannte Nebenwirkungen:
1. Es gibt ein Zeitfenster, während dessen die ?.tbl "nicht da"
ist - dann gibt's einen crash, wenn von einem zweiten
Netzwerk-Platz aus in dem Moment ein Datenbankzugriff erfolgt
2. bei aktivem File-Caching irgendwo auf dem Weg zum
Netzwerk-Speicher wird oft etwas Falsches erkannt
3. Nach einem Crash bleibt manchmal die RRRR.rrr stehen - dann
hilft nur noch ein manuelles Löschen dieser Datei
Meine Empfehlung: Diesen Befehl im Netzwerk nicht nutzen, sondern
eine eigene Erkennung bauen - etwa so:
Im _Start.Flx wird in einer Semaphoren-Datei im Datenbank-
Verzeichnis ein Zähler hochgezählt, im _endflx dieser wieder
zurückgesetzt.
Als Mutex für den Zugriff läßt sich irgend ein Datensatz in der
Datenbank benutzen - vorzugsweise ein spezielle Systemsatz.
Mögliche Umsetzung:
_start.flx:
- Datensatz verriegeln
- wenn Erfolg, Zähler in Semaphore erhöhen
- wenn kein Erfolg, Abbruch
- Datensatz entriegeln
_endflx.flx:
- Datensatz verriegeln
- wenn Erfolg, Zähler in Semaphore veringern
- wenn kein Erfolg, Meldung "Schwerer Fehler" mit Hinweis
auf Ursache
- Datensatz entriegeln
Um zu ermitteln, ob weitere Anwender die gleiche DB benutzen,
genügt es dann, den Zähler in der Datei zu lesen.
Nachteile dieser Variante:
- Falls a99 mal "abgeschossen wird", muss die Semaphoren-Datei
händisch wieder korrigiert werden.
- funktioniert nicht zusammen mit acon-Zugriffen, die nicht von
a99 gestartet werden
Viele Grüße
Anando Eger
Lieber Herr Eversberg,
wir (Allers und Wolf) verwenden seit Jahren den Befehl
if use ... um zu verhindern, daß bestimmte Aktionen von den Nutzern
durchgeführt werden solange noch jemand zweites mit der Datenbank
arbeitet.
Nun ist der Befehl if use ... gar nicht in der Flex-Doku enthalten.
Viele wichtiger ist aber: was genau prüft 'if use' ?
Hintergrund: Ich habe ein etwas merkwürdig konstruiertes VPN-
Netzwerk
zwischen Rabat und Casablanca in Marokko und die allegro Datenbank
ist immer
in Gebrauch.
Viele Grüße
Andreas Wolf
_______________________________________________
Allegro mailing list
Allegro at biblio.tu-bs.de
http://sunny5.biblio.etc.tu-bs.de/mailman/listinfo/allegro
Mehr Informationen über die Mailingliste Allegro