Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Présentation des ensembles
|
Comparaison | Sélection courante | Ensembles |
Nombre par table | 1 | illimité |
Triable | Oui | Non |
Sauvegardable sur disque | Non | Oui |
RAM par enreg. (en octets) | Nb enreg. sélec*4 | Nb total enreg./8 |
Combinable | Non | Oui |
Contient enreg. courant | Oui | Oui, celui du moment de création |
L'ensemble que vous créez appartient à la table dans laquelle il a été créé. Les opérations sur les ensembles ne peuvent être effectuées qu'entre ensembles appartenant à la même table.
Les ensembles sont indépendants des données, ce qui signifie qu'après des modifications dans une table, un ensemble peut n'être plus exact. Bien des opérations peuvent rendre un ensemble inexact. Si vous créez un ensemble de tous les habitants de New York et changez ensuite les données de l'un des enregistrements par “New Jersey,” l'ensemble ne change pas puisqu'il est simplement la représentation d'une sélection d'enregistrements. L'ajout ou la suppression d'enregistrements peut également rendre un ensemble obsolète, de même que le compactage des données. Les ensembles ne sont exacts que tant que la sélection d'origine n'est pas modifiée.
Vous pouvez utiliser trois types d'ensembles :
Notes :
Le tableau suivant indique les principes de visibilité des ensembles en fonction de leur portée et de leur lieu de création :
Process client | Autres process du client | Autres clients | Process serveur | Autres process du serveur | |
Création dans un process client | |||||
$test | X | ||||
test | X | X(Trigger) | |||
<>test | X | X | |||
Création dans un process serveur | |||||
$test | X | ||||
test | X | ||||
<>test | X | X |
Un ensemble peut être créé à l'intérieur d'une transaction. Il est donc possible de définir un "ensemble des enregistrements créés pendant la transaction" et un "ensemble des enregistrements créés ou modifiés en-dehors de la transaction". Une fois la transaction terminée, l'ensemble créé pendant la transaction doit être effacé car il pourrait ne plus être une représentation exacte des enregistrements, surtout si la transaction a été annulée.
Cet exemple détruit des enregistrements doublons dans une table. La table contient des informations sur des personnes. Une structure répétitive Boucle...Fin de boucle parcourt tous les enregistrements, comparant l'enregistrement courant à l'enregistrement précédent. Si le nom, l'adresse et le code postal sont identiques, l'enregistrement est ajouté à un ensemble. A la fin de la boucle, l'ensemble devient la sélection courante et l'ancienne sélection courante est détruite :
CREATE EMPTY SET([Personnes];"Doublons")
// Créer un ensemble vide pour les doublons
ALL RECORDS([Personnes])
// Tous les enregistrements
// Trier les enregistrements par code postal, adresse et nom pour
// que les doublons soient les uns à côté des autres
ORDER BY([Personnes];[Personnes]CODEPOSTAL;>;[Personnes]Adresse;>;[Personnes]Nom;>)
// Initialiser les variables conservant les champs des enregistrements précédents
$Nom:=[Personnes]Nom
$Adresse:=[Personnes]Adresse
$CODEPOSTAL:=[Personnes]CODEPOSTAL
// Aller au second enregistrement pour le comparer au premier
NEXT RECORD([Personnes])
For($i;2;Records in table([Personnes]))
// Parcourir les enregistrements en partant à 2
// Si nom, adresse et CODEPOSTAL sont identiques au
// précédent enregistrement, alors c'est un doublon.
If(([Personnes]Nom=$Nom)&([Personnes]Adresse=$Adresse)&([Personnes]CODEPOSTAL=$CODEPOSTAL))
// Ajouter enregistrement (le doublon) à l'ensemble
ADD TO SET([Personnes];"Doublons")
Else
// Garder les nom, adresse et CODEPOSTAL de cet enregistrement pour comparer avec le prochain
$Nom:=[Personnes]Nom
$Adresse:=[Personnes]Adresse
$CODEPOSTAL:=[Personnes]CODEPOSTAL
End if
// Passer à l'enregistrement suivant
NEXT RECORD([Personnes])
End for
// Use doublons trouvés (en tant que sélection courante)
USE SET("Doublons")
// Détruire doublons
DELETE SELECTION([Personnes])
// Supprimer l'ensemble de la mémoire
CLEAR SET("Doublons")
Au lieu de supprimer immédiatement les enregistrements à la fin de la méthode, vous pouvez les afficher à l'écran ou les imprimer si des comparaisons plus fines doivent être menées.
4D gère un ensemble système local/client nommé UserSet. UserSet contient automatiquement l'ensemble des derniers enregistrements marqués (“surlignés”) à l'écran par l'utilisateur dans un formulaire en liste. Ainsi, vous pouvez afficher un groupe d'enregistrements avec MODIFY SELECTION ou DISPLAY SELECTION , demander à l'utilisateur d'en sélectionner certains et retourner le résultat de cette sélection manuelle dans un ensemble que vous nommez ou dans une sélection.
Il existe un seul UserSet par process. Les tables ne disposent pas de leur propre UserSet. Le UserSet n'est associé à une table que lorsqu'une sélection d'enregistrements est affichée pour cette table.
4D gère l'ensemble UserSet pour les formulaires liste affichés en mode Développement et via les commandes MODIFY SELECTION ou DISPLAY SELECTION. En revanche, ce mécanisme n'est pas actif pour les sous-formulaires.
La méthode ci-dessous illustre comment afficher des enregistrements pour permettre à l'utilisateur d'en sélectionner quelques-uns, et ensuite utiliser le UserSet pour afficher les enregistrements sélectionnés :
` Afficher tous les enregistrements et permettre à l'utilisateur d'en sélectionner un certain nombre.
` Puis afficher cette sélection en utilisant UserSet pour modifier la sélection courante.
FORM SET OUTPUT([Personnes];"Display") ` Choisir le formulaire sortie
ALL RECORDS([Personnes]) ` Sélection de toutes les personnes
ALERT("Appuyer Ctrl ou Commande + Clic pour sélectionner des enregistrements.")
DISPLAY SELECTION([Personnes]) ` Afficher les personnes
USE SET("UserSet") ` Use les personnes sélectionnées
ALERT("Vous avez choisi les personnes suivantes.")
DISPLAY SELECTION([Personnes]) ` Afficher les personnes sélectionnées
4D Server : Bien que son nom ne débute pas par le caractère "$", l'ensemble système UserSet est un ensemble client. Par conséquent, lors de l'utilisation des commandes INTERSECTION, UNION et DIFFERENCE, veillez à ne comparer UserSet qu'à d'autres ensembles clients. Pour plus d'informations, reportez-vous aux descriptions de ces commandes ainsi qu'à la section 4D Server, ensembles et sélections dans le Guide de référence de 4D Server.
Les commandes APPLY TO SELECTION, DELETE SELECTION, ARRAY TO SELECTION et JSON TO SELECTION créent un ensemble système nommé LockedSet lorsqu'elles sont utilisées en environnement multiprocess.
Les commandes de recherche créent également un ensemble système LockedSet lorsqu'elles trouvent des enregistrements verrouillés dans le contexte de 'recherche et verrouillage' (cf. commande SET QUERY AND LOCK).
LockedSet indique quels enregistrements étaient verrouillés lors de l'exécution d'une commande.
Produit : 4D
Thème : Ensembles
4D - Langage ( 4D v20 R7)