[Allegro] Ergebnismengenbildung auf Flexwegen
Heinrich Allers
allers at t-online.de
Mo Mär 5 21:54:49 CET 2007
Liebe Kolleginnen und Kollegen:
ich bin auf der Suche nach einer eleganten und gut handhabbaren
Technik zur flexgestützten Bildung von Ergebnismengen.
Situation: Ich habe eine Reihe von Datensatz-Zugriffsschlüsseln
vorliegen und will mit diesen eine Flexdatei so konstruieren, daß ich
am Ende, nach der Ausführung der Flexdatei, all die zu den
Zugriffsschlüsseln gehörenden Datensätze in einer Ergebnismenge
versammelt habe.
Ich habe meine reale Ausgangssituation auf eine fiktive in der Demo-
Datenbank der Standard-Installation reduziert: Ich setze mir in den
Kopf, die in Register 9 mit den Schlüsseln z0051, z0061, z0071,
z0081, z0091, z0101 repräsentierten Sätze in eine Ergebnismenge zu
schaufeln.
Weg 1:
Die in einer Flexdatei zusammengefaßte Abfolge der Flexbefehle
var "|9 z0051"
var +" or |9 z0061"
var +" or |9 z0071"
var +" or |9 z0081"
var +" or |9 z0091"
var +" or |9 z0101"
find
ergibt korrekt eine 6 Elemente große Ergebnismenge.
Kehrseite: Läßt man die Zahl der Zugriffsschlüssel größer werden (in
meiner realen Ausgangssituation bei gut 40 Schlüsseln), endet der
Prozeß in einer Fehlersituation.
Weg 2:
Ich versuche, die Fehlerfalle des Weges 1 zu umgehen und schreibe
var "|9 z0051"\find\set Rergmg
var "|9 z0061"\find\find /:ergmg\set Rergmg
var "|9 z0071"\find\find /:ergmg\set Rergmg
var "|9 z0081"\find\find /:ergmg\set Rergmg
var "|9 z0091"\find\find /:ergmg\set Rergmg
var "|9 z0101"\find\find /:ergmg\set Rergmg
in die Flexdatei, also folgenden Gedanken formalisiernd: Finde den
Datensatz zum Schlüssel soundso, nehme in hinzu zu der zum jeweiligen
Zeitpunkt bereits bestehenden Ergebnismenge mit Namen ergmg, und gebe
der so entstandenen um 1 Element größeren Ergebnismenge den Namen
ergmg. Und so weiter und so fort.
Funktioniert noch weniger als Weg 1: es kommt stets nur eine
Ergebnismenge von einem einzigen Element heraus.
Weg 3:
Ich gestalte, dem gleichen Gedanken wie in Weg 2 folgend, den
Suchformalismus in etwas mehr "aufgeblätterter" Weise:
var "|9 z0051"\find\set Rergmg00
var "|9 z0061"\find\find /:ergmg00\set Rergmg01
var "|9 z0071"\find\find /:ergmg01\set Rergmg02
var "|9 z0081"\find\find /:ergmg02\set Rergmg03
var "|9 z0091"\find\find /:ergmg03\set Rergmg04
var "|9 z0101"\find\find /:ergmg04\set Rergmg05
Und so funktioniert 's! Auch dann, wenn es z.B. ca. 80
Zugriffschlüssel sind, deren Sätze man eine Ergebnismenge bilden
lassen will. Aber sehr elegant erscheint mir dieser Weg nicht, da man
eine doch ziemlich aufwendige Vorschrift für die Konstruktion der
Flexdatei anwenden muß.
###
Daß Weg 1 irgendwann an eine Mengengrenze gerät, das verstehe ich.
Bei Weg 2 ist mir allerdings nicht so ohne weiteres klar, warum man
dort so schnell an eine Grenze gerät, die noch nicht einmal durch die
Zahl der Zugriffsschlüssel gesetzt zu sein scheint.
###
Meine Frage nach dem besten Weg zur Realisierung des von mir
beschriebenen Vorhabens bleibt damit also noch offen.
Mit besten Grüßen:
Heinrich Allers
allers at t-online.de * http://www.h-allers.de
* Ich bin ein Integrationsverweigerer! *
Mehr Informationen über die Mailingliste Allegro