Selection
Selection
Selektions-Objekt
Details
- Siehe: Liste , Eigenschaften ,
SelCreate (), Dynamische Selektionen (Blog)
In einem Selection-Objekt wird eine Selektion zusammengestellt.
Eine Selektion besitzt immer eine Ausgangsdatei und mindestens ein Selektionskriterium. Das Selektionskriterium ist ein Ausdruck mit einem logischen Ergebnis. Es bestimmt, welche Datensätze der Ausgangsdatei in die Selektionsmenge übernommen werden. Neben der Ausgangsdatei können über Verknüpfungen weitere Dateien angehängt werden. Für jede dieser Anhangdateien kann wiederum ein Selektionskriterium definiert werden.
Beispiel:
Aus der Kunden-Datei sollen alle Adressen in einem bestimmten Postleitzahl-Bereich ermittelt werden. Als Ausgangsdatei wird die Kunden-Datei verwendet, das Selektionskriterium ist "Länderkennzeichen ist gleich "D" UND Postleitzahl ist im Bereich 60000 bis 69999". Mit den Befehlen für dynamische Selektionen wird die Selektion wie folgt erstellt:
tSel # SelCreate(tblCstCustomer, keyCstId);
tSel->SelDefQuery('', 'faCstLkz = ''D'' AND faCstPlz >= 60000 AND faCstPlz <= 69999');
tSel->SelStore('tmpLkzPlz', _SelLock);
Nachdem die Selektion definiert wurde, kann sie ausgeführt werden. Dazu wird der Deskriptor zum Erstellen einer Selektion in einen Selektionspuffer umgewandelt (SelOpen ()) und anschließend die Selektion mit der Anweisung SelRun () ausgeführt.
tSel # tSel->SelOpen();
tErg # tSel->SelRun(_SelDisplay | _SelWait);
Der Inhalt der Selektionsmenge enthält nur die Datensätze, die zum Zeitpunkt der Selektionsdurchführung das Selektionskriterium erfüllt haben. Spätere Änderungen im Datenbestand führen nicht dazu, dass Datensätze in die Menge aufgenommen oder aus der Menge entfernt werden. Dazu muss die Selektion erneut durchgeführt werden. Eine bestehende Selektionkann mit der Anweisung SelRead () in einen Selektionspuffer gelesen und anschließend durchgeführt werden.
Um auf die Datensätze einer Selektionsmenge zugreifen zu können, muss der Deskriptor des Selektionspuffers bei dem entsprechenden Befehl (zum Beispiel RecRead ()) oder in einer Eigenschaft (zum Beispiel DbSelection beim RecList -Objekt) angegeben werden.
Wird die Selektionsmenge nicht mehr benötigt, kann sie geschlossen werden. Wird auch die Definition der Selektion nicht mehr benötigt, kann auch diese gelöscht werden.
tSel->SelClose();
SelDelete(tblCstCustomer, 'tmp.sel');
Neben Selektionen, die nur die Datensätze einer Datei untersuchen, können auch Selektionen definiert werden, die weitere Dateien durchsuchen. Existiert in der Ausgangsdatei eine Verknüpfung zu einer anderen Datei, kann diese andere Datei angehängt werden. In dieser angehängten Datei können Bedingungen für die verknüpften Datensätze angegeben werden. Sollen die Kunden weiter eingeschränkt werden auf die Kunden, die in einem bestimmten Zeitraum etwas bestellt haben, muss das Abfragekriterium entsprechend erweitert werden:
tSel # SelCreate(tblCstCustomer, keyCstId);
tSel->SelAddLink('', tblOrhOrderheader, tblCstCustomer, lnkCstOrh, 'OrderHead', 0);
tSel->SelDefQuery('', 'faCstLkz = ''D'' AND faCstPlz >= 60000 AND faCstPlz <= 69999 AND LINKCOUNT(OrderHead) > 0');
tSel->SelDefQuery('OrderHead', 'fdOrhDate >= 01.01.2007 AND fdOrhDate <= 31.12.2007');
tSel->SelStore('tmpLkzPlz', _SelLock);
In diesem Beispiel werden nur die Kunden-Datensätze in die Selektionsmenge übernommen, die in dem Postleitzahlengebiet 60000 ansässig sind und im Jahr 2007 mindestens eine Bestellung getätigt hatten. Die verknüpften Datensätze werden nicht mit in die Selektionsmenge aufgenommen. Dies kann erreicht werden, indem bei der Anweisung SelAddLink () der letzte Parameter auf _SelResultSet gesetzt wird. Bei Angabe des Selektionsdeskriptors beim Befehl RecLink () werden dann auch nur Datensätze gelesen, die das Selektionskriterium erfüllen.
Weitere Informationen zum Aufbau von Selektionen befinden sich bei den entsprechenden Befehlen für dynamische Selektionen .