[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