[Allegro] if main bei geladenem Benutzersatz 'fliegt'

Anando Eger a.eger at aneg-dv.de
Mi Mär 14 13:17:47 CET 2007


Hallo Herr Eversberg,

zu meinen Annahmen zur Funktionsweise von "if main" schrieben
Sie:

> Nein. Es wird der Primärschlüssel gebildet (wie mit "var p"), dann
> +* drangehängt und nachgeschaut, ob es solche Schlüssel gibt.
> Die Sache ist also allgemeingültig, solange man das + für
> Verknüpfungen verwendet.

"var p" als Referenz kannte ich noch nicht - habe also noch einmal 
gelesen:

Die Beschreibung in xcstring.rtf gibt keinen Aufschluß, im Handbuch 
habe ich folgende Aussagen im Abschnitt zu UPDATE gefunden:

#1# "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." [1]

#2# "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 UPDATE, daß bei 
Sprungmarke #-@ der Primärschlüssel gebildet wird, und daß dies ohne 
die Hilfskategorie #u1 geschieht." [1]

In einer Antwort an Herrn Fischer schrieben Sie am 14.09.06:

> > 3. Theoretisch wird bei A99 mit
> > x var p\mes
> > der Primärschlüssel angezeigt.
> > Ist das der Eintrag, der bei #-@ entsteht?
#3#
> Wenn nichts anderes verfügt wird. Mit dem Befehl  set p x  kann man
> temporär Sprungmarke #-x  fuer die Primaerschlüsselbildung setzen. Das
> wirkt sich dann beim FLEX-Befehl  "update"  aus.

Der Flex-Befehl "update" verhält sich ansonsten aber noch wie UPDATE.EXE:
siehe  "set p" in xset.rtf:

"set pX    [perm]
Primärschlüssel für update wird an der Sprungmarke #-X bestimmt. 
Fehlt dieser Befehl, wird derjenige Schlüssel als Prim.Schlüssel benutzt, 
der sich als erster aus der Abarbeitung der Indexparameter ergibt (normaler-
weise aus dem ersten ak-Befehl) 
Aber Vorsicht: der ak-Befehl wird nicht abgearbeitet! Man kann daher nur 
solche Sprungmarken verwenden, wo nicht mit der Variablen  #u1 gearbeitet 
wird. "

Schlußfolgerungen:

Die in #1# und #2# verkündeten Freiheiten sollte man wohl nicht
nutzen :-(

Um ein übereinstimmendes Verhalten zu erreichen, sollte update 
mit vorgeschaltetem "set p@" benutzt werden - oder -

ak=zz+@ in den *.?pi immer an erster Stelle stehen _und_ alle 
Primärschlüssel bilden.

Die cstring-Variable p arbeitet also _implizit_ quasi mit "set p@" - 
dto. der "if main"-Test - richtig?

Gibt es evtl. noch weitere Funktionen, deren (interne) Arbeit von der 
Art der Primärschlüsselbildung abhängen? 

Viele Grüße
Anando Eger

[1] Allegro-C Systemhandbuch, Abschn. 9.3

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




Mehr Informationen über die Mailingliste Allegro