IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Conditions avec NULL [WD19]


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut Conditions avec NULL
    Bonjour,

    J'ai un soucis sur une condition dont les composantes peuvent être NULL.
    En fait je compare une combo : 'Combo_Type' (Texte, avec l'option "renvoyer NULL si vide") à une rubrique d'un fichier : 'FIC.Type' (chaine, avec Null activé et en valeur par défaut)
    Le problème c'est que pour les fichiers, windev met la propriété ..Null à vrai lorsque la rubrique est NULL. Hors pour la combo il semble que ce soit la valeur contenue qui soit NULL.

    Donc quand je fais une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Si COMBO_Type <> FIC.Type ALORS ...
    Cela ne fonctionne jamais car FIC.Type vaut "" même si je l'affecte à Null (en gros l'affectation FIC.type=Null ne fonctionne pas)
    Donc pour contrer cela je créé un variant vType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vType= FIC.type..Null=vrai? Null ELSE FIC.Type
    Mais lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si COMBO_Type <> vType ALORS ...
    cela ne fonctionne pas non plus. Pourtant en mode débug on voit bien que COMBO_Type vaut <NULL> et vType vaut <NULL> également, mais la condition reste vrai et je rentre dans le SI...
    Pourtant si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si COMBO_Type=Null _ET_ vType<>Null ALORS ...
    cela fonctionne !!

    Quelqu'un aurait-il une solution car la j'ai relu l'aide plusieurs fois, je ne vois pas comment faire, j'ai dû fait une chose horrible à mon goût pour que cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (COMBO_Type=Null _ET_ vType<> Null) _OU_...
    (COMBO_Type<>Null _ET_ vType=Null) _OU_...
    (COMBO_Type<>Null _ET_ vType<>Null _ET_ COMBO_Type<>vType) _OU_...
    Mon but final étant de rentrer dans le SI uniquement si COMBO_Type et FIC.Type sont différents (NULL y compris)(dans le cadre d'une vérification après saisie)

    J’espère que PCSOFT à prévu une autre solution pour ce genre de cas...

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 453
    Points
    2 453
    Par défaut
    Bonjour,

    WinDev et le NULL ... !

    Pour une rubrique, ne testez et n'affectez jamais NULL mais bien la propriété ..NULL = VRAI.
    De mémoire, c'est clairement signalé dans l'aide.

    Honnêtement, pour la combo, je ne sais pas. Je ne me souviens pas avoir testé le NULL sur une Combo et je n'ai pas WinDev à disposition d'où je vous réponds.

    Donc, essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI FIC.Type..NULL = VRAI _ET_ COMBO_Type = NULL
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI FIC.Type..NULL = VRAI _ET_ COMBO_Type = ""
    Bon travail

    Hemgé

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Merci pour votre réponse, mais ce que vous proposez c'est exactement ce que j'ai fait au final, mais cela prend 3 lignes si on veut couvrir tous les cas. + la ligne au départ qui permet d'attribuer vType.
    Ce que je souhaiterai c'est une solution en une ligne du genre : "Si COMBO_Type <> vType ALORS..." cela devrait fonctionner. Que ça ne fonctionne pas avec FIC.Type c'est normale (car il faut passer par ..Null) je l'ai montré et vous le confirmez également. Par contre avec vType cela devrait marcher, c'est ça que je ne comprend pas !!

    si vous preferez sans vType le code serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (COMBO_Type=Null _ET_ FIC.Type..vrai=Faux) _OU_...
    (COMBO_Type<>Null _ET_ FIC.Type..vrai=Vrai) _OU_...
    (COMBO_Type<>Null _ET_ vType<>Null _ET_ COMBO_Type<>vType) _OU_...

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bon on vient de me donner la réponse sur le forum WinDev :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI ChaîneCompare(FIC.Type,COMBO_Type..Valeur,ccNormal)<>0
      Trace("Valeur différentes.....")
    SINON
      Trace("Valeur identique......")
    FIN
    Ça marche bien avec cette fonction du coup au lieu de mettre SI COMBO_Type <> FIC.type ALORS... on mettra SI ChaîneCompare(COMBO_Type, FIC.Type)<>0 ce qui est quand même plus simple que ce que j'avais pondu pour contrer le défaut...

  5. #5
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 167
    Points
    167
    Billets dans le blog
    1
    Par défaut Toujours éviter la valeur Null
    De tradition et de longtemps en arrière, pour des raisons de compatibilité avec d'autres bases de données et types de variable, il est recommandé de fuir comme la peste cette fonction Null.
    Quelles que soit les circonstances.
    D'autant que le Null est différent du zéro.
    Cordialement

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bonjour Jdsetls,

    De tradition et de longtemps en arrière, pour des raisons de compatibilité avec d'autres bases de données et types de variable, il est recommandé de fuir comme la peste cette fonction Null.
    Quelles que soit les circonstances.
    D'autant que le Null est différent du zéro.
    Cordialement
    tu veux dire qu'il faut à la fois ne pas mettre de Null dans les fichier, et également dans les combos ?
    car le null est quand même bien util lorsque 0 est une valeur à prendre en compte (cas de calculs mathématiques par ex), ou lorsque l'utilisateur doit rentrer 0. Il faut bien différencier un 0 entré volontairement d'une combo vide, hors les 2 renverrons la même chose ! c'est pour ça que j'utilise le null principalement, car je trouve que windev gère mal la vérification des saisies.

  7. #7
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 167
    Points
    167
    Billets dans le blog
    1
    Par défaut Exemple de problèmes avec une valeur nulle
    Bonjour,
    Le Null se prête mal aux comparaisons et il ne faudra ni le confondre avec une chaîne vide (= "") ni avec la valeur '0'.
    Il s'agit plutôt de l'absence de quelque chose d'attendu. Comme différents systèmes, code ANSI et concurrents, fichiers; programmes, traitements divers gèrent différemment ce Null; pour ne pas dire bizarrement, je conseille de l'exiler.

    Voici un exemple avec la lecture d'un fichier Excel et transfert de fiches :
    La comparaison du code et du fichier Excel montre des particularités qu’il s’agit d’intégrer. Ici les cellules vides sont ignorées au lieu de provoquer une entrée nulle. Par ailleurs ces résultats ont été obtenus à partir d’un fichier Excel fermé.
    ...
    ... Lorsqu’on clique sur un mot avant d’avoir cliqué sur une réponse, du moins la première fois après que le programme ait été appelé, les indirections montrent leur fragilité en affirmant être destinées à traiter des chaînes et non pas des nombres. Le présumé nom de variable étant vide équivaut à zéro. La variable Babouin1 est à Null.

    Toute gestion d’exception est ignorée, bien que Cas exception soit suivi de Retour dans une gestion par programme. Exaspéré, nous avons simplement mis en première ligne :
    SI babouin1 = Null ALORS RETOUR

    Cela tient depuis lors en attendant mieux, à supposer que ‘mieux’ existe.
    ...
    Si un variant est vide, on souhaite ne rien afficher. Cependant le variant s’entête à afficher une valeur zéro sur une chaîne vide. Rien n’y fait malgré l’imagination du programmeur. Dans le contexte le variant a beaucoup vécu et devrait être vide, mais le système en décide autrement. Le problème est réglé en rempla-çant le variant par un type chaîne. Ainsi en va-t-il de la fatigue du programmeur.
    Bref rien n'est stabilisé.

    Ce qui précède est extrait de mes notes.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete Condition VraiFaux Avec Null
    Par scado dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/07/2010, 15h34
  2. Réponses: 1
    Dernier message: 17/07/2007, 16h45
  3. Conditions avec liste de tuples
    Par Robert999 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/07/2004, 12h01
  4. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 10h04
  5. Clause IN avec null
    Par Pari dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2004, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo