View-Listen in externen Flexen erzeugen

Anando Eger anando at aneg-dv.de
Do Apr 11 10:46:34 CEST 2002


Liebe Listenleserinnen und -leser,

flexgsteuert möchte ich dem Programmnutzer die Auswahl aus einer
Reihe von Datensätzen ermöglichen.

Die einfachste Möglichkeit, den Index zu nutzen, ist nicht
immer brauchbar, da man die Auswahl nicht begrenzen kann
und der Index-Eintrag auch nicht immer aussagekräftig genug 
gehalten werden kann.

Die select-Anweisung scheint für kleine Anzahlen zu funktionieren,
ab 100 ... 150 Einträgen "fliegt" aber a99 ab und produziert
unvorhersehbares Verhalten. 
(150x40 ergibt erst 6000, lt. Hrn. Eversberg darf die Steuervariable 
64k groß werden...?)

Die nächstschönere Variante wären dann die View-Listen - dachte ich.
Gedacht, probiert - folgendes Ergebnis erhalten:

Ziel war es, über eine find-Anweisung eine Ergebnismenge zu bilden,
daraus Datensätze zu eliminieren, und den Rest dem Benutzer zur
Auswahl anzubieten. Der getestete Weg: 

- Ergebnismenge in Schleife durchlaufen
- *.vw-Datei erstellen
- Auswahl über "View dateiname" anbieten

Ergebnis: Viewlistenanzeige- und Auswahlfunktionen verhalten sich
unter diesen Umständen fehlerhaft.

Für die Interessierten hier die Testumgebung und ein Test-Flex,
mit dem man das Verhalten in der demo2-DB nachvollziehen kann:

- a99 Versionen seit 04/01 
- Standard-Installation auf c: mit DEMO-Datenbank unter demo2
- test.flx in demo2-Verzeichnis (test.flx am Ende dieser Mail)
- Startverzeichnis ist das allegro-Stammverzeichnis


A: Ausgangspunkt: Dateien leser.vw* sind nicht vorhanden.
   Nach erstmaligem Programmstart und Anzeige eines beliebigen 
   Datensatzes wird mit "X test" die Flexdatei gestartet.
   
   Das Programm zeigt keine Vieliste an, obwohl eine Ergebnismenge 
   gebildet wurde.

   Im allegro-Verzeichnis gibt es ab dem Zeitpunkt eine leser.vw und 
   eine leser.vwn mit der Länge 0, was darauf hindeutet, dass die
   Viewliste vom Programm trotz vorherigem "close"-Befehl nicht 
   geschlossen wurde.
   
B: wie A:, aber flex wird einfach erneut gestartet.
   
   Jetzt wird eine Vieliste gezeigt, die sich aber fehlerhaft 
   verhält: Anzeige erfolgt nicht, Auswahl mit Enter oder OK führt 
   zu irregulären  Ergebnissen

C: wie A: , Programm wird aber geschlossen.
   
   Jetzt steht die Viewliste (hier_ leser.vw) im
   Dateisystem mit einer richtigen Länge.

D: wie C:, dann Ausführung von "x View leser.vw"

   Anzeige der Viewliste funktioniert normal.

E: wie B:, flex wird ein drittes Mal gestartet.

   Verhalten wie unter B:, Liste ist jetzt jedoch von doppelter
   Länge.

Fazit: offensichtlich werden die mit "open x dateiname" erstellten
Dateien vom Programm mit "close" nicht geschlossen, wass alle 
folgenden Fehhler erklären würde.

Kennt jemand einen "workaround"?
Oder habe ich irgendetwas nicht beachtet/übersehen? (vielleicht
irgendeine "Magie" ...?)

Der von mir verwendete Verfahren:
--------- test.flx Anfang ------------------------------------------
  Test-Flex für Viewlisten
  Ermittelt in demo2-Datenbank alle Datensätze
  über |:B? und bietet nur Lesersätze über
  Viewliste zur Auswahl an.

close res
var "|: B?"
find
if l1 jump kein_benutzer
if l2 jump ein_benutzer
order a 0
	
first

delete leser.vw
delete leser.vwn
 
open x leser.vw
if no jump ERR_OPEN

:b_loop
  nur Benutzer in Viewliste schreiben:
if #9B jump schreiben
jump loop_end

:schreiben
write #nr "|" #9B$n " - Nr:" #nr n

:loop_end
next
if no jump b_select
   solange noch Sätze in Erg.-menge:
jump b_loop

:b_select
close
View leser.vw
if "" jump Abbruch
  hier müsste die ausgewählte Zeile gezeigt werden:
mes
end

:kein_benutzer
mes Nichts gefunden!
end

:ein_Benutzer
mes Genau einen Benutzer gefunden.
end

:Abbruch
mes Abbruch
end
--------- test.flx Ende ------------------------------------------

Schon mal Dank für evtl. Hinweise und viele Grüße

Anando Eger




Mehr Informationen über die Mailingliste Allegro