Discussion: Variable avec comportement différent [Débutant]

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 127
    Points : 130
    Points
    130

    Par défaut Variable avec comportement différent

    Bonjour à tous
    voila mon code si la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ComboBox7.SelectedValue = Nothing
    n'est pas rempli alors la deuxième partie fonctionne

    mais si le code passe par le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ComboBox7.SelectedValue = Nothing
    alors la deuxiéme partie ne fonctionne pas mais ne plante pas
    c'est la tout mon problème car la varible Result renvoi bien dans les 2 cas le numero du dernier ID

    Première partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     If ComboBox7.SelectedValue = Nothing Then
     
                Dim RqInsert As String = "Insert into T_Unites_Pds( U_PDS_UNITE ) values ('" & ComboBox7.Text & "')"
                Dim CmdInsert As New SqlCommand(RqInsert, Connexion)
     
                MsgBox("Il y a eu " & CmdInsert.ExecuteNonQuery() & " lignes mises à jour")
     
                CmdInsert.Dispose()
            End If
    Deuxième partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim CmdLastId As New SqlCommand("Select Ident_Current('T_Unites_Pds')", Connexion)
            'Dim Result = CType(CmdLastId.ExecuteScalar(), Long)
            Dim Result = CmdLastId.ExecuteScalar()
            ComboBox7.SelectedValue = Result
            MsgBox(ComboBox7.SelectedValue)
    Donc voila le mystère si par exemple le dernier ID = 45
    dans les deux cas "Result" a bien la valeur 45 mais si le code passe par la première partie
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(ComboBox7.SelectedValue)
    renvoi null

    si vous voyez ou se trouve le problème merci de me mettre sur la voie

  2. #2
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 231
    Points : 8 826
    Points
    8 826
    Billets dans le blog
    20

    Par défaut

    Bonjour,

    À première vue et sans avoir testé.

    Il semblerait que tu n'aies pas, soit dans ton code, soit dans ton myproject :

    et/ou

    (c'est une des deux)

    Parce que tu sembles avoir droit au transtypage automatique hérité des BASIC d'origine. Et quand une variable n'est pas typée, VB va convertir vers le type qui semble convenir; si ce sont juste des chiffres, il va en faire un numérique, des lettres, un texte etc.

    Donc, en principe, si dans ta première partie tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ComboBox7.SelectedValue = 0 Then
    Ça pourrait marcher, en supposant que ton résultat soit obligatoirement un nombre


    Dans ta deuxième partie, tu as:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Result = CmdLastId.ExecuteScalar()
    Ton resultat est de type objet, et peut avoir une valeur nothing. Donc, VB a probablement converti tom null en nothing pour faire passer le test...

    La morale de l'histoire, toujours typer ses variables. Et faire les conversions explicitement, c'est encore mieux que de laisser faire automatiquement les transtypages.

    Toujours de mémoire, tu peux vérifier le type de résultat avec GetType.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 127
    Points : 130
    Points
    130

    Par défaut

    Bonjour et merci clementmarcotte,
    je n'ai effectivement pas de "Option stric ou expicit", je vais maitenant chercher avec les pistes que tu me donne
    et lorsque j'aurai trouvé, je mettrai ma solution et placerai le post en Résolu.
    Encore merci.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 127
    Points : 130
    Points
    130

    Par défaut

    Bon désolé, je ne m'en sort pas !

    J'ai ajouté en haut de ma Form1 "Option Explicit On"

    Voici la façon de remplir ma combobox7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim RqU_Pds As String = "SELECT * FROM T_Unites_Pds"
            Dim CmdU_Pds As New SqlCommand(RqU_Pds, Connexion)
            Dim AdpU_Pds As New SqlDataAdapter(CmdU_Pds)
            Dim DSU_Pds As New DataSet
     
    AdpU_Pds.Fill(DSU_Pds, "TbU_Pds")
     
    ComboBox7.DisplayMember = "U_PDS_UNITE"
                ComboBox7.ValueMember = "ID_U_PDS"
                ComboBox7.DataSource = DSU_Pds.Tables("TbU_Pds")

    Le Cas 1 signifie que je passe par l'ajout de ligne "Première partie du code" Voir premire post

    Le Cas 2 signifie que je ne passe pas par l'ajout de ligne "Première partie du code" je n'ajoute pas de nouvelle ligne dans la BDD

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    'Fonctionne dans les 2 cas
            Dim Test1 = 40
            ComboBox7.SelectedValue = Test1
            MsgBox(ComboBox7.SelectedValue)
            'Fonctionne dans les 2 cas
            Dim Test2 As Int32 = 41
            ComboBox7.SelectedValue = Test2
            MsgBox(ComboBox7.SelectedValue)
            'Fonctionne dans les 2 cas
            ComboBox7.SelectedValue = 42
            MsgBox(ComboBox7.SelectedValue)
     
     
            'Ne fonctionne que dans le Cas 2
            Dim CmdLastId As New SqlCommand("Select Ident_Current('T_Unites_Pds')", Connexion)
     
            Dim Cmdtip As Type = CmdLastId.ExecuteScalar().GetType
            'Cmdtip me renvoi {Name = "Decimal" FullName = "System.Decimal"}
     
            Dim Result1 = Convert.ToInt32(CmdLastId.ExecuteScalar())
            ComboBox7.SelectedValue = Result1
            'Cas 2 le comportement est correct
            Dim ComboValTip1 As Type = ComboBox7.SelectedValue.GetType
            'Cas 2 : ComboValTip1 me renvoi {Name = "Int32" FullName = "System.Int32"}
     
            'Cas 1 : plante et me revoi
            'System.NullReferenceException
            'La référence d'objet n'est pas définie à une instance d'un objet.'
            'System.Windows.Forms.ListControl.SelectedValue.get retournée Nothing.
     
     
            Dim Result2 = CType(CmdLastId.ExecuteScalar(), Int32)
            ComboBox7.SelectedValue = Result2
            'Cas 2 le comportement est correct
            Dim ComboValTip2 As Type = ComboBox7.SelectedValue.GetType
            'Cas 2 :ComboValTip2 me renvoi {Name = "Int32" FullName = "System.Int32"}
            MsgBox(ComboBox7.SelectedValue)
    j'ai essayé beaucoup d'autres choses (trop long de toutes les présenter dans ce post)
    mais rien ne fonctionne je ne sais plus quoi chercher alors ???

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 127
    Points : 130
    Points
    130

    Par défaut

    Alleluia !!
    Bon voila j'ai enfin trouvé
    depuis le début ça fonctionne le problème c'etait que je ne remettais pas à jour la combobox avec le nouvelle item
    il ne pouvais donc pas le trouver (je craint quand mème!)
    Merci à clementmarcotte et à tous ceux qui font vivre ce super site.

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

Discussions similaires

  1. Macro avec comportements différents
    Par Hayaou dans le forum Excel
    Réponses: 1
    Dernier message: 13/07/2016, 18h35
  2. Raphael.js et comportement différent avec variable GET
    Par oraya dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/11/2015, 22h14
  3. Liste déroulante avec comportement différent suivant les navigateurs
    Par smfoa dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 30/01/2011, 11h55
  4. Exception avec comportement différent sur 2 machines
    Par sybaris dans le forum Windows Forms
    Réponses: 0
    Dernier message: 13/03/2009, 10h49
  5. Réponses: 4
    Dernier message: 13/06/2007, 09h45

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