Einführung in Mengen

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11 (Geändert)


Mengen sind ein leistungsstarkes und flinkes 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

Mengen und die aktuelle Auswahl


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 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:

Vergleichskriterium Temporäre Auswahl Menge

Anzahl pro Tabelle und Prozess1Beliebig
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.

Typen von Mengen


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. UserSet und LockedSet sind auch Prozessmengen.

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 sie für alle Prozesse jedes Clients sichtbar, wenn sie in einem Client Prozess erstellt wurde; oder für alle Server Prozesse, wenn sie in einem Serverprozess (stored procedure) erstellt wurde.

Ihr Name muss in der Datenbank einmalig sein.

Lokale Mengen/Client Mengen: Lokale bzw. Client Mengen dienen zur Verwendung im Client/Server-Modus. Version 6 führt lokale bzw. Client Mengen ein. Diesen Mengen wird das Dollarzeichen ($) vorangestellt. Sie werden im Gegensatz zu anderen Mengen auf dem Client-Rechner gespeichert.

Weitere Informationen dazu finden Sie im Handbuch 4D Server Administration im Abschnitt 4D Server und Mengen.

Sichtbarkeit von Mengen

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

Menge und Transaktion


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.

Beispiel


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.

Die Systemmenge UserSet


4D erzeugt automatisch die Menge UserSet. Sie enthält die Datensätze, die der Anwender in einer mit MODIFY SELECTION oder DISPLAY SELECTION erzeugten Liste angeklickt hat.

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 Administration im Kapitel 4D Server und Mengen.

Eine Tabelle hat keine eigene Menge UserSet. UserSet gilt für alle Tabellen der Datenbank. Es gibt also auch nur eine Menge UserSet pro Prozess.

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

Hinweis: Um UserSet wiederzufinden, müssen Sie MODIFY SELECTION oder DISPLAY SELECTION ausführen.

Die Systemmenge LockedSet


Die Befehle APPLY TO SELECTION, ARRAY TO SELECTION und DELETE 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.

Referenz

Konventionen.


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next