4D v16.3

Einführung in Mengen

Home

 
4D v16.3
Einführung in Mengen

Einführung in Mengen  


 

 

Mengen sind ein leistungsstarkes und effizientes Werkzeug zum Bearbeiten von Datensatzauswahlen. Sie können Mengen erstellen, speichern, laden und löschen, sowie der aktuellen Auswahl zuordnen. Mit 4D können Sie außerdem folgende Standardmengen bilden:

  • Schnittmenge
  • Vereinigungsmenge
  • Differenzmenge

Eine Menge ist die kompakte Darstellung einer aktuellen Auswahl. Menge und Auswahlen haben gewisse Ähnlichkeiten. Eine Menge ist eine boolesche Tabelle, die ausgewählte Datensätze durch 1 bzw. nicht ausgewählte durch 0 anzeigt.
Benutzen Sie Mengen hauptsächlich dann, wenn Sie:

  • Im gleichen Prozess mit mehreren Auswahlen arbeiten.
  • Die Auswahl kurzfristig sichern und dann wiederherstellen möchten.
  • Auf eine vom Benutzer angeklickte Teilauswahl zugreifen möchten
    (Menge UserSet).
  • Aus zwei Auswahlen die Vereinigungs-, Schnitt- oder Differenzmenge bilden möchten.

Sie können sich die aktuelle Auswahl als eine Liste oder Tabelle, die auf jeden Datensatz der Auswahl zeigt, vorstellen. In dieser Liste sind nur die Datensätze der aktuellen Auswahl aufgeführt. Die aktuelle Auswahl enthält nicht die Datensätze selbst, sondern nur die Zeiger auf ihre Adressen. Jeder Zeiger auf einen Datensatz belegt im Speicher 32 Bits oder 4 Bytes. Arbeiten Sie in einer Tabelle, arbeiten Sie immer mit einer aktuellen Auswahl. Sortieren Sie die aktuelle Auswahl, sortieren Sie in Wirklichkeit nur die Zeiger. Es gibt in jedem Prozess nur eine aktuelle Auswahl pro Tabelle.

Eine Menge ist die Beschreibung einer Auswahl. Jeder Datensatz wird mit einem Bit (1/8 eines Byte) dargestellt: Dieses Bit enthält die Ziffer 1 für die ausgewählten und die Ziffer 0 für die nicht ausgewählten Datensätze. Das Arbeiten mit Mengen ist daher sehr schnell. 4D muss nur wenige Informationen verarbeiten.

Die Größe einer Menge in Bits entspricht immer der Anzahl der Datensätze der Tabelle. Erzeugen Sie beispielsweise eine Menge aus einer Tabelle mit 10 000 Datensätzen, umfasst die Menge 10 000 Bits bzw. 1 250 Bytes oder 1,2 KB im RAM.

Für eine Tabelle können Sie beliebig viele Mengen erzeugen.
Mengen lassen sich unabhängig von der Datenbank auf der Festplatte speichern. Wollen Sie einen Datensatz ändern, der zu einer Menge gehört, müssen Sie die Menge zuerst zur aktuellen Auswahl machen. Hier können Sie dann einen oder mehrere Datensätze ändern.

Eine Menge ist nie sortiert, da sie nur die Information enthält, ob der Datensatz enthalten oder nicht enthalten ist. Im Gegensatz dazu ist eine temporäre Auswahl sortiert, sie benötigt jedoch in den meisten Fällen mehr Speicher. Weitere Informationen dazu finden Sie im Abschnitt Einführung in temporäre Auswahl.

Eine Menge merkt sich, welcher Datensatz beim Erstellen der Menge der aktuelle Datensatz war. Folgende Tabelle zeigt die Unterschiede zwischen der aktuellen Auswahl und der Menge:

VergleichskriteriumTemporäre AuswahlMenge

Anzahl pro Tabelle und Prozess
1Beliebig
SortierenJaNein
Sichern auf FestplatteNeinJa
RAM pro Datensatz(4 Bytes) pro ausge-1 Bit (1/8 Byte) pro vor-
wähltem Datensatzhandenem Datensatz
KombinierbarNeinJa
Rechenoperationen NeinJa
Enthält aktuellen DatensatzJaJa, beim Erzeugen der Menge

Eine Menge bezieht sich immer auf die Tabelle, für die sie erzeugt wurde. Bei Operationen mit mehreren Mengen, wie Schnitt- oder Vereinigungsmengen, müssen alle Mengen der gleichen Tabelle angehören.

Mengen sind von den Datensätzen abhängig. Nach einer Änderung in der aktuellen Auswahl kann die Menge veraltet sein, vor allem beim Anlegen bzw. Löschen von Datensätzen.
Nehmen Sie beispielsweise eine Auswahl mit allen Einwohnern von Köln. Sie legen davon eine Menge an. Zieht nun ein Einwohner weg, ist die Menge nicht mehr gültig. Sie repräsentiert nicht mehr die Einwohner von Köln. Eine Menge beschreibt nur die aktuelle Auswahl zu einem bestimmten Zeitpunkt. Wird der Inhalt der Datensätze verändert oder werden Datensätze in der aktuellen Auswahl gelöscht bzw. hinzugefügt, stellt die Menge nicht mehr die aktuelle Auswahl dar.

Es gibt folgende Arten:

  • Prozessmenge: Sie gilt nur für den Prozess, in dem sie erzeugt wurde. Sie benötigt keine spezielle Vorsilbe im Namen und wird gelöscht, sobald die Prozessmethode endet. LockedSet ist eine Prozessmenge. Prozessmengen werden gelöscht, sobald die Prozessmethode endet.
  • Interprozessmenge: Sie gilt für alle Prozesse der Arbeitsstation. Der Interprozessmenge werden die Zeichen "kleiner als, größer als" (<>) vorangestellt. Diese Syntax gilt sowohl für Windows als auch für Macintosh. Auf Macintosh können Sie auch das Zeichen ◊ benutzen. Sie erhalten es mit der Kombination Wahl- + Umschalttaste + Buchstabe v).
    Eine Interprozessmenge ist für alle Prozesse der Datenbank sichtbar.
    Im Client/Server-Betrieb ist eine Interprozessmenge für Prozesse des Rechners sichtbar, wo sie erstellt wurde (Client oder Server).
    Ihr Name muss in der Datenbank einmalig sein.
  • Lokale Mengen/Client Mengen: Lokale bzw. Client Mengen dienen zur Verwendung im Client/Server-Modus. Dem Namen einer lokalen bzw. Client Menge wird immer das Dollarzeichen ($) vorangestellt -- mit Ausnahme der Systemmenge UserSet. Sie werden im Gegensatz zu anderen Mengen auf dem Client-Rechner gespeichert.

Hinweise:

  • Mengennamen können max. 255 Zeichen lang sein (ohne die Symbole <> und $).
  • Weitere Informationen zur Verwendung im Client/Server Betrieb finden Sie im Handbuch 4D Server im Abschnitt 4D Server, Mengen und temporäre Auswahlen.

Nachfolgende Tabelle zeigt, wie temporäre Auswahlen sichtbar sind, je nachdem, wo sie erstellt wurden:

Eine Menge lässt sich innerhalb einer Transaktion erzeugen. Sie können eine Menge mit Datensätzen erstellen, die innerhalb einer Transaktion erzeugt wurden oder eine Menge mit Datensätzen, die außerhalb einer Transaktion erstellt oder geändert wurden. Endet die Transaktion, sollten Sie die während der Transaktion erstellte Menge löschen, da sie keine zuverlässige Darstellung der Datensätze ist, insbesondere wenn die Transaktion abgebrochen wurde.

Folgendes Beispiel löscht doppelte Datensätze aus der Tabelle [People]. Eine Schleife For...End for durchläuft alle Datensätze und vergleicht den aktuellen Datensatz mit dem vorigen. Sind Name, Straße und Postleitzahl gleich, wird der Datensatz in die Menge gelegt. Am Ende der Schleife wird diese Menge die aktuelle Auswahl, die alte aktuelle Auswahl wird gelöscht:

 CREATE EMPTY SET([People];"Duplikate")
  ` Erstelle leere Menge für doppelte Datensätze
 ALL RECORDS([People])
  ` Wähle alle Datensätze aus
  ` Sortiere Datensätze nach PLZ, Straße, Name etc.
  ` so daß die doppelten aufeinander folgen
 ORDER BY([People];[People]PLZ;>;[People]Address;>;[People]Name;>)
  ` Initialisiere Variablen mit den Feldern des vorigen Datensatzes
 $Name:=[People]Name
 $Address:=[People]Address
 $PLZ:=[People]PLZ
  ` Gehe zum zweiten Datensatz, um ihn mit dem ersten zu vergleichen
 NEXT RECORD([People])
 For($i;2;Records in table([People]))
  ` Durchlaufe Datensätze beginnend mit 2
  ` Sind Name, Straße und PLZ gleich mit dem vorigen Datensatz,
  ` ist es ein doppelter Datensatz.
    If(([People]Name=$Name) & ([People]Address=$Address) & ([People]PLZ=$PLZ))
  ` Füge aktuellen Datensatz (den doppelten) hinzu
       ADD TO SET([People];"Duplikate")
    Else
  ` Sichere Name, Straße und PLZ dieses Datensatzes zum Vergleichen mit dem nächsten Datensatz
       $Name:=[People]Name
       $Address:=[People]Address
       $ZIP:=[People]PLZ
    End if
  ` Gehe zum nächsten Datensatz
    NEXT RECORD([People])
 End for
  ` Verwende gefundene doppelte Datensätze
 USE SET("Duplikate")
  ` Lösche doppelte Datensätze
 DELETE SELECTION([People])
  ` Entferne die Menge aus dem Speicher
 CLEAR SET("Duplikate")

Alternativ dazu können Sie am Ende der Methode die Datensätze auch zuerst auf dem Bildschirm anzeigen oder ausdrucken, um so einen genaueren Vergleich auszuführen.

4D unterhält die Menge UserSet, die automatisch die aktuellste Datensatzauswahl speichert, die der Benutzer auf dem Bildschirm markiert hat. So können Sie mit MODIFY SELECTION oder DISPLAY SELECTION eine Gruppe Datensätze anzeigen, den Benutzer auffordern, davon welche auszuwählen und das Ergebnis dieser manuellen Auswahl in einer Auswahl oder eine temporären Menge zurückzugeben.

4D Server: Die Systemmenge UserSet ist lokal, auch wenn ihr Name nicht mit dem Dollarzeichen ($) beginnt. Stellen Sie deshalb beim Aufrufen von INTERSECTION, UNION und DIFFERENCE sicher, dass UserSet nur mit lokalen Mengen genutzt wird. Weitere Informationen dazu finden Sie in der Beschreibung dieser Befehle und im Handbuch 4D Server im Abschnitt 4D Server, Mengen und temporäre Auswahlen.

Es gibt nur eine Menge UserSet pro Prozess. Eine Tabelle hat keine eigene Menge UserSet. UserSet wird sozusagen Eigentum einer Tabelle, wenn für die Tabelle eine Datensatzauswahl angezeigt wird. 

4D verwaltet die Menge UserSet für Listenformulare, die im Designmodus oder über die Befehle MODIFY SELECTION bzw. DISPLAY SELECTION angezeigt werden. Diese Funktionsweise ist jedoch nicht für Unterformulare aktiv.

Folgende Methode zeigt Datensätze an, lässt den Benutzer einige auswählen und zeigt dann die ausgewählten Datensätze in UserSet an:

  ` Zeige alle Datensätze und lass den Benutzer eine beliebige Anzahl auswählen.
  ` Zeige diese Auswahl in UserSet, um die aktuelle Auswahl zu ändern.
 OUTPUT FORM([People];"Display") ` Setze Ausgabeformular
 ALL RECORDS([People]` Wähle alle Personen
 ALERT("Wähle die gewünschten Personen mit der Kombination Ctrl- bzw. Befehlstaste und Klick.")
 DISPLAY SELECTION([People]` Zeige die Personen
 USE SET("UserSet") ` Verwende die ausgewählten Personen
 ALERT("Sie haben folgende Personen gewählt.")
 DISPLAY SELECTION([People]` Zeige die ausgewählten Personen

Die Befehle APPLY TO SELECTION, DELETE SELECTION, ARRAY TO SELECTION und JSON TO SELECTION erzeugen in der Multiprozess-Umgebung automatisch die Menge LockedSet. Auch Suchbefehle erstellen eine solche Menge, wenn sie im Kontext "Suchen und Sperren" gesperrte Datensätze finden (siehe Befehl SET QUERY AND LOCK).
LockedSet enthält die Datensätze, die beim Ausführen des Befehls gesperrt waren.



Siehe auch 

Namenskonventionen

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Mengen

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)