[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