[Allegro] Variablen-Lebensdauer / -gueltigketi beim Index-Lauf

Thomas Berger ThB at Gymel.com
Di Dez 6 12:02:06 CET 2011


Lieber Herr Eger,

> Ich versuche mal eine Zusammenfassung (als Kochrezept):
> 
> A) Primärschlüssel _müssen_ über die erste ak-Zeile
>    gebildet werden.

Sie "sollten". Abstrakt ist "Primaerschluessel" wohl nur im
Kontext relationaler Datenbanken definierbar (da gibt es
ja feste Spalten und man kann festlegen, dass ein "Primary
Key" ein Datum ist, das 1. stets vorhanden ist und 2. eindeutig
sein muss), fuer allegro ist es nur unscharf definierbar, etwa
als die Gesamtheit der ~eindeutigen~ Schluessel, die im ersten
Indexlauf produziert werden...

Allerdings nutzen Update etc. beim Identifizieren eines Satzes
*den* Primaerschluessel, das ist der von den obigen dadurch
ausgezeichnete, dass er als allererster gebildet wird (was
ich nie ausprobiert habe, ist ob es Aerger gibt, wenn dabei
der .STL oder .RES-Eintrag herauskommt...)


> B) Um weitestgehende Kompatibilität zu gewähleisten, muss die
>    Sprungmarke der ersten ak-Zeile ak=zz+@ -> #-@ sein.

Kompatibilitaet womit? Nur sehr alte Avanti-Versionen (1.3?)
hatten die Sprungmarke "@" fuer die Primaerschluesselbildung
fest verdrahtet.


> C) Es gibt 2(3?) Gruppen von ak-Zeilen, die sich hinsichtlich
>    des Zeitpunktes ihrer Abarbeitung unterscheiden (können):
>    C1: erste ak-Zeile
>    C2: alle weiteren ak-Zeilen
>    C3: (in Reihenfolge ihres Auftretens in der ?pi-Datei abgearbeitete
>        ak-Zeilen bis zur Produktion des ersten gültigen Schlüssels)

bis einschliesslich?



> D) Es gibt vordefinierte Sprungmarken, die abhängig von der 
>    gewählten Index-Funktion (oder Funktionen anderer Teilprogramme) 
>    direkt angesprungen und für Schlüsselbildungen verwendet werden:
>    D1: #-@  Primärschlüssel

Nein. Das ist wirklich nur Konvention (bzw. fuer die erwaehnte PRESTO-
Navigation fest verdrahtet: Hat man aber Daten mit etwa #00 und #09,
/muss/ man bei #-@ sogar etwas realisieren, das nicht dem (ersten)
Primaerschluessel entspricht.


>    D2: #-0  Kurztitel

Auch nur dann, wenn man auf die Funktionalitaet index -fs Wert legt.
(Der Cstring "s" und der Manipulationsbefehl |00 der Exportsprache
lesen m.W. den realen .STL-Eintrag aus)


>    D3: #-/  Restriktionen

vgl. #-0


>    D4: #-.  SR-Schlüssel

Definitiv nur Konvention.


>    D5: alle anderen ausser #-1 ... #-;


und:

#--    Loeschkontrolle (eine Optionale Sprungmarke, die wirklich nicht
aus ak-Zeilen angesprungen werden sollte)




> Für die Verwendung von Variablen ergibt sich:
> 
> Die Initialisierung _UND_ folgende Verwendung einer Variable sollte
> immer innerhalb von durch ak-Zeilengruppe (C) _UND_ Srungmarken-
> gruppe (D) definierten und zusammengefassten Indexabschnitts-
> gruppen erfolgen. 
> 
> Dabei sollte für die Initialisierung der erste, möglichst über 
> ak=zz angesprungene, Abschnitt einer Gruppe verwendet werden.
> 
> Oder für ein Beispiel formuliert:
> - Variablen, die für die Kurztitelerzeugung verwendet werden,
>   muss man auch im #-0 -Abschnitt löschen
> 
> Ist das soweit vollständig oder habe ich noch etwas vergessen?


Ich weiss nicht, ob dieser Organsiationsansatz hilft.

Es gibt verschiedene Szenarien, wo jeweils unterschiedliche
Untermengen von ak-Befehlen ausgefuehrt werden (und C1 kommt
dabei nie vor):

a99 und andere interaktive Module: alle

index ohne -@: alle
index - at 1: C3
index - at 2: C2
index -fs: #-0
index -ft: #-/

und bei jeglichem Update-Vorgang haben Sie einen komplexen
Wechsel aus Primaerschluesselberechnung (C3) und Komplett-
berechnung.

Insbesondere die Vorgaenge bei der Indexierung - at 1/- at 2 muss
man auf dem Schirm haben, wenn man irgendwo Code fuer die
"Initialisierung" einbaut. Und man kann sich das Leben
sehr erleichtern, indem die .api so gestaltet wird, dass C2
und C3 disjunkt sind und indem C2 und C3 mit einer ak=zz...
Konstruktion "verankert" werden...

viele Gruesse
Thomas Berger








Mehr Informationen über die Mailingliste Allegro