Aller au contenu principal
Version: Next

SELECTION RANGE TO ARRAY

SELECTION RANGE TO ARRAY ( début ; fin {; leChamp | laTable ; tableau} {; leChamp | laTable2 ; tableau2 ; ... ; leChamp | laTableN ; tableauN} )

ParamètreTypeDescription
débutIntegerNuméro de l'enregistrement sous-sélectionné à partir duquel commencer la copie des données
finIntegerNuméro de l'enregistrement sous-sélectionné auquel arrêter la copie des données
leChamp | laTableChamp, TableChamp à utiliser pour récupérer les données ou Table à utiliser pour récupérer les numéros d'enregistrements
tableauArrayTableau recevant les données ou les numéros d'enregistrements

Description

SELECTION RANGE TO ARRAY crée un ou plusieurs tableau(x) et y copie des données en provenance des champs de la sélection courante ou les numéros des enregistrements de la sélection courante.

A la différence de SELECTION TO ARRAY qui s'applique à l'intégralité de la sélection courante, SELECTION RANGE TO ARRAY s'applique uniquement à une sous-sélection d'enregistrements, définie par les paramètres début et fin.

Vous devez passer dans les paramètres début et fin des numéros d'enregistrements sous-sélectionnés s'inscrivant dans l'intervalle défini par la formule 1 <= début <= fin <= Enregistrements trouves ([...]).

Si vous passez des numéros correspondant à 1 <= début = fin <= Enregistrements trouves ([...]), ce sont les champs ou les numéros des enregistrements de la sélection courante répondant à début = fin qui seront chargés.

Si vous passez des numéros d'enregistrements incorrects, vous obtiendrez les résultats suivants :

  • Si fin > Enregistrements trouves ([...]), la commande retourne toutes les valeurs, à partir de l'enregistrement sous-sélectionné spécifié par début jusqu'au dernier enregistrement sous-sélectionné.
  • Si début > fin, la commande ne retourne que les valeurs de l'enregistrement début.
  • Si les deux paramètres sont incompatibles avec la taille de la sous-sélection, les tableaux sont retournés vides

Comme SELECTION TO ARRAY, SELECTION RANGE TO ARRAY s'applique à la sélection de la table passée en paramètre. La commande peut réaliser les opérations suivantes :

  • Charger les valeurs d'un ou plusieurs champs,
  • Charger les numéros des enregistrements, à l'aide de la syntaxe ...;[table];tableau;...
  • Charger des valeurs de champs liés, s'il existe un lien automatique de N vers 1 entre les tables, ou si vous avez préalablement appelé la commande SET AUTOMATIC RELATIONS pour rendre automatiques les liens manuels N vers 1 (dans les deux cas, les valeurs peuvent être chargées à travers plusieurs niveaux de liens N vers 1 entre les tables).

Chaque tableau est typé en fonction du type de champ.

A noter toutefois que SELECTION RANGE TO ARRAY appliquée à un champ de type Heure créera un tableau de type Heure uniquement si le tableau n’a pas déjà été défini dans un autre type. Par exemple dans le contexte ci-dessous, le tableau monTab conservera le type Entier long :

 ARRAY LONGINT(monTab;0)
 SELECTION RANGE TO ARRAY([maTable]monChpHeure;monTab)

Si vous chargez les numéros des enregistrements, ils sont copiés dans un tableau de type Entier long.

Note : Il est possible d’appeler la commande SELECTION RANGE TO ARRAY avec uniquement les paramètres début et fin. Cette syntaxe particulière peut être employée pour lancer sur une sélection limitée l’exécution d’une série différée de commandes SELECTION TO ARRAY utilisant le paramètre * (cf. exemple 4).

4D Server : La commande SELECTION RANGE TO ARRAY est optimisée pour 4D Server. Chaque tableau est créé sur le serveur puis envoyé en totalité sur le poste client.

ATTENTION : SELECTION RANGE TO ARRAY peut créer des tableaux de taille importante, en fonction de l'intervalle défini par début et fin, ainsi que du type et de la taille des données à charger. Comme les tableaux résident en mémoire, il peut être utile de tester la taille des tableaux créés après l'exécution de la commande, ou d'utiliser une méthode projet d'interception d'erreurs, installée par la commande ON ERR CALL.

Une fois la commande correctement exécutée, la taille des tableaux résultants est égale à (fin-début)+1 — sauf si le paramètre fin est supérieur au nombre d'enregistrements dans la sélection. Dans ce cas, les tableaux contiennent (Enregistrements trouves([...])-début)+1 éléments.

Exemple 1

La ligne de code suivante utilise les 50 premiers enregistrements de la sélection courante de la table [Factures]. Les valeurs du champ [Factures]RéfFacture et du champ lié [Clients]RéfClient sont chargées.

 SELECTION RANGE TO ARRAY(1;50;[Factures]RéfFacture;tlRéfFacture;[Clients]RéfClient;tlRéfClient)

Exemple 2

Les lignes de code suivantes utilisent les 50 derniers enregistrements de la sélection courante de la table [Factures]. Les numéros d'enregistrements de la table [Factures] ainsi que ceux de la table liée [Clients] sont chargés :

 lTailleSél:=Records in selection([Factures])
 SELECTION RANGE TO ARRAY(lTailleSél-49;lTailleSél;[Factures];taFactureNum;[Clients];taClientNum)

Exemple 3

Les lignes de code suivantes vous permettent de travailler séquentiellement avec des portions de 1000 enregistrements d'une sélection importante qui ne peut pas être chargée dans des tableaux en une seule fois :

 lMaxPage:=1000
 lTailleSél:=Records in selection([Annuaire])
 For($lPage ;1;1+((lTailleSél-1)\lMaxPage))
  // Charger les valeurs et/ou les numéros d'enregistrements
    SELECTION RANGE TO ARRAY(1+(lMaxPage*($lPage-1));lMaxPage*$lPage;...;...;...;...;...;...)
  // Faire quelque chose avec les tableaux
 End for

Exemple 4

Utilisation des 50 premiers enregistrements courants de la table [Factures] pour charger divers tableaux, en exécution différée :

     // Instructions différées
 SELECTION TO ARRAY([Factures]RefFacture;tLRefFac;*)
 SELECTION TO ARRAY([Factures]Date;tDDateFac;*)
 SELECTION TO ARRAY([Clients]RefClient;tLRefCli;*)
     // Exécution des instructions différées
 SELECTION RANGE TO ARRAY(1;50)

Voir aussi

ON ERR CALL
SELECTION TO ARRAY
SET AUTOMATIC RELATIONS