Trick 66: Daten aus dem Off  
                Offline-Liste genauer inspizieren

Aufgabe: Schnell mal schauen, was in der Offline-Datei WIRKLICH alles
         steht.

Warum: Zu sehen bekommt man in der Offline-Datei mit Alt+q und dann
       Alt+w immer nur den jeweils aktuellen und den davor zuletzt
       überschriebenen Stand der Bearbeitung eines Satzes, nicht
       die evtl. erfolgten mehrfachen, jeweils gespeicherten Korrekturen
       während einer Sitzung.
       JEDE der GESPEICHERTEN Fassungen ist jedoch in der Offline-Datei
       festgehalten! Sollte man darauf nicht zurückgreifen können?

Tip: Was ist die Offline-Datei?  h off  eingeben.

Hintergrund:
Es wird tatsächlich jedesmal beim Speichern eines Satzes seine dabei
überschriebene Vorversion aus der Datenbank heraus in die Offline-
Datei kopiert. Mit Alt+w ("Wechseln") bekommt man diese Vorversion
wieder zu sehen - aber leider nur diese, nicht die vorvorige usw.,
obwohl diejenigen aus derselben Sitzung alle noch in der Offline-
Datei stehen.
 
Wenn man einen Datensatz bearbeitet, aber NICHT sofort speichert,
sondern sich erst mal einen anderen vornimmt, was passiert dann?
Dann wird der bearbeitete Satz nur schnell noch in die Offline-Datei
geschrieben und erscheint beim Aufblättern gelb. Erst wenn man ihn
später wirklich speichert, wird die Vorversion aus der Datenbank
herauskopiert in die Offline-Datei. Mit Alt+w kriegt man danach diese
alte Fassung wieder zu sehen, dann aber diese in gelb. Nach mehrfachem
Speichern sieht man stets nur die letzte Vorversion und die aktuelle,
nicht mehr die älteste oder irgendwelche Zwischenversionen.
Typischerweise steht, wie sich hieraus ergibt, die ältere Version
unterhalb ihrer Nachfolgerin in der realen Offline-Datei!


Es gibt zwei Tricks, mit denen man die Aufgabe lösen kann:
Der erste besteht darin, daß man die Offline-Datei in eine Externdatei
verwandelt (extern,dat) und diese dann laden läßt. Darin sieht man dann
alle Fassungen von Datensätzen, so wie sie eingelagert wurden (s.o.).
Die Offline-Datei hat den Dateityp .$$$, ist aber in Wahrheit in
ihrer Struktur nichts anderes als eine Grunddatei - man braucht sie
also nur umzubenennen oder zu kopieren! Sie liegt auf dem Temp-
Verzeichnis (bzw. dem mit DbAux=... in der INI angegebenen Pfad).


Lösung 1: (kurz, aber mit Vorsicht zu genießen)
---------
Hier ein ganz kleiner FLEX, mit dem man es bewerkstelligen kann:

var M B ".$$$ extern.dat"
fcopy
erase off
read extern
delete extern.dat


Danach erst Esc, um die erscheinende Liste zu schließen, dann mit
Alt+q wieder öffnen, um die Sätze dann als Ganzes zu sehen,

Aber Vorsicht! Irgendwelche noch nicht gespeicherten Datensätze im
Offline-Speicher sind dann nicht mehr mit ihrem Originalsatz verbunden
und per Alt+w umschaltbar! Speichert man sie nun, entstehen neue
Datensätze.
Man KANN den Befehl "erase off" weglassen, dann sind die noch nicht
gespeicherten Sätze noch korrekt vorhanden und darunter die Liste der
eingelesenen Datei extern.dat, in der sie nochmals als unabhängige
Sätze auftreten. Aufpassen, um dann nicht durcheinander zu kommen ...


Lösung 2: (jederzeit schnell mal eben zwischendurch möglich, denn es
---------  geht ganz enorm rasch)
Die genannten Probleme vermeidet ein anderer Trick: Die Offline-
Datei als solche unberührt lassen, aber als Datei lesen und in eine
Textdatei verwandeln, die man mit dem help-Befehl anzeigen läßt:
(am besten in eine Datei offlist.flx speichern und dann X offlist, ab
V28.2 ist offlist.flx im Gesamtpaket dabei.)


var M B ".$$$"
open
open x offlist
  erstes Byte überspringen, dann satzweise einlesen
fetch b
:loop
fetch b
if ="-1" jump ende
fetch rec
if cancel jump ende
  Satz rausschreiben
write
write 13 10 "................" 13 10
jump loop
  Das war's, Daten anzeigen
:ende
close x
h offlist


Aus der Anzeige dieser Textdatei kann man natürlich beliebig mit
Copy&Paste wieder Sachen entnehmen und in aktuelle Sätze einfügen.
Möglicher Nachteil: Bei sehr großer Zahl von Sätzen, z.B. nach
umfangreichen globalen Ersetzungen, ist die Datei  offlist  evtl.
zu lang. Man kann sie dann aber außerhalb des Programms mit jedem
Texteditor oder -betrachter lesen, darin suchen, vergleichen usw.


ZusatzHinweis
Die Offline-Datei ist nicht zentral für alle Bearbeiter, sondern
individuell nur für den einzelnen Bearbeiter, und zwar je nach
Einstellung nur die aktuelle Sitzung (SaveResults=2 in der INI-Datei)
oder übergreifend für zwei oder mehr Sitzungen (SaveResults=0 oder 1).

Wer also sehen will, was INSGESAMT in der Datenbank passiert ist,
muß die LOG-Datei auswerten, denn dort stehen chronologisch alle
gespeicherten Datensätze, und zwar stets komplett, auch wenn nur
winzige Änderungen gemacht wurden. Die Werkzeuge dafür sind vorhanden
und bekannt (s. Quick-Liste).