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.6
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 :
ENSEMBLE VIDE([Personnes];"Doublons")
// Créer un ensemble vide pour les doublons
TOUT SELECTIONNER([Personnes])
// Tous les enregistrements
// Trier les enregistrements par code postal, adresse et nom pour
// que les doublons soient les uns à côté des autres
TRIER([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
ENREGISTREMENT SUIVANT([Personnes])
Boucle($i;2;Enregistrements dans 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.
Si(([Personnes]Nom=$Nom)&([Personnes]Adresse=$Adresse)&([Personnes]CODEPOSTAL=$CODEPOSTAL))
// Ajouter enregistrement (le doublon) à l'ensemble
ADJOINDRE ELEMENT([Personnes];"Doublons")
Sinon
// Garder les nom, adresse et CODEPOSTAL de cet enregistrement pour comparer avec le prochain
$Nom:=[Personnes]Nom
$Adresse:=[Personnes]Adresse
$CODEPOSTAL:=[Personnes]CODEPOSTAL
Fin de si
// Passer à l'enregistrement suivant
ENREGISTREMENT SUIVANT([Personnes])
Fin de boucle
// Utiliser doublons trouvés (en tant que sélection courante)
UTILISER ENSEMBLE("Doublons")
// Détruire doublons
SUPPRIMER SELECTION([Personnes])
// Supprimer l'ensemble de la mémoire
EFFACER ENSEMBLE("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 MODIFIER SELECTION ou VISUALISER 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 MODIFIER SELECTION ou VISUALISER 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 FIXER SORTIE([Personnes];"Display") ` Choisir le formulaire sortie
TOUT SELECTIONNER([Personnes]) ` Sélection de toutes les personnes
ALERTE("Appuyer Ctrl ou Commande + Clic pour sélectionner des enregistrements.")
VISUALISER SELECTION([Personnes]) ` Afficher les personnes
UTILISER ENSEMBLE("UserSet") ` Utiliser les personnes sélectionnées
ALERTE("Vous avez choisi les personnes suivantes.")
VISUALISER 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, REUNION 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 APPLIQUER A SELECTION, SUPPRIMER SELECTION, TABLEAU VERS SELECTION et JSON VERS 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 FIXER RECHERCHE ET VERROUILLAGE).
LockedSet indique quels enregistrements étaient verrouillés lors de l'exécution d'une commande.
Produit : 4D
Thème : Ensembles
Nom intl. : Sets
4D - Langage ( 4D v20)
4D - Langage ( 4D v20.1)
4D - Langage ( 4D v20.2)
4D - Langage ( 4D v20.3)
4D - Langage ( 4D v20.4)
4D - Langage ( 4D v20.5)
4D - Langage ( 4D v20.6)