Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Einführung in Mengen
|
Vergleichskriterium | Temporäre Auswahl | Menge |
Anzahl pro Tabelle und Prozess | 1 | Beliebig |
Sortieren | Ja | Nein |
Sichern auf Festplatte | Nein | Ja |
RAM pro Datensatz | (4 Bytes) pro ausgewähltem Datensatz | 1 Bit (1/8 Byte) pro vorhandenem Datensatz |
Kombinierbar | Nein | Ja |
Rechenoperationen | Nein | Ja |
Enthält aktuellen Datensatz | Ja | Ja, 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:
Hinweise:
Nachfolgende Tabelle zeigt, wie Mengen sichtbar sind. Das richtet sich nach der jeweiligen Reichweite und wo sie erstellt wurden:
Client Prozess | Andere Prozesse auf dem gleichen Client | Andere Clients | Server Prozess | Andere Prozesse auf dem Server | |
Erstellung in einem Client Prozess | |||||
$test | X | ||||
test | X | X(Trigger) | |||
<>test | X | X | |||
Erstellung in einem Server Prozess | |||||
$test | X | ||||
test | X | ||||
<>test | X | X |
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.
Produkt: 4D
Thema: Mengen
4D Programmiersprache ( 4D v20 R7)