allegro Systemhandbuch V32

9	Datenbank-Management
a99 kann `per FLEX` updaten! 
9.0	Konzept

Das Programm Nummer 9, UPD.EXE, kann Datensätze aus einer Grunddatei (Typ .ALG) lesen, mit vorhandenen Sätzen in der Datenbank identifizieren und evtl. austauschen, zusammenmischen, oder auch löschen, und zwar auf Mehrplatzsystemen auch während des laufenden Betriebs. Wie PRESTO zeichnet es seine Aktionen auch in der .LOG-Datei auf. (Für das Programm INDEX trifft beides nicht zu, dafür arbeitet es viel schneller.) 
Ab V28.6 kann statt UPD.EXE das 32bit-Programm `acon.exe` mit  update.job  eingesetzt werden. 
Ab V32.1 wird ein Aufruf  upd -fm...  umgewandelt in  acon -jupdate -fm... , sonst bleibt alles gleich.

UPD  hat die folgenden drei Funktionen: 
Playback : eine Sicherungsdatei (Typ .LOG) wird in eine Backup-Kopie der Datenbank eingespielt, um den Zustand vor einem Zusammenbruch wiederherzustellen (-Ø 0.7). Die Identifizierung erfolgt über die interne Satznummer, daher wird kein eindeutiger Schlüssel benötigt. Das Playback funktioniert nur dann richtig, wenn man zum Zeitpunkt der Datensicherung die .LOG-Datei löscht. Danach entsteht dann eine neue .LOG-Datei, die exakt die nach der Sicherung erfolgenden Veränderungen aufzeichnet. (.LOG-Datei löschen, keinesfalls mit sichern, denn ihr Inhalt ist ja schon komplett in der Datenbank enthalten!) 
	Auf Mehrplatzsystemen sollte man erst nach Abschluß des Playback den Betrieb wieder anfahren. 
Mischen (Merge) : eine Grunddatei (Typ .cLG) wird in eine Datenbank eingespeist, wobei auch Sätze gelöscht werden können. Das Einspeisen kann auf unterschiedliche Art geschehen. Identifiziert wird dabei über einen vom Benutzer definierten "Primärschlüssel", der eindeutig sein muß (mehr darüber später). 
	Die Funktion "Mischen" kann auch vom Konsolprogramm  acon  ausgeführt werden (-Ø 9.5). 
Check : eine Grunddatei, die z.B. durch Import entstanden ist, wird an einer Datenbank auf Dubletten geprüft. Wenn eine Übereinstimmung bei vorher festzulegenden Zugriffsschlüsseln erkannt wird, gibt das Programm den neuen Datensatz und den oder die vermutlich identischen, vorhandenen Sätze aus (Parameterdatei und Dateiname sind mit Option -e anzugeben). Der Anwender kann die Liste kontrollieren, die Grunddatei redigieren und sie dann mit Funktion "Mischen" einarbeiten lassen. 

Hinweis: Das Programm INDEX (-Ø Kap.7) kann mit seiner Funktion 7 ebenfalls neue Daten in eine Datenbank einbringen, jedoch kann es keine Sätze identifizieren und austauschen, sondern nur als neue Sätze hinzufügen. Außerdem darf man INDEX nicht im laufenden Mehrplatzbetrieb einsetzen, sonst gibt es Schäden an den Registern. 

9.1	Ablauf
Das Programm UPD.EXE wird vom CockPit-Menü "Funktionen" über Ziffer 9 aufgerufen oder von MS-DOS aus mit seinem Namen UPDATE. Unter UNIX muß man es per Shellscript mit allen nötigen Optionen starten. 
Die wichtigsten Optionen für den Start von UPDATE sind  (-Ø Kap.12): 

	-fp		Funktion "Playback" 
	-fmxy		Funktion "Mischen" (die zwei Ziffern xy bestimmen den Modus, siehe unten) 
	-fc		Funktion "Check"  (Vergleich mit Primärschlüssel), mit Kontrollausgabe 
				(dafür ist zusätzlich eine Option -e param/file nötig,  -Ø Kap.12) 
	-d dbp\dbn	Angabe der Datenbank, an der das  Programm arbeiten soll; 
			dbp = Name des Datenbank-Verzeichnisses, dbn = Datenbankname 
	-u ufile	Name der einzuspeisenden Datei 
			Wenn die Datei ufile vom Typ .LOG ist, wird "Playback" gefahren, auch bei -fm oder -fc. 
	-F		Beschleunigung auf Mehrplatzsystem, aber die anderen Plätze erhalten beim Speichern (F10) meistens die Meldung "bitte warten". 
			Setzt man eine Ziffer hinter F, wird diese als Sekundenzahl gedeutet und das Programm dadurch künstlich verlangsamt, und zwar um die angegebene Zahl von Sekunden je Satz. 

	-Iname	andere Indexparameter benutzen (name.cPI statt dbn.cPI) 
	-m1		manuelle Unterbrechung möglich (durch Druck auf 'x') 
	-n k		Neue Datensätze sollen in Datei k gespeichert werden 
	-N j		für neue Datensätze gilt: wenn j=0: Leersätze nicht zum Speichern benutzen, j=1: Alle Leersätze zum Speichern zugelassen (d.h. nicht nur die in der mit -nk angegebenen Datei) 
			Für j=2 (default) gilt: nur in die mit Option -n gewählte Datei wird gespeichert. 
	-eparam/outfile	Kontroll-Liste mit Parameterdatei param.ALG in Datei outfile ausgeben 
	-xproto	Die Protokollmeldungen sollen in die Datei proto; sonst gehen sie in upro. 
	-R		Aufzeichnung: alle Bildschirmmeldungen werden auch in die Protokolldatei geschrieben. 

Nicht mehr ab Win'7/64:
Wenn man auf dem CockPit-Menü "Funktionen" die 9 wählt, kann man alle UPD-Optionen in ein übersichtliches Formular eintragen. Das sieht etwa so aus: 

Funktionen     Routinen     Makros     Dateien     Optionen     HELP     EXIT 
 +--------------+ 
 ¦              ¦   +----------------------- Optionen -----------------------+ 
 ¦  HELP        ¦   ¦ k : Konfiguration:         A                           ¦ 
 ¦              ¦   ¦ f : Funktion:              m41                         ¦ 
 ¦ 1 : PRESTO   ¦   ¦ c : Laufwerke:             C                           ¦ 
 ¦ 2 : OFFLINE  ¦   ¦ d : Datenverzeichnis:      C:\ALLEGRO\KATALOG          ¦ 
 ¦ 4 : SRCH+EX  ¦   ¦ u : Update-File     :                                  ¦ 
 ¦ 5 : IMPORT   ¦   ¦ n : Dateinummer     :      1                           ¦ 
 ¦ 7 : INDEX    ¦   ¦ manuelle Unterbrechung     0                           ¦ 
 ¦ q : QRIX     ¦   ¦ e : Export Parameter:                                  ¦ 
 ¦ 8 : SORT     ¦   ¦     Export Datei    :                                  ¦ 
 ¦ 9 : UPDATE   ¦   ¦ e : Export Parameter:                                  ¦ 
 +--------------+   ¦     Export Datei    :                                  ¦ 
                    ¦                                                        ¦ 
                    ¦ GO (START)                                             ¦ 
                    ¦                                                        ¦ 
                    ¦                                                        ¦ 
                +-----------path\filename of update file------------+        ¦ 
                ¦a:\newdata.alg                                     ¦--------# 
                +---------------------------------------------------# 
 Auswahl der einzumischenden Datei (Grunddatei oder .LOG-Datei) 
 C:\ALLEGRO\KATALOG 
 Datenbank = CAT         Konfiguration = A   Progr.Verz. =    C:\ALLEGRO 
 Einzelplatzbetrieb                          Sprache = GER    Laufwerk = C   V26.6 

Hier soll folgendes passieren: die Datenbank auf C:\ALLEGRO\KATALOG ist zu aktualisieren, und zwar mit der Mischfunktion -fm41 (mehr dazu später). Die Aktualisierungsdaten stehen in der Datei NEWDATA.ALG auf dem Laufwerk A: (die Momentaufnahme zeigt den Punkt, wo gerade dieser Name eingegeben wurde). Wenn man das Eingabefeld "Update-File" anwählt, werden zuerst zur Auswahl die .ALG-Dateien angeboten, die auf dem Daten- bzw. Programmverzeichnis stehen. Gibt es keine solche oder wählt man davon keine aus sondern verläßt die Liste mit <Esc>, kommt man in das unten sichtbare Eingabefeld, wo man "freihändig" eine Datei vorgeben kann, die auf einem ganz anderen Pfad steht. Menüpunkt GO löst dann den Start aus. Dabei entsteht eine Batchdatei CCC.BAT, die hauptsächlich diese Zeile enthält: 

upd -fm41 -kA -n1 -dC:\ALLEGRO\KATALOG\CAT -PC:\ALLEGRO -a3 -ua:\newdata.alg -lger

Dies also ist ein spezielles Beispiel für einen Aufruf des Programms. 
Die allgemeine Form des Aufrufs von  UPD  für einen automatischen Ablauf sieht so aus: 

für Playback:	upd -fp -d sub\dbn -u dbn.log [-kc] [-S]
für Mischen:	upd -fmxy -d sub\dbn -u filename -n1 [-kc] [-S] [-F] [-e...] [-Nj] 
für Check:	upd -fc -d sub\dbn -u filename -e param/outfile [-kc]
wobei filename der vollständige Name (mit Laufwerk und Pfad) einer .cLG-Datei ist und die Datenbank dbn auf dem Unterverzeichnis \ALLEGRO\sub liegt. Die Optionen in [...] sind nicht immer notwendig. 

Wenn man die Option -u  wegließ, fragte das DOS-Programm selbst nach dem Namen der einzumischenden Datei. Es genügt bei der DOS-Version sogar, beim Aufruf nur die Optionen -k  und -f anzugeben, alles andere wird dann abgefragt. Somit kann man auch UPD-Aufrufe immer so konfigurieren, wie man es braucht. 
Für den "Check" muß die Export-Option  -eparam/outfile  gesetzt werden; dabei entsteht mit Hilfe von param.cPR (z.B. mit e-1.apr) eine Ausgabedatei outfile, in der am Ende die identifizierten Datensätze, die vorhandenen und dazu die neuen, im Format param stehen sollen. 
Für DOS gilt: fehlt -dsub, wird der Pfadname genommen, der in der Umgebungsvariablen -D (Datenbankpfad) eingetragen ist, wenn diese nicht existiert, wird das aktuelle Verzeichnis genommen. 
Auch bei Funktion "Mischen" kann man mit einer Option -e verlangen, daß ein Export erstellt wird. 
Die Option -kc muß nur gesetzt werden, wie immer, wenn man nicht A.CFG verwendet. DOS: Alternativ kann man auch die Umgebungsvariable -K vorher setzen (mit  set -k=c ). 

Zu erklären bleiben die Variablen x und y der Option -fm:
x wirkt sich in solchen Fällen aus, wenn zu dem neuen Datensatz ein alter mit gleichem Primärschlüssel gefunden wird: 

x  =  0  :	Es findet keine Ersetzung statt; jeder Satz wird ohne Vergleich des Primärschlüssels wie ein neuer Satz eingemischt 
    1  :	der alte Satz wird durch den neuen vollständig ersetzt, mitsamt aller Untersätze 
    2  :	der alte Satz bleibt unverändert, d.h. der neue wird ignoriert, 
    3  :	der alte Satz wird kategorieweise in den neuen eingemischt (d.h. vorhandene Kategorien des alten Datensatzes bleiben erhalten, vom neuen werden nur die zusätzlichen Kategorien übernommen!). Die Untersätze des alten Satzes bleiben komplett erhalten, wenn der neue welche hat, fallen sie weg. 
    4  :	der neue Satz wird kategorieweise in den alten eingemischt (d.h. eine im neuen Satz vorhandene Kategorie ersetzt eine entsprechende, im alten Datensatz vorhandene; vorhandene Kategorien bleiben nur erhalten, wenn sie im neuen Satz nicht vorkommen.) Untersätze des alten Satzes verschwinden vollständig und werden durch die des neuen ersetzt! E gibt hierbei besondere Möglichkeiten, Felder zu löschen bzw. neue Mehrfachfelder einzufügen. Siehe dazu `Abschnitt 9.6`. 

y gilt für den anderen Fall, wo kein Datensatz mit gleichem Primärschlüssel existiert: 
    y = 0  :	neuen Datensatz ignorieren
        1  :	neuen Datensatz einmischen (in die durch Option -n angegebene Datei). 

Ein häufiger Fall ist  -fm41  : nur die in den neuen Fremddaten nicht belegten Kategorien bleiben in den alten Datensätzen erhalten (z.B. können dies Signaturen sein oder lokale Sacherschließungsdaten), die anderen werden alle ersetzt, und neue Aufnahmen werden in die Datenbank eingefügt. Man wird diesen Fall z.B. anwenden, wenn man per ISBN Fremddaten aus einer CD- oder online-Quelle abzieht und diese dann zwecks Qualitätsverbesserung in die eigene Datenbank einmischt. Die Fremddaten müssen in jedem Fall zunächst per Import konvertiert werden. Dabei kann man problematische Kategorien entweder ausfiltern, also nicht übernehmen, oder auf solche Nummern legen, die man in den eigenen Daten nicht besetzt hat. So vermeidet man ungewollte Kategorieersetzungen. 
Anmerkung: Die Kombination  -fm20  wäre sinnlos, denn das Programm würde gar nichts tun. 

Teilfelder aktualisieren: Wenn in der Update-Datei eine Kategorie steht mit ²² am Anfang und dann einem oder mehreren Teilfeldern, werden die Teilfelder ausgetauscht. Beispiel: in der Update-Datei steht 
#260   ²²bRowohlt²c1980 
	im Titelsatz (der aktualisiert werden soll) steht 
#260`  ²aBerlin²bFischer²c1977. 
    	Dann kommt heraus: 
#260   ²aBerlin²bRowohlt²c1980
Sonderfall:  Steht in der Update-Datei #260 ²²b  (ohne Text hinter ²b), wird Teilfeld ²b gelöscht. 

Obacht: Hierarchische Sätze werden bei -fm3 bzw. -fm4 so gemischt, daß die alten Untersätze komplett erhalten bleiben bzw. komplett ersetzt werden. Das Einmischen funktioniert also nicht auf den unteren Ebenen. Hier wird man in Zukunft besser mit verknüpften statt hierarchischen Aufnahmen arbeiten (-Ø Kap.10.2.6.7). Das Programm  acon (-Ø 9.5) kann allerdings auch Untersätze von hierarchischen Sätzen gezielt einzeln austauschen. 

9.2	LOG-Datei auswerten/umwandeln

Für a99 gibt es einen FLEX namens `LOG.FLX`, mit dem man die LOG-Datei anzeigen lassen kann. 
Gelegentlich entsteht der Wunsch, die .LOG-Datei einer Datenbank untersuchen zu können. Ohne andere Mittel kann man folgendes tun: die Datei von dbn.LOG auf dbn.ALD umbenennen, dann läßt sie sich mit dem Programm SRCH durchsuchen und exportieren. Ihre Struktur ist formal identisch mit der Struktur einer Datenbankdatei, deshalb kann SRCH sie lesen. Dieser Trick war mit Version 13 aber unnötig geworden, denn es kam das Hilfsprogramm namens LOG2ALG.EXE (lies "LOG to ALG"). Es wandelt die Datei dbn.LOG um in eine Grunddatei dbn.ALG. Dabei werden die internen Satznummern, die jeweils am Beginn einer Aufnahme stehen, weggelassen. Jeder (Haupt-) Datensatz beginnt mit dem Code 1, gelöschte Sätze beginnen mit der Sonderkategorie #u1 @@@@@. Neu erfaßte Sätze beginnen mit #u1 #####N, wobei N die Nummer der Datei ist, in welcher der Satz gespeichert wurde. Die Datei dbn.ALG kann man ebenfalls mit UPD einmischen, dann aber mit Funktion -fm11  statt -fp, und NUR dann, wenn es einen eindeutigen Primärschlüssel gibt. 
Was hat man davon? Wenn man z.B. regelmäßig zwei getrennte, unabhängig voneinander betriebene Datenbanken aktualisieren will, kann man mit UPD und vorgeschaltetem LOG2ALG die .LOG-Dateien zwischen beiden Datenbanken austauschen, um die jeweils andere zu aktualisieren. Dieser Wunsch entsteht immer dann, wenn man auf zwei oder drei nicht vernetzten Einzelrechnern Katalogisierung betreibt und die Daten untereinander austauschen will, so daß jeder über denselben Datenbestand verfügt. 
Bitte beachten: In der Konfiguration der Zieldatenbank sollte man die Befehle cn und ce (für Erfassungs- bzw. Änderungsdatum) abschalten, damit diese Angaben in den einzumischenden Daten erhalten bleiben. 

Beispiel: die Datenbanken heißen beide CAT (mit A.CFG) und liegen jeweils auf C:\ALLEGRO\KATALOG. 
Schritt 1: 	Mit  log2alg cat  erhält man die Datei CAT.ALG; man kopiert sie auf die Diskette im Laufwerk A: und bringt diese zu dem anderen Rechner. 
Schritt 2:		Man gibt auf dem anderen Rechner den Befehl 
		upd -fm11 -S -u a:cat.alg -dkatalog -n1   
		(die Nummer hinter -n ist beliebig zwischen 1 und 255). 
Sätze mit gleichem Primärschlüssel werden dann ausgetauscht, gelöschte werden in der Zieldatenbank ebenfalls gelöscht, und neu erfaßte werden in dieselbe Datei geschrieben wie in der Quelldatenbank. Dieser Vorgang kann wöchentlich oder sogar täglich durchgeführt werden. Es ist zu raten, die .LOG-Datei dann jeweils zu löschen, damit nicht dieselben Daten immer wieder zurück übertragen werden. (Schlimm wäre das nicht, sie würden einfach nochmals ersetzt.) 
Ausnahme: wenn man neue Daten mit INDEX einmischt, werden diese nicht in der .LOG aufgezeichnet! Man muß daher den INDEX-Vorgang an beiden Datenbanken durchführen, um die Datenbanken beide zu aktualisieren. 

9.3	Sätze löschen mit UPD

Der Code 9 zum Löschen funktioniert auch dann, wenn die .ALG-Datei nicht aus einer .LOG-Datei hervorgegangen ist. Dadurch kann man das Programm UPD auch benutzen, um Löschungen automatisch durchzuführen. Die zu löschenden Sätze müssen nur mit einem ASCII-Code 9 statt 1 beginnen und brauchen nur diejenigen Kategorien zu enthalten, die zur Bildung des Primärschlüssels notwendig sind. Einfacher: der zu löschende Satz beginnt mit  #u1 @@@@@. Wenn  UPD  einen solchen Satz aus der .ALG-Datei einliest, bildet es den Primärschlüssel, sucht in der Datenbank den zugehörigen Satz und löscht diesen. Wird er nicht gefunden, passiert nichts. 

Bemerkungen über Primärschlüssel
Der Primärschlüssel ist der erste Schlüssel, der bei der Abarbeitung der ak-Befehle (-Ø 10.2.1) in der Index-Parameterdatei dbn.API entsteht. Der Primärschlüssel muß, um für  UPD  tauglich zu sein, 
  •	eindeutig sein: wenn mehrere Sätze mit demselben Primärschlüssel vorhanden sind, wird der mit der kleinsten Satznummer genommen, was zu ganz falschen Ersetzungen führen kann! 
  •	bei hierarchischen mehrbändigen Werken aus der Hauptaufnahme hervorgehen; es darf sich also nicht z.B. um eine Zugangsnummer handeln, die evtl. nur in einer Unteraufnahme vorkommt. 
Jedoch hat der Primärschlüssel ansonsten keine Sonderstellung für das Datenbanksystem. Das bedeutet: man kann für einen speziellen Update-Vorgang ad hoc einen anderen Schlüssel zum Primärschlüssel deklarieren. Dazu braucht man nur die ak-Zeilen umzuordnen, also den bewußten Schlüssel an die erste Stelle zu rücken; keineswegs muß man neu indexieren! Dasselbe gilt für die Check-Funktion: hintereinander kann man mehrere Check-Durchläufe mit unterschiedlichen Primärschlüsseln durchführen. 

Hinweise zur Programmierung des Primärschlüssels:
Nehmen wir als Beispiel an, wir hätten keine bestimmte Kategorie wie z.B. #00 mit eindeutiger Identnummer, sondern der Primärschlüssel soll aus Kategorie #89D (DB-Nummer) gebildet werden, und wenn diese nicht vorhanden ist, aus der immer vorhandenen Signatur #90. Die beste Lösung ist diese: 
ak=zz+@		Dieser Sonderbefehl wird in jedem Fall ausgeführt, nur gibt es dann keine #u1 
... 
#-@			hier beginnt die Ausführung
#89D +# e";" p"|9DB"	die DB-Nummer soll im Reg. 9 stehen mit Präfix DB
#90 p"|8"				Wenn #89D nicht besetzt ist, kommt die Signatur dagegen im Reg. 8
#+#
Zwar ist es nicht zwingend, eine bestimmte Sprungmarke für den Primärschlüssel zu reservieren, es fördert jedoch die Übersichtlichkeit. Und: die Programme aLF und ORDER erwarten, anders als  UPD, daß bei Sprungmarke #-@ der Primärschlüssel gebildet wird, und daß dies ohne die Hilfskategorie #u1 geschieht. Daher wird mit dem Befehl ak=zz+@ gearbeitet (und nicht mit zwei Befehlen für #89D und #90). 
Vorsicht: Im Abschnitt #-@ keine Setzung von Anwendervariablen (#u-Variablen) vornehmen! Diese sind sonst beim zweiten Durchlauf nicht verfügbar, und man erhält fehlerhafte Register. Besser: Abschnitt #-0 dafür benutzen. 

9.4	Datenbank ganz neu aufbauen mit UPD

Statt mit INDEX kann man eine Datenbank auch mit  UPD  ganz neu aus einer Grunddatei aufbauen. Der Startbefehl sieht dann z.B. so aus, gegeben auf dem Programmverzeichnis C:\ALLEGRO: 
upd -fm41 -kp -dPICA -iPICA -uc:\allegro\pica\pica.plg -n1 -m0 -S -L
Die Ausgangsdatei PICA.PLG auf dem Verzeichnis C:\ALLEGRO\PICA wird dann mit den Indexparametern PICA.PPI unter Konfiguration P.CFG zu einer neuen Datenbank aufgebaut. (Wenn jedoch auf C:\ALLEGRO\PICA schon eine Datenbank namens PICA existiert, werden die neuen Daten eingemischt.) 
Theoretisch kann man also auf INDEX verzichten und immer  UPD  benutzen, um eine Datenbank aufzubauen. Praktisch ist es aber für größere Datenmengen zu langsam: INDEX kann gut die 10fache Geschwindigkeit erreichen. 

9.5	Datenbanken aktualisieren mit acon oder a99

Ab Version 16 gibt es die Alternative, Datenbanken nicht mehr mit  upd -fm...  zu aktualisieren, sondern mit dem Konsolprogramm `acon` oder mit a99. 
acon  führt Aufträge aus, die ihm beim Aufruf mit der Option -jjobname  übergeben werden. acon wird in einer zusätzlichen Dokumentation genau beschrieben, daher soll hier nur auf die Möglichkeit hingewiesen werden. Der Auftrag muß diese drei Zeilen enthalten, wenn eine Datei  f:\user\xy\neudat.alg eingemischt werden soll: 
	@3 
	set u41 
	upd f:\user\xy\newdata.alg
Die mit  set u41  angegebenen Ziffern entsprechen genau den in 9.1 angegebenen Werten für die Option -fm. 
a99  kann nebenbei Funktionen eines Datenbankservers ausüben. Die Aufträge, die man ihm als solchem gibt, heißen FLEXe und sind zu schreiben in der FLEX-Sprache, die mit der avanti-Sprache kompatibel ist, aber noch andere Elemente enthält. Daher kann man den gleichen Auftrag, der oben angegeben wurde, auch in einen FLEX für a99 verpacken (der Befehl @3 ist dabei unnötig). Entweder startet man diesen interaktiv (mit der Hand), oder man übergibt ihn von außen als sog. ExFLEX. Dazu schreibt man die beiden Zeilen in eine Datei  misch.flx  und ruft dann das Hilfsprogramm FLEX.EXE auf: 
flex misch 
Es gibt bei a99 noch eine weitere Möglichkeit: Update zur Probe. Man setzt dann hinter den Befehl set u.. noch die Ziffer 0, also z.B. set u410. Dieser Vorgang läuft dann sehr schnell ab. Im Offline-Speicher von a99 kann man sich die veränderten Sätze dann ansehen - in der Datenbank ist noch nichts passiert. Man verläßt entweder a99 dann ohne weitere Aktion, oder man veranlaßt das Programm über sein Menü "Datei", die Daten dann echt einzumischen. Das dauert genauso lange wie bei UPDATE. 

9.6  Besondere Möglichkeiten beim Updating

Zum Aktualisieren einer Datenbank kann man mehr tun als nur Sätze vollständig ersetzen. Dies macht man mit dem Modus -fm11 oder -fm10 (-Ø 9.1). Der Modus -fm31 ermöglicht es, nur diejenigen Kategorien zu ergänzen, die im Datensatz noch nicht vorkommen, die vorhandenen aber unberührt zu lassen. Das ist ein eher seltener Fall. 
Wenn man den Modus 41 anwendet, kann man sowohl mit dem Programm UPDATE wie mit dem avanti-Server einige zusätzliche Möglichkeiten nutzen. Zu Teil wurden sie schon im Zusammenhang weiter oben erwähnt, aber wir stellen sie hier nochmals als Übersicht zusammen: 
Für die Beispiele setzen wir voraus, daß der Primärschlüssel aus der Kategorie #00  gebildet wird. 

Datensatz löschen
Beispiel: Es soll der Satz mit #00 1234567 gelöscht werden. Dann braucht in der Update-Datei nur zu stehen: 
#u1 @@@@@ 
#00 1234567
Es muß nur die Kategorie da sein (hier #00) aus der der Primärschlüssel gebildet wird. Wenn noch andere Kategorien angegeben sind, hat das keine Auswirkung. In der .LOG-Datei wird aber in jedem Fall der vollständige Satz als Kopie aus der Datenbank protokolliert. 

Datensatz als neuen Satz einspeisen, ohne Rücksicht auf Primärschlüssel
Beispiel: Ein neuer Satz hat noch keine #00, er soll auf jeden Fall als neuer Satz eingemischt werden, und zwar in die Datei 72. Dann muß der Satz mit einer speziellen #u1 beginnen: 
#u1 #####72 
#...                  [Datensatz] 
NEU ab V29:  Mit #u1 ####?N  (nur 4mal #) erreicht man, daß der Primärschlüssel verglichen und nur dann der Satz als Neusatz in die Datei N kommt, wenn es noch keinen Satz gleichen Primärschlüssels gibt, ansonsten wird er normal eingemischt. Das Feld  #u1 verschwindet in jedem Fall. 

Kategorie löschen
Beispiel: Aus dem Satz mit #00 1234567 soll die Kategorie #32 entfernt werden. Dann muß der Update-Satz folgendes enthalten: 
#00 1234567 
#32 _              (Ein Unterstrich auf der ersten Textposition, sonst nichts) 
#...
Es können noch beliebige andere Kategorien kommen, die ergänzt oder ausgetauscht werden sollen. 

Teilfelder aktualisieren (ersetzen oder löschen)  dies wurde schon am Ende von 9.1 behandelt, siehe oben. 

Anhängen von Wiederholungskategorien 
Wenn z.B. #31 die Schlagwortkategorie ist und #312 das zweite, #313 das dritte Schlagwort usw., kann das Problem entstehen: es sollen neue Schlagwörter hinzugefügt werden, vorhandene also bestehen bleiben. Dann muß man die neuen Schlagwörter so anliefern: 
#31 ~ErstesSchlagwort 
#31 ~ZweitesSchlagwort
Die Tilde auf der ersten Textxposition des Feldes (! nicht auf der Position des Wiederholungszeichens!) bewirkt, daß diese Kategorien auf die nächsten freien Plätze hinter die schon vorhandenen Kategorien kommen, entsprechend der Felddefinition in der CFG. Hat die erste solche Kategorie einen Buchstaben oder eine Ziffer an der Stelle, werden die nachfolgenden entsprechend hochgezählt.
ACHTUNG: Bei a99 und dem Konsolprogramm acon ist das leider anders: da muß die Tilde auf die Wiederholungsposition.

Parametrierte Vorbehandlung 
Ein potentiell sehr mächtiges Konzept für den fortgeschrittenen Allegrologen.  Man startet UPDATE mit der Option 
-emanip/nul und macht sich vorher eine Parameterdatei  MANIP.APR, in der steht, was im Einzelnen passieren kann. Wie bei den Globalen Manipulationen (à 1.5.4) muß es in MANIP.APR eine Sprungmarke #-# geben, unter der dann steht, was gemacht werden soll. Für jeden Satz wird dieser Abschnitt ausgeführt, und zwar unmittelbar vor dem Speichern (egal ob es ein neuer Satz ist oder ein ersetzter), d.h. nach der Nummernvergabe und Zeitstempelung. 

Untersätze von hierarchischen Sätzen austauschen
Nur der avanti-Server kann die Untersätze gezielt einzeln ersetzen, das Programm UPDATE löscht einfach die alten Untersätze und hängt die neuen an. Voraussetzung jedoch ist, damit der Server das korrekt durchführt, daß die Bandnummern in den Kategorien #01 übereinstimmen. Wenn im neuen Satz ein Untersatz mit #01 47 vorkommt, wird ein Untersatz gesucht und ersetzt, der gleichfalls mit  #01 47  beginnt. Ist das nicht der Fall, wird der neue Untersatz hinten angehängt, nicht dazwischen eingeordnet. 

?per FLEX=h xupdate 
?LOG.FLX=X log 
?Abschnitt 9.6=h =9.6  Besondere 
?acon.exe=h acon 
?acon=h acon