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

VB.NET Discussion :

Problème avec le IIf


Sujet :

VB.NET

  1. #1
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut Problème avec le IIf
    Bonjour,

    J'ai ces deux lignes de code.
    Pour moi elles font la même chose, une avec un If Else End If, l'autre avec un IIF
    Mais quand j'exécute le code et que CType(ds.Tables("T").Rows.Find(z)(Column + 1), Decimal)=0D le If va bien dans la clause Else mais le IIF va dans la cause True et j'obtiens une division par 0.
    Avez-vous déjà rencontrer des problèmes avec le Iif?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If (CType(ds.Tables("T").Rows.Find(z)(Column + 1), Decimal) <> 0) Then
          row(Column + 1) = CType(ds.Tables("T").Rows.Find(x)(Column + 1), Decimal) / CType(ds.Tables("T").Rows.Find(z)(Column + 1), Decimal)
    Else
          row(Column + 1) = 0
    End If
     
     
    row(Column + 1) = IIf(CType(ds.Tables("T").Rows.Find(z)(Column + 1), Decimal) <> 0, CType(ds.Tables("T").Rows.Find(x)(Column + 1), Decimal) / CType(ds.Tables("T").Rows.Find(z)(Column + 1), Decimal), 0)
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    C'est parce que le IIF évalue toute ces composantes (--> valeur si vrai et valeur si faux), avant de tester.

    Essayes ce code, tu verras, c'est impressionant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Public Class testIIF
     
        Public ReadOnly Property A() As Integer
            Get
                MsgBox("Eval A")
                Return 1
            End Get
        End Property
        Public ReadOnly Property B() As Integer
            Get
                MsgBox("Eval B")
                Return 2
            End Get
        End Property
     
    End Class
     
    ' Et dans une form ou autre
            Dim t As New testIIF
            Dim d As Decimal = 0
            Dim c As Decimal
            c = CType(IIf(d > 0, t.A, t.B), Decimal)
    A proscrire dans ton cas donc ...

    D'ailleurs, c'est de maniére générale pas génial ce Iif, même si je l'utilise aussi !

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Merci pour ton explication et ton exemple

    Je pensais pas que c'était si bête un IIF
    C'est quand même moche qu'il évalue les deux clauses...

    Au moins, je ne suis pas fou, je vais les remplacer par des if else end if mais bon je trouvais ca plus joli d'écrire le code en 1 ligne


    Encore Merci
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  4. #4
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Non je te conseille de ne pas utiliser le iif, car il a été remplacé par le If Else ElseIf et c'est plus propre même si c'est codé sur 3 lignes ! De plus, attention au risque d'erreur en utilisant le iif...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

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

Discussions similaires

  1. Problème avec fonction iif
    Par djelloharmel dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 06/02/2012, 15h50
  2. [AC-2003] Problème de format avec VraiFaux (iif)
    Par Marie33 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/10/2011, 11h05
  3. [CR XI] Problème avec IIF
    Par tornade69 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 31/03/2009, 00h59
  4. problème avec iif
    Par lesafir dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 14/06/2007, 15h19
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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