PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

PV

  • Type Variant et NULL
  • Type d'un variant
  • Propriété Classe sur les variants
  • Sous-éléments nommés
  • Sous-éléments indicés
  • Imbrications des sous-éléments nommés et indicés
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Le type Variant permet de :
  • stocker n'importe quelle valeur de type simple : booléen, numérique (Monétaire, Réel, Entier, ...), caractères et chaîne de caractères, date (Date, Heure, DateHeure et Durée), ...
  • stocker des sous-éléments nommés ou indicés.
  • stocker n'importe quelle valeur de type complexe : structures, classes, types avancés, tableaux, tableaux associatifs, files, piles et listes.
  • manipuler la valeur NULL dans le WLangage.
  • stocker des interactions avec les objets ActiveX et la programmation Automation.
Exemple
nValeur est un Variant = 10
nValeur = SAI_Saisie1
nValeur = Client.Nom
Syntaxe

Déclaration et affectation d'un type Variant Masquer les détails

<Nom de la variable> est un Variant = <Valeur>

OU


 <Nom de la variable> est un Variant
 <Nom de la variable> = <Valeur>
<Nom de la variable> :
Nom de la variable à déclarer.
<Valeur> :
Valeur à affecter à la variable. Une variable de type variant peut être affectée avec :
  • n'importe quelle valeur littérale,
  • le contenu d'une variable,
  • le contenu d'un champ de type simple,
  • le contenu d'une rubrique.
Remarques

Type Variant et NULL

Pour spécifier qu'une variable de type Variant ne contient pas de valeur, il suffit d'utiliser la constante NULL.
Remarques :
  • pour un type variant, NULL signifie "Pas affecté".
  • pour un type numérique, NULL signifie "égal 0".
nVal est un entier
SI nVal = Null ALORS ... // le test renvoie Vrai car nVal=0
nVal = 5
SI nVal = Null ALORS ... // le test renvoie Faux car nVal=5
vVal est un Variant
SI vVal = Null ALORS ... // renvoie Vrai car le variant n'est pas affecté
vVal = 0
SI vVal = Null ALORS ... // renvoie Faux car le variant est affecté  
// avec un entier de valeur 0
vVal = 5
SI vVal = Null ALORS ... // renvoie Faux car le variant est affecté
// avec un entier de valeur 5
vVal est un Variant
vVal = Null
SI vVal = 0 ALORS ... // renvoie Vrai car une variable non affectée
// et une valeur ne sont pas comparables, Vrai est retourné par convention

Type d'un variant

Il est possible de connaître le type d'un variant grâce à la propriété Type. La propriété Type permet de connaître le type de la valeur stockée dans la variable.
Remarques :
  • La fonction VariantConvertit permet de convertir le type de la valeur stockée dans une variable de type Variant.
  • La fonction TypeVar permet de connaître le type d'une variable (type Variant pour une variable Variant).
vVal est un Variant
TypeVar(vVal)  // renvoie le numéro du type variant
vVal..Type     // renvoie le type de la valeur stockée dans le variant

Propriété Classe sur les variants

La propriété Classe sur les variables de type Variant permet d'obtenir le nom de la classe utilisée si le variant correspond à une classe.

Sous-éléments nommés

Il est possible d'utiliser directement et sans déclaration des membres sur une variable de type Variant.
Lors d'une affectation d'un membre, si le membre n'existe pas, il est automatiquement créé ; si le membre existe déjà, il est modifié.
Exemple :
Personne est un Variant
Personne.Nom = "DUPONT"
Personne.Prénom = "Michel"
Lors d'une lecture d'un membre, si le membre n'existe pas, il n'est pas créé. Il est possible de tester la présence d'un membre grâce à la propriété Existe.
Exemple :
Personne est un Variant
SI PAS Personne.Nom..Existe ALORS
Erreur("Le nom n'a pas été renseigné")
FIN
Si le membre n'existe pas, la valeur renvoyée est Null. Pour tester explicitement la valeur Null, plusieurs possibilités :
  • utiliser la propriété Valeur.
    Exemple :
    Elément est un Variant
    SI Elément.MembreInexistant..Valeur = Null ALORS
    ...
    FIN
  • tester directement la valeur Null. Exemple :
    Elément est un Variant
    SI Elément.MembreInexistant = Null ALORS
    ...
    FIN
Les sous-éléments nommés peuvent être manipulés grâce aux propriétés suivantes :
ExisteRenvoie :
  • Vrai si l'élément existe,
  • Faux si l'élément n'existe pas. L'élément n'est pas créé.
NomNom de l'élément
TypeType de l'élément (mêmes valeurs que TypeVar).
ValeurValeur de l'élément.

La propriété Membre sur les variables de type Variant permet d'obtenir le tableau des éléments nommés. Ce tableau peut être manipulé par POUR TOUT, la propriété Occurrence, l'opérateur [ ], ...
Il est également possible de supprimer un élément. Exemple :
o est un JSON
o.m = 1
o.n = 2
Trace(o)
 
x est un Variant = o
Supprime(x..Membre, 1)
Trace(x) // Le membre m a été supprimé.

Sous-éléments indicés

Il est possible d'utiliser directement la variable de type variant comme un tableau de variants. L'utilisation de l'opérateur [ ] crée automatiquement le tableau.
Exemple :
Jours est un Variant
Jours[1] = "lundi"
Jours[2] = "mardi"
Jours[3] = "mercredi"
Jours[4] = "jeudi"
Jours[5] = "vendredi"
Jours[6] = "samedi"
Jours[7] = "dimanche"
Les opérations des tableaux peuvent être directement effectuées sur la variable de type Variant : POUR TOUT, Occurrence, opérateur [ ], ...

Imbrications des sous-éléments nommés et indicés

Les sous-éléments nommés et les sous-éléments indicés étant eux-mêmes de type Variant, il est possible de les imbriquer récursivement.
Exemple :
Bibliotheque est un Variant
Bibliotheque.Livre[1].Titre = "Les trois mousquetaires"
Bibliotheque.Livre[1].Auteur = "Alexandre Dumas"
Bibliotheque.Livre[2].Titre = "Les misérables"
Bibliotheque.Livre[2].Auteur = "Victor Hugo"
Version minimum requise
  • Version 14
Documentation également disponible pour…
Commentaires
Type incompatible jusqu'en V26
cas particulier non documenté sur le type variant :

"stocker n'importe quelle valeur de type complexe : structures, classes, types avancés, tableaux, tableaux associatifs, files, piles et listes..."

est inexact. Les variables de type procédure ne peuvent être affectées à un variant jusqu'à la version 26. J'ai signalé ce cas au ST => les implémentations nécessaires dans une prochaine version ???
Marck
30 sep. 2021
Propriété ..Type d'un variant : Valeurs particulières
Si le variant n'est pas initialisé, alors il est à Null, et la propriété ..Type retourne la constante wlVide (0) .

Dans le cas d'un variant avec Sous-éléments nommés, la propriété ..Type retourne la constante wlVariantObjet (143).

Dans le cas d'un variant avec Sous-éléments indicés, la propriété ..Type retourne la constante wlVariantTableau (142).

Pour obtenir la liste des valeurs possibles pour la propriété ..Type d'un variant, voir la page de documentation " Type (propriété) ".
https://doc.pcsoft.fr/fr-FR/?2510131&name=type_propriete
=JBO=
24 oct. 2019
Variant avec Sous-éléments nommés : Ajouter un membre par indirection
Lorsqu'on veut ajouter un membre dont le nom n'est pas connu au moment de la compilation (le nom du membre est donné dans une variable de type chaîne), alors il faut utiliser une indirection.
Pour illustrer, on peut compléter l'exemple donné plus haut:

Personne est un Variant
Personne.Nom = "DUPONT"
Personne.Prénom = "Michel

sNomMembre est une chaîne = "Age"
nValeurMembre est un entier= 30
{"Personne."+sNomMembre} = nValeurMembre

:-)
=JBO=
26 juil. 2019
Tableaux de structures
Attention, à ce jour, un variant ne peut pas recevoir un tableau de structures. (Windev 24 v01F240075n)
Nathan RENAULT
05 juil. 2019
Propriété ..Classe sur les variants
La propriété ..Classe sur les variables de type Variant permet d'obtenir le nom de la classe ou de la structure utilisée, si le variant correspond à une classe ou à une structure.
=JBO=
25 oct. 2015