[Allegro] if main bei geladenem Benutzersatz 'fliegt'

Anando Eger a.eger at aneg-dv.de
Mi Mär 14 09:46:00 CET 2007


Hallo Herr Eversberg,

On 14 Mar 2007 at 7:49, Bernhard Eversberg wrote:

> Anando Eger schrieb:
> > 
> > wenn ich in der demo2-Datenbank einen Benutzer (z.B. Monika Lewinski)
> > in die Anzeige hole und dann im Schreibfeld
> > 
> >   x if main mes Hauptsatz
> > 
> > eingebe, verabschiedet sich a99 reproduzierbar mit einem Anwendungsfehler.
> > ...
> Das kommt davon, wenn ein Satz keine richtige #00 hat sondern dort nur -
> steht. Damit hat er keinen ordentlichen Primärschlüssel, der aber
> wichtig ist, um die Bedingung "main" zu verifizieren. Eine unerwünschte
> Nebenwirkung eines Tricks also.
> Abhilfe: in den Indexparametern dafür sorgen, daß der Satz einen
> ordentlichen Primärschlüssel bekommt, was in diesem Fall nur die
> Lesernummer in #9B sein kann. Dazu genügt eine winzige Ergänzung in
> 
> cat.api, Zeile 514:
> 
> !00 e"[=-]" b0 F32 p"|9"      SWD: e"-" wg. Pruefziff
> 
> Das b0 sorgt dafür daß die Zeile abgebrochen wird, wenn zu dem Zeitpunkt
> der Arbeitstext leer ist. Und dann entsteht die Lesernummer als
> Primärschlüssel...

mmm, das trifft für die Demo-DB zu; in den eigenen Konfigurationen (DOS-ALF-
konform ;-) ist die Benutzernummer automatisch der Primärschlüssel und die #00
wird nicht verwendet... (ak-Zeile mit #9B steht vor einer mit #00)
 
> Wir werden uns aber drum kümmern, denn die Situation kann ja auch bei
> defizitären Sätzen auftreten, die man unbeabsichtigt erzeugt hat, etwa
> als Ergebnis eines Imports. Dann wird "if main" in jedem Fall ein
> negatives Resultat haben, wie es sein sollte.

Ich bin eigentlich nur durch Zufall auf "if main" gestoßen, weil ich mir
ein allgemeines Datensatz-Status-Flex bauen wollte. "if main" müßte ja
typisch parameterierungsabhängig sein.

Wenn ich vorher testen müßte, ob ich die Funktion anwenden darf, verliert 
sie ihren Vorteil gegenüber Konstruktionen wie z.B.

   var "|: " #00(e"[=- ]") "+?"\f1nd
   if not no ...

oder wenn man nicht nachladen und Zeit sparen will:

   var #00(e"[=- ]") "+"\ins #uXX
   var "-1 |: " #uXX\qrix\var (f" " b" " )\ins #uXY\var #uXX
   if =#uXY ...

Ich nehme an, daß "if main" wahr ist, wenn 
- die #00 des aktuell geladenen Satzes kein "+" enthält
- der Inhalt der #00 des aktuell geladenen Satzes im Register 10 zu finden 
  ist (mit oder ohne Umcodierung? Werden hier evtl. intern die Indexparameter
  zu Rate gezogen?)
- im Register 10 mindestens ein weiterer Eintrag der Form 
  (inhalt der #00)+(irgendwas) vorhanden ist

Ist das richtig?

Gibt es evtl. weitere Bedingungen, die erfüllt sein müssen, damit "main" 
erkannt wird?

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






Mehr Informationen über die Mailingliste Allegro