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

Anando Eger a.eger at aneg-dv.de
Di Dez 6 14:58:43 CET 2011


Hallo Herr Berger,

als "Primärschlüssel" im Kontext einer Allegro-Datenbank
verstehe ich den Schlüssel mit folgenden Eigenschaften:

- ist eindeutig in der Datenbank
- wird von 'update' verwendet, um das Vorhandensein eines 
  Datensatzes in der Datenbank zu ermitteln
- wird im a99 / acon durch 'var p' ausgelesen

Unter Kompatibilität im allegro-Kontext verstehe ich
die Paßfähigkeit bzw. gleichartige Behandlung in allen 
aktuell verwendbaren Allegro-Komponenten.

Sie schrieben weiterhin u.a.:

> >    C3: (in Reihenfolge ihres Auftretens in der ?pi-Datei abgearbeitete
> >        ak-Zeilen bis zur Produktion des ersten gültigen Schlüssels)
> 
> bis einschliesslich?
o.k. bis zur abgeschlossenen Produktion ;-)

> >    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.

Das kollidiert dann aber mit dem Verhalten von cstring p.

> >    D2: #-0  Kurztitel
> 
> Auch nur dann, wenn man auf die Funktionalitaet index -fs Wert legt.

Warum sollte man das nicht? Es wird standardmäßig im org-Menü 
angeboten, also muss es auch funktionieren.

> >    D4: #-.  SR-Schlüssel
> 
> Definitiv nur Konvention.

wird aber als reservierte Sprungmarke im Handbuch 10.2.6.3. 
aufgeführt. Woher soll ich (der Normalparametrierer?) wissen,
ob nicht noch irgendwo Magie versteckt ist? Wenn es schon
im Handbuch steht?

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

Im gewissen Sinne entspricht C1 C3 wenn man dafür sorgt, dass
durch die erste ak-Zeile _immer_ ein Primärschlüssel produziert
wird. Insofern ist C1 ein Sonderfall von C3.

Es wird klarer:

Wenn man dafür sorgt, dass folgende Indexparameter-Abschnitte
"für sich" bleiben (also voneinander unabhängig sind):

- durch 1. ak-Zeile adressierte Abschnitte
- #-0
- #-/
- alle anderen, durch ak-Zeilen erreichbare Abschnitte

sollte man auf der sicheren Seite bezüglich der Variablenverwendung 
sein ...

In Ihrer vorletzten Mail schrieben Sie noch:

> Die Sprungmarke #-@ ist schon laengst nicht mehr (fuer den Index)
> verdrahtet, PRESTO hat aber gewisse Navigationsfunktionen daran
> aufgehaengt. 

aber: siehe cstring p.

Diejenigen, die noch Presto benutzen, benötigen die 32bit-index.exe 
nicht - brauchen also ihre ?pi-Datei nicht anzufassen.

Viele Grüße
Anando Eger

---------------------------------------------------------------------
Anando Eger Datenverarbeitung
Herr Dipl.-Ing. Anando Eger
Gustav-Voigt-Str. 24
01156 Dresden
Tel.: +49 (0)351 454 1236  http://www.aneg-dv.de
Fax: +49 (0)351 454 1238  mailto:a.eger at aneg-dv.de
---------------------------------------------------------------------





On 6 Dec 2011 at 12:02, Thomas Berger wrote:

> 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