<<

Inhaltsverzeichnis

Suchen

>>

SELECT

Funktion

Syntax:

SELECT([WAIT | NOWAIT,<EXITMACRO>,<SPLIT-HANDLE>]
                 <INDEXDATEI-NAME>,
                 <SCHLÜSSELNUMMER>,
                 <GLEICH>,
                 <UEBERSCHRIFT>,
                 [<SPALTEN-UEBERSCHRIFT>,
                 <FARBE-SPALTEN-UEBERSCHRIFT>,
                 [<FARBEN-FELDUEBERSCHRIFTEN>,]]
                 <FARBE-NORMAL>,
                 <FARBE-INVERS>,
                 [,@<BILD-TRENNZEICHEN>,<ANZEIGE-ART>]
                 [<# <MARKIER-FELD>,<MARKIER-FARBE>,]
                 [<INDEXDATEI-NAME>.]<FELDNAME>,[<LAENGE>]
                 [,[<INDEXDATEI-NAME>.]<FELDNAME>,
                 [<LAENGE>]]...)

<EXITMACRO>                                             = <MACRONAME>
<SPLIT-HANDLE>                                        = <NUM-AUSDRUCK>
<SCHLÜSSEL-NUMMER>                          = <ZAHL>
<GLEICH>                                                     = <NUM-AUSDRUCK>
<UEBERSCHRIFT>                                       = <STRING-AUSDRUCK>
<SPALTEN-UEBERSCHRIFT>                    = <STRING-AUSDRUCK>
<FARBE-SPALTEN-UEBERSCHRIFT>     = <NUM-AUSDRUCK>
<FARBEN-FELDUEBERSCHRIFTEN>      = <NUM-AUSDRUCK>
<FARBE-NORMAL>                                     = <NUM-AUSDRUCK>
<FARBE-INVERS>                                        = <NUM-AUSDRUCK>
<BILD-TRENNZEICHEN>                           = <STRING-AUSDRUCK>
<ANZEIGE-ART>                                          = <NUM-AUSDRUCK>
<MARKIER-FELD>                                      = <FELDNAME>$
<MARKIER-FARBE>                                    = <NUM-AUSDRUCK>
<SELECT-FELD>                                          = <FELDNAME>                 oder
                                                                             $<STRING-VARIABLE> oder
                                                                             "<ZEICHENKETTE>"
<LAENGE>                                                     = <NUM-AUSDRUCK>

Achtung: Anstelle von <INDEXDATEI-NAME> kann bei dieser Funktion nicht wie bei anderen Indexdatei-Anweisungen ein <STRING-AUSDRUCK> angegeben werden.

 

 

Bedeutung:

SELECT erlaubt die schnelle Selektion von Datensätzen mit Roll-Down-Balken in einem Window. SELECT ist eine numerische Funktion und liefert folgende Werte als Ergebnis:

 

-1:
 1:
 0:

keine Datensätze gefunden
Benutzer hat einen Datensatz mit <RETURN> ausgewählt.
Benutzer hat keinen Datensatz ausgewählt,  sondern das Window mit <ESC> verlassen.

 

SELECT wird unter Java wie ein Maskenfeld auf der aktuellen Maske eingefügt, wenn folgende 3 Bedingungen erfüllt sind:

1. der Parameter NOWAIT ist angegeben
2. die Überschrift ist der Leerstring "",
3. DISABLE GR_WINDOW_BORDER ist gesetzt

oder wenn folgende 2 Bedingungen erfüllt sind:

1. der Parameter NOWAIT ist angegeben
2. die Variable EBUS_CHILDWINDOW ist ungleich 0

In diesem Fall kann der SELECT wie die anderen Felder der Maske mit den Tasten <TAB>, <Cursor unten>, etc. angesprungen werden.

Im <EXITMACRO> enthält die Variable EBUS_DATA den Returncode.

 

Bei NOWAIT wird ein neuer Programmzweig gestartet (siehe Funktion WINDOWCALL), die Funktion kehrt sofort zurück und liefert die Identifizierungsnummer (Handle) des SELECT. Mit der Anweisung CLOSE_SELECT(<Handle>) kann ein mit NOWAIT geöffneter SELECT geschlossen werden.

Bei WAIT wird SELECT hierarchisch gestartet und die Funktion kehrt erst zurück wenn die SELECT-Auswahl beendet wurde.

Der Macro <EXITMACRO> wird ausgeführt, nachdem die SELECT-Auswahl beendet wurde, sei es durch Schließen des Windows, durch Verlassen mit ESC oder die Anweisungen ENDSELECT und QUITSELECT. Wird WAIT oder NOWAIT angegeben, so muß auch ein <EXITMACRO> angegeben werden. Bei NOWAIT enthält im <EXITMACRO> die Variable EBUS_DATA den Returncode.

Wenn der SELECT im Split-Window angezeigt werden soll, muß <SPLIT-HANDLE> die Identifizierungsnummer des Split-Windows enthalten, andernfalls ist <SPLIT-HANDLE> = 0 zu setzen.

Unabhängig von WAIT/NOWAIT schließt die Funktion SELECT alle Windows, die von ihr geöffnet wurden.

Fehlen die Parameter [WAIT | NOWAIT,<EXITMACRO>,], so ist dies gleichbedeutend mit WAIT.

NOWAIT hat nur unter WINDOWS eine Wirkung, unter MS-DOS und UNIX wirkt NOWAIT wie WAIT.

Alle Schalter und ON <EREIGNIS> MACRO's werden bei NOWAIT beim Start des SELECT und bei jedem Verlassen des Programmzweigs gesichert. Beim erneuten Aktivieren des Programmzweigs wird der letzte Zustand der Schalter und ON <EREIGNIS> MACRO's wieder hergestellt. Nach jedem ON SELECT(<TASTE>) MACRO, der im SELECT ausgeführt wird, werden die ON <EREIGNIS> MACRO's erneut gesichert.

 

Wenn <UEBERSCHRIFT> gleich dem Leerstring "" ist und ein Window gerade aktiv ist, so erfolgt die Anzeige im aktuellen Window. Andernfalls wird an der durch die letzte Anweisung WINDOWPOS definierten Stelle automatisch ein neues Window bis zum Bildschirmende in der benötigten Breite eröffnet. Ist die aktuelle Zeilennummer von WINDOWPOS > 21, so wird sie auf 21 gesetzt. Das Window wird mit Randfarbe = <FARBE-NORMAL> und Hintergrundfarbe = <FARBE-NORMAL> eröffnet. Die Farbe des Roll-Down-Balkens ist <FARBE-INVERS>.

 

 

Achtung: Bei NOWAIT wird immer ein neues Window geöffnet, auch wenn <UEBERSCHRIFT> gleich dem Leerstring "" ist.

 

Ist das selbsteröffnete Window schmaler als die benötigte Zeilenbreite oder reicht das automatisch eröffnete Window über den rechten Bildschirmrand hinaus, so kann der Window-Inhalt mit den Tasten <¬> und <®> nach links bzw. rechts verschoben werden.

 

Es kann optional eine zusätzliche <SPALTEN-UEBERSCHRIFT> definiert werden. Diese erscheint dann in der 1. Zeile des SELECT-Windows mit der <FARBE-SPALTEN-UEBERSCHRIFT>. Ist die <SPALTEN-UEBERSCHRIFT> gleich dem Leerstring "", beginnt in der ersten Zeile des SELECT-Windows die Anzeige der Datensätze. Ist das erste Zeichen der <SPALTEN-UEBERSCHRIFT> nicht das Zeichen ';', so wird die gesamte <SPALTEN-UEBERSCHRIFT> als eine Zeichenkette ausgegeben. Ist das erste Zeichen der Strichpunkt ';', so bedeutet dies, daß die Feldüberschriften einzeln durch einen Strichpunkt getrennt angegeben werden.

<FARBEN-FELDUEBERSCHRIFTEN> legt die Farben der einzelnen Feldüberschriften aus <SPALTEN-UEBERSCHRIFT> fest. Die einzelnen Farben müssen durch Strichpunkt ';' getrennt sein. Es gelten dieselben Konventionen wie bei EBUS_SELECT_COLOR$. <FARBEN-FELDUEBERSCHRIFTEN> hat nur eine Wirkung, wenn die Feldüberschriften in <SPALTEN-UEBERSCHRIFT> durch Strichpunkte ';' getrennt sind.

 

Unter Java können Checkboxen im SELECT angezeigt werden. Im SELECTA werden Checkboxen durch das vierte <TRENNZEICHEN> festgelegt. Beim SELECT sind keine Trennzeichen vorgesehen. Hier wird das Trennzeichen für Checkboxen durch die Variable EBUS_SELECT_CHECKBOXCHAR$ festgelegt. Wie beim SELECTA kann das Trennzeichen nur in der Spaltenüberschrift als erstes Zeichen angegeben werden. Dadurch werden alle Felder der Spalte als Checkbox angezeigt. Es ist nicht möglich, einzelne Felder einer Spalte als Checkbox zu kennzeichnen.

 

Wird die Überschriftszeile mit der Maus angegeklickt, so wird der ON MOUSE MACRO ausgeführt. Sind die Feldüberschriften durch ';' getrennt, dann enthält EBUS_SELECT_FIELD die Nummer der angeklickten Spalte, andernfalls ist EBUS_SELECT_FIELD = 0.

 

Beispiel: H% = SELECT(KUNDEN,0,0,"Kunden",";Nummer;Name;PLZ",
                                           2,1,3,NR,,NAME$,,PLZ)

 

Unter WINDOWS wird die Zeilenüberschrift in der Markierfarbe angezeigt, wenn <FARBE-SPALTEN-UEBERSCHRIFT> = 0 ist. Andernfalls wird die durch <FARBE-SPALTEN-UEBERSCHRIFT> festgelegte DOS-Farbe verwendet.

 

Nach <FARBE-INVERS> kann wahlweise ein Feld der Indexdatei als Markierfeld definiert werden. Dazu muß zur Kennzeichnung das Zeichen '#' vor dem Feldnamen stehen. Das Feld muß ein alphanumerisches Feld sein. Numerische und Datumsfelder sind nicht zulässig. Das Markierfeld erscheint nicht in der Anzeige. Ist dies gewünscht, so muß der Feldname nachfolgend noch einmal als <SELECT-FELD> angegeben werden.

 

Im SELECT/SHOW können auch Bilder angezeigt werden. Dazu muß ein <BILD-TRENNZEICHEN> angegeben werden. Beginnt ein Feld mit diesem Zeichen, so wird der Text nach diesem Zeichen als Bildname (ico, bmp) interpretiert und das Bild anstelle des Textes angezeigt.

<ANZEIGE-ART> legt fest, wie das Bild angezeigt wird:

 

Wert

Bedeutung

 

1

Die Bilder werden proportionalitätsgetreu auf den zur Verfügung stehenden Platz (Zeilenhöhe) vergrößert bzw. verkleinert und linksbündig angezeigt.

 

2

Die Bilder werden proportionalitätsgetreu auf den zur Verfügung stehenden Platz (Zeilenhöhe) vergrößert bzw. verkleinert und in der Feldmitte angezeigt.

 

3

Die Bilder werden in der Originalgröße angezeigt. Ist ein Bild höher als 1 / EBUS_PIXEL_HEIGHT - 4 oder breiter als <Feldbreite> * 1 / EBUS_PIXEL_WIDTH, so wird das Bild proportionalitätsgetreu verkleinert. Die Anzeige erfolgt linksbündig.

 

sonst

Die Bilder werden in der Originalgröße angezeigt. Ist ein Bild höher als 1 / EBUS_PIXEL_HEIGHT - 4 oder breiter als <Feldbreite> * 1 / EBUS_PIXEL_WIDTH, so wird das Bild proportionalitätsgetreu verkleinert. Die Anzeige erfolgt in der Feldmitte.

 

Wenn ein Markierfeld angegeben wird, wird bei der Anzeige der Datensätze bei jedem Datensatz geprüft, ob das Feld nur aus Leerzeichen (Blanks) besteht. Ist dies der Fall, wird die Zeile als nicht markiert betrachtet und in <FARBE-NORMAL> angezeigt. Enthält das Feld irgendein anderes Zeichen außer Leerzeichen, so wird die Zeile in <MARKIER-FARBE> angezeigt. Unter WINDOWS werden die markierten Zeilen in der WINDOWS-Standardfarbe 'Desktop' angezeigt.

 

Neben den Indexdateivariablen können auch konstante Strings, alphanumerische Hilfsvariable und alphanumerische Indexdateivariable aus anderen Indexdateien angezeigt werden. Zur Unterscheidung von den Feldern der im SELECT angegebenen Indexdatei muß diesen Variablen das Zeichen '$' vorangestellt werden. Dies gilt nicht für konstante Strings, da diese durch das Zeichen " eindeutig definiert sind. Es können nur alphanumerische Variablen (keine numerischen oder Datumsvariablen) angegeben werden. Bei Stringkonstanten "..." und Hilfsvariablen wird am Bildschirm nach dem Feld kein Leerzeichen ausgegeben. Für die im Window dargestellte Feldlänge ist der Inhalt der Variablen beim Aufruf von SELECT maßgebend, wenn für das <SELECT-FELD> keine <LAENGE> angegeben wurde. Wird eine <LAENGE> angegeben, so kann diese nicht nur zur Verkürzung sondern auch zur Verlängerung der Anzeige verwendet werden. Hilfsvariable und Variablen anderer Indexdateien können genauso wie die Variablen der SELECT-Indexdatei im ON SELECT MACRO beliebig manipuliert werden können.

 

Für jedes Feld kann im ON SELECT MACRO mit Hilfe der Variablen EBUS_SELECT_COLOR$ eine eigene Farbe definiert werden.

 

SELECT kann mit beliebig vielen Argumenten aufgerufen werden. Bei jedem Feldnamen kann die anzuzeigende <LAENGE> festgelegt werden. Die <LAENGE> muß nicht angegeben werden. Fehlt sie, so wird das Feld in der bei der Dateibeschreibung definierten Länge am Bildschirm angezeigt. Es dürfen nur Feldnamen angegeben werden, die bei der Indexdatei auch definiert sind. Bei der Angabe der Feldnamen ist auch die Angabe des Dateinamens vor dem Feldnamen zulässig. Ist <LAENGE> = n, so werden bei alphanumerischen und Datumsfeldern die linken n Zeichen und bei numerischen Feldern die rechten n Ziffern angezeigt.

 

Nach dem Aufruf der Funktion SELECT wird zuerst ein START bzw. ein STARTS auf die Indexdatei mit Schlüssel = <SCHLÜSSEL-NUMMER> ausgeführt. Liefert der START-Befehl einen Fehler, so wird die Funktion mit Return-Code = -1 verlassen. Über READ-NEXT bzw. READS-NEXT werden soviele Datensätze gelesen bis das Window voll ist. Ist <GLEICH> größer als 0, so wird der Inhalt der Schlüsselfelder des Schlüssels <SCHLÜSSEL-NUMMER> vor der Ausführung der START-Anweisung (STARTS) gesichert. Nach jedem erfolgreichen Lesezugriff (READ-NEXT bzw. READS-NEXT) wird geprüft, ob die linken <GLEICH> Zeichen des Schlüssels des gerade gelesenen Satzes mit den Zeichen des gesicherten Schlüssels übereinstimmen. Ist dies nicht der  Fall, so wird der letzte Dateizugriff wie das Dateiende behandelt. In jeder Zeile des Windows wird ein Datensatz angezeigt, und zwar nur die ausgewählten Felder <FELDNAME> in der jeweiligen <LAENGE>.

 

Bei ENABLE SELECT_ASCENDING werden die Datensätze aufsteigend, bei DISABLE SELECT_ASCENDING absteigend angezeigt.

 

Bei ENABLE SELECT_SEARCH wird bei der Eingabe von Anfangsbuchstaben (alphanumerisches Schlüsselfeld) bzw. Endziffern (numerisches Schlüsselfeld) der Inversbalken automatisch auf den Datensatz positioniert, dessen SELECT-Schlüssel mit den eingegebenen Zeichen beginnt bzw. endet. Existiert kein derartiger Datensatz, so wird der Inversbalken auf den Datensatz mit dem nächstgrößeren Schlüssel positioniert. Der ON SELECT(PGDN) MACRO wird ausgeführt und die eingegebenen Zeichen werden in der Meldungszeile angezeigt. Ist Parameter <GLEICH> > 0, so beziehen sich die zur Suche eingegebenen Zeichen auf die Position <GLEICH> + 1, d.h. der Suchstring setzt sich zusammen aus den ersten <GLEICH> Zeichen des Selectschlüssels und den eingegebenen Zeichen.

Der Schalter hat keine Wirkung, wenn ein ON SELECT(KEY) MACRO aktiv ist.

 

Der ON SELECT(MOUSE) MACRO wird im SELECT/SHOW/SELECTA ausgeführt, wenndie linke Maustaste betätigt wurde und gleichzeitig eine oder mehrere der Tasten SHIFT, ALT oder CTRL gedrückt sind.

 

Mit den Tasten <¯>, <­>, <PGDN> und <PGUP> kann der Benutzer beliebig vorwärts und rückwärts blättern (in der Sortierreihenfolge des angegebenen Schlüssels). Ist <GLEICH> = 0, so kann in der ganzen Datei geblättert werden, andernfalls nur in dem durch <GLEICH> sich ergebenden Ausschnitt der Datei.

 

Mit <RETURN> kann ein Datensatz ausgewählt werden. In diesem Fall wird der ausgewählte Satz über den Hauptschlüssel gelesen (und ist damit der aktuelle Satz in der Indexdatei) und die Funktion SELECT wird mit Return-Code = 1 verlassen.

 

Bei Betätigung der Taste <ESC> wird SELECT mit Return-Code = 0 beendet. Wurde von SELECT ein Window automatisch eröffnet, so wird dieses beim Verlassen auch wieder automatisch geschlossen.

 

Wird kein Datensatz mit <RETURN> ausgewählt, so wird nach dem Verlassen der Funktion SELECT der ursprünglich aktuelle Datensatz wieder über den Haupt-Schlüssel gelesen.

 

Innerhalb der Funktion SELECT wird temporär auf DISABLE READLOCK umgeschaltet. Dadurch können im Multi-User-Betrieb auch gesperrte Datensätze gelesen und angezeigt werden. Wenn das Betriebssystem oder Netzwerk das Lesen gesperrter Datensätze nicht zuläßt, so wird im Window anstelle der Daten eine Zeile mit Fragezeichen '?' angezeigt. Wird ein Datensatz mit <RETURN> ausgewählt, so wird vor dem Lesen dieses Datensatzes der Zustand des Schalters READLOCK wieder hergestellt, der beim Aufruf der Funktion SELECT gültig war.

 

Beispiel:

Beispiel 1:

 

Die Indexdatei wird in der Sortierreihenfolge des Neben-Schlüssels 2 (PLZ) gelesen. Im Window werden die linken 10 Zeichen von NAME$, die rechten 4 Ziffern von NR, PLZ ganz und die linken 10 Zeichen von ORT$ angezeigt. Es kann in der gesamten Datei geblättert werden.


 

WINDOWPOS(10,20)
KUNDEN.PLZ=0
H=SELECT(KUNDEN,2,0,"Kunden-Übersicht",1,3,
                     NAME$,10,NR,4,PLZ,,ORT$,10)
CASE H
   OF -1 ...            /* keine Datensätze gefunden
   OF 1 ...              /* Datensatz wurde ausgewählt
   OF  0 ...             /* kein Datensatz wurde ausgewählt
ENDCASE

 

Beispiel 2:

 

Die Anzeige erfolgt in einem vorher eröffneten Window. Angezeigt werden NAME$, NR und PLZ. Da <GLEICH>=1 ist, werden nur die Datensätze angezeigt, bei denen die 1.Ziffer der PLZ gleich 8 ist.

 

WINDOWPOS(10,20)
WINDOW(2,10,40,1,3,"Kunden-Übersicht")
KUNDEN.PLZ=8000
H=SELECT(KUNDEN,2,1,"",1,3,NAME$,,NR,,PLZ)
WCLOSE

 

Beispiel 3:

 

Es sollen im SELECT mit der Taste RETURN beliebig viele Kunden-Datensätze markiert werden können. Nach Beendigung des SELECT sollen die markierten Datensätze weiter bearbeitet werden. Dazu wird in der Datei KUNDEN ein einstelliges Feld KZ$ definiert. Dieses Feld ist normalerweise immer leer. Im SELECT wird dieses Feld als Markierfeld definiert. Wird das Feld markiert, wird dort ein Stern eingetragen. In der Dateibeschreibung wird ein eigener Sekundärkey für das Feld KZ$ festgelegt. Über diesen Sekundärkey können nach dem SELECT die markierten Datensätze gefunden und verarbeitet werden.

 

ON SELECT(RETURN) MACRO MARKIEREN
ON SELECT(F10) MACRO VERARBEITUNGS.KZ.SETZEN
F10_KZ%=0
KUNDEN.NR=0                /* Primärkey. Start am Dateianfang
WINDOWPOS(5,5)
H%=SELECT(KUNDEN,0,0,"Kunden",1,3,#KZ$,2,NR,,NAME$,,PLZ,,ORT$)
ON SELECT(RETURN) RESET
ON SELECT(F10) RESET
IF F10_KZ%=1                                /* F10 wurde gedrückt, also markierte
THEN                                                /* Daten verarbeiten
N1:        KUNDEN.KZ$="*"
               STARTS(2) KUNDEN        /* Sekundärkey-2 besteht
                                                           /* nur aus KUNDEN.KZ$
               ON ERROR GOTO ENDE END
               ...                                         /* Verarbeitung des Datensatzes
               KUNDEN.KZ$=" "
               WRITE KUNDEN ON ERROR ... END
                                            /* Markierung zurücksetzen
               GOTO N1            /* Nächsten markierten Datensatz suchen
ENDIF
ENDE: ...

 

Macro MARKIEREN
READSELECT ON ERROR ...
END               /* Aktuellen Satz lesen
IF KUNDEN.KZ$="*"                                    /* Satz ist bereits markiert
THEN KUNDEN.KZ$=" "                              /* Markierung zurücksetzen
ELSE KUNDEN.KZ$="*"                              /* markieren
ENDIF
WRITE KUNDEN ON ERROR ... END
                                                                          /* Datensatz zurückschreiben
UNGETCHAR CURSU$                                 /* zum nächsten Datensatz
                                                                          /* gehen

 

Macro VERARBEITUNGS.KZ.SETZEN
F10_KZ%=1
QUITSELECT                                                 /* SELECT beenden

 

Beispiel 4:

 

X$ = "Kunr="
H% = SELECT(KUNDEN,0,0,"Kunden",1,3,$X$,7,NR,,"Name=",,NAME$)
/* Die angegebene Länge 7 hinter $X$ hat keine Wirkung, da die
/* Variable X$ beim Aufruf von SELECT nur 5 Zeichen enthält.
/* Angezeigt wird also etwa folgendes:

Kunr= 123  NAME=Huber
Kunr= 237  NAME=Meier
Kunr=4444 NAME=Talmann

 

Beispiel 5:

 

/* Anzeigen Felder aus einer anderen Indexdatei
ON SELECT MACRO HOLE.ORT
H% = SELECT(KUNDEN,0,0,"Kunden",1,3,NR,,PLZ,,$ORTE.ORTSNAME$)

 

Macro HOLE.ORT
ORTE.PLZ = KUNDEN.PLZ
READ ORTE ON ERROR ORTE.ORTSNAME$ = "" END

siehe auch:

SELEDIT$, SELECTA, SELECTDB$, SHOW, ENDSELECT, QUITSELECT, READSELECT, ON <EREIGNIS> MACRO, EBUS_SELECT_KEY, WINDOW, WINDOWPOS, EBUS_SELECT, EBUS_SELECT_POS,
EBUS_SELECT_COLOR$
,
ENABLE/DISABLE READLOCK
,
ENABLE/DISABLE SELECT_ASCENDING
,
ENABLE/DISABLE SELECT_DOUBLECLICK
,
ENABLE/DISABLE SELECT_SEARCH
, ENABLE_WINDOW
,
GR_SELECT_BACKGROUNDCOLOR
, EBUS_SELECT_CHECKBOXCHAR$, EBUS_SELECT_TRANSPARENTMODE, EBUS_SELECT_FIXCOLUMNS, CLOSE_SELECT, SET_SELECTA, EBUS_CHILDWINDOW