[Allegro] if diff und obj 2

Bernhard Eversberg ev at biblio.tu-bs.de
Di Apr 30 16:13:22 CEST 2013


Am 30.04.2013 15:31, schrieb Thomas Berger:

>>> wird denn beim "put" nicht der Zustand in der Datenbank mit
>>> dem der Offline-Datei "getauscht"? Oder worauf greift die
>>> Mechanik beim "wechseln" zu?
>> Ja. Mit set q5 kriegen Sie dann den Zustand in der Datenbank.
>> (Versuch macht klug)
>
> Gesagt getan und ich staune: nach dem Put ist q5 die "gruene"
> Version. Oder ich gehe auf "wechseln", dann ist q5 die
> "gelbe" Version. D.h. q5 ist gar kein bestimmter Satz oder
> spezieller Zustand/Version eines Satzes in der Offline-Datei,
> sondern nur eine vom Zufall abhaengende Verbildlichung anhand
> der internen Satznummer.
>
q5 stellt dar, welche Fassung des Satzes der Nutzer gegenwärtig
als gültig gewertet wissen will, wenn es denn zum Beenden und
bereinigenden Speichern käme ohne weitere Aktionen. (ist es die
grüne Fassung, passiert am Ende weiter nichts mit dem Satz,
ein im Offline vorhandene Fassung verschwindet; ist's die gelbe,
wird sie die grüne in der Datenbank ersetzen.

Damit das Programm zu einer gegebenen internen Satznummer sofort
sehen kann, daß dazu ein Satz in der .$$$ existiert, gibt es intern
eine CMap ("a dictionary collection class that maps unique keys to 
values") namens Rx, die der internen Satznummer eine lfd. Nr. zuordnet,
zu welcher sich aus der .TAB die Adresse in der .$$$ ergibt, wo die
aktuelle Fassung des Onlinse-Satzes steht. Und das Flag in der
.TAB zeigt auch an, welches die aktuelle Fassung im Sinne des
Nutzers ist: online oder offline.
(Für neue bzw. echte Offline-Sätze sehen die .TAB-Einträge
etwas anders aus, das tut aber hier nichts zur Sache)

Der noch nicht existierende Befehl  var On  ermittelt des
Satzes lfd. Nr. in der Offline-Datei; falls er da noch nicht
drinsteht, wird er zuerst hineinkopiert und hat dann eine,
auf die man sich beziehen kann.
Allerdings: Mit  find #nnn  kriegt der Anwender und sein FlEX
automatisch die gelbe Fassung zu sehen, die er vorher erstellt
und noch nicht gespeichert hat. Ein anderer kriegt natürlich
nur die jeweils grüne zu sehen.
(so betrachtet ist evtl.  var On  für ONline-Sätze gar nicht nötig.
Für "new"-Sätze vor dem Abspeichern aber schon, zumal wenn sie
dann gar nicht gespeichert werden, sondern nur Arbeitsobjekte
sind. )

>
>>> Gibt es mehrere Versionen desselben
>>> Satzes in der Offline-Datei?
>> Ja, aber mit set q5 kriegen Sie nur den letzten, die anderen
>> stehen da nur noch nutz- und wirkungslos rum. Das macht nichts,
>> weil die Offline-Datei i.d.R. am Sitzungsende verschwindet.
>
> ah ja, die Offline-Datei spielt also ein Sandkasten-allegro:
> Es gibt da x gespeicherte Saetze die zu y<x "logischen"
> Positionen gehoeren und ich komme nur ueber y dran.
Ja.

> Aber: Wo sitzt denn nun die "gelbe" Version meines gespeicherten
> Datensatzes?
Dessen aktuelle Position steht in der TAB-Datei. (Die anderen
Positionen aus evtl. vorher getätigten Änderungen sind nicht
mehr zugänglich, obwohl in der .$$$ noch vorhanden.)
Ein neuer Satzzustand, d.h. ein neues Abbild in der .$$$m
entsteht beim nächsten Übergang von dem Satz zu einem anderen,
d.h. Wechsel des aktuellen Satzes. Nicht bei jeder einzelnen
(atomaren) Bearbeitung, wie z.B. "insert".

Und warum kommt "wechseln" dran und "set q" nicht?
>
Dazu müßten Sie dem  "set q" noch ein "undo" folgen lassen,
welches genau wie der Button zwischen gelb und grün toggelt.

B.E.




Mehr Informationen über die Mailingliste Allegro