|
Connaître le type d'un élément |
Started by Nicolas, Jun., 02 2025 11:55 AM - 5 replies |
| |
| | | |
|
| |
Posted on June, 02 2025 - 11:55 AM |
Hello,
Il n'y pas un moyen de savoir si "INT_sansNom1" est un champ ou une rubrique ou une variable ? Car le code ci-dessous renvoi VRAI aux 2 conditions :/
SI INT_SansNom1..Type = typInterr ALORS Trace("typInterr") SI INT_SansNom1..Type = hRubEntier4 ALORS Trace("hRubEntier4")
Cordialement, Nicolas |
| |
| |
| | | |
|
| | |
| |
Registered member 949 messages |
|
Posted on June, 02 2025 - 3:17 PM |
| |
| |
| | | |
|
| | |
| |
Posted on June, 02 2025 - 3:48 PM |
Bonjour Cédric,
C'est justement le drame. Impossible de savoir vraiment ce qu'est vraiment INT_SansNom1 car la propriété ..Type peut avoir la même valeur pour des types différents.
C'est dingue que la constante typInterr vaut par exemple la même valeur que hRubEntier4 (soit 5) alors qu'un interrupteur n'a rien à voir avec une rubrique.
J'espère que j'arrive à être assez clair.
Nicolas. |
| |
| |
| | | |
|
| | |
| |
Registered member 20 messages |
|
Posted on June, 02 2025 - 4:51 PM |
Bonjour, La fonction ChampExiste() semble être utile dans ton cas. NN12 |
| |
| |
| | | |
|
| | |
| |
Registered member 5 messages |
|
Posted on June, 02 2025 - 7:01 PM |
Salut,
la propriété ..type dans votre cas indique le type contenu dans un élément et non le type de l'élément lui même. Voir https://doc.pcsoft.fr/?2510131&name=type_propriete
C'est pour ça que plusieurs constantes peuvent avoir la même valeur, vu que vous êtes sensé déjà savoir si ce que vous manipulez est une rubrique (constantes hRubXXX), un champ (constantes typXXX), etc ...
Dans votre cas je ne vois pas de méthode miracle, à part faire une fonction qui discrimine via des ChampExiste, des RécupèreDéfinition et des RécupèreDéfinitionVariable (pas super propre...) https://doc.pcsoft.fr/fr-FR/?1410090635 https://doc.pcsoft.fr/fr-FR/?1000019333 https://doc.pcsoft.fr/fr-FR/?1000019559
Question subsidiaire : Dans quel but avez-vous besoin de faire ça ? Vu que votre exemple n'utilise pas d'indirection, Windev connait le type de INT_SansNom1 à la compilation, et ce type ne peut pas changer.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Registered member 1 message |
|
Posted on June, 03 2025 - 9:23 AM |
Bonjour,
Je vous remercie de vos réponses,
C'est dans le but de gérer le NULL "simplement" et sans activer les nullables. L'impact pour activer les nullables dans le projet est trop important.
Par conséquent, comparer 2 éléments NULL est possible mais pas si simple. Entre les rubriques où le NULL est géré comme une propriété , le Variant ou les champs qui le gère par valeur, j'en suis arrivé à écrire une procédure globale qui doit comparer 2 éléments quels qu'ils soient (rubrique, champ ou variant)
Problème. La façon de tester le NULL est différents selon rubrique, champ ou variant. rubrique = ..NULL (propriété) champ, Variant = NULL (valeur)
J'ai donc écrit pgEstIdentique() qui fonctionne très bien mais l'utilisation de l'Exception pour deviner l'élément est trop couteux en performance. Et comme il s'agit d'une procédure globale dont l'élément à tester arrive par param d'entrée, ChampExiste() n'est pas possible. L'idéal était de tester les 2 éléments avec la propriété Type. Malheureusement...
Procedure pgEstIdentique(vpElementA, vpElementB)
vVariantA, vVariantB est un Variant
QUAND EXCEPTIONEXCEPTION DANS vpElementA..Null vVariantA = vpElementA.Null ? Null SINON vpElementA FAIRE vVariantA = vpElementA = Null ? Null SINON vpElementA FIN
QUAND EXCEPTIONEXCEPTION DANS vpElementB..Null vVariantB = vpElementB.Null ? Null SINON vpElementB FAIRE vVariantB = vpElementB = Null ? Null SINON vpElementB FIN
SI (PAS vVariantA = Null _ET_ PAS vVariantB = Null _ET_ vVariantA = vVariantB) _OU_ ... (vVariantA = Null _ET_ vVariantB = Null) ALORS RENVOYER Vrai SINON RENVOYER Faux FIN Message modified, June, 03 2025 - 9:33 AM |
| |
| |
| | | |
|
| | | | |
| | |
|