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 :

Variable utilisé avant d’être affecté


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut Variable utilisé avant d’être affecté
    Bonjour , j'ai ce message d'erreur que j'ai traduit de l'anglais : Variable utilisé avant d’être affecté
    Ce n'est pas vraiment une erreur car mon programme fonctionne mais la variable "msg_admin_objet" est souligné en vert avec le message ci dessus :
    voila l'extrait de mon programme, je ne comprend pas comment je pourrais faire pour ne pas avoir cette erreur !

    Code vb : 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
    For Each ligne As String In TextBox1.Text.Split(ControlChars.NewLine) 'pour chaque ligne de la textbox je sépare les caractéres
     
                    'objet
                    Dim debut_obj As Integer = TextBox1.Text.IndexOf("Objet : ") + 8
                    Dim fin_obj As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_obj)
                    Dim longeur_obj As Integer = fin_obj - debut_obj
                    msg_admin_objet = TextBox1.Text.Substring(debut_obj, longeur_obj)
                Next
     
     
                'enregistrement du message administratif dans la base de donnée
                Dim MyNewRow As DataRow = dst_admin.Tables("administratif").NewRow
     
                MyNewRow("numero") = msg_admin_num
                MyNewRow("date") = msg_admin_date
                MyNewRow("heure") = msg_admin_heure
     
                'Le problème est ici
                MyNewRow("objet") = msg_admin_objet

  2. #2
    Invité
    Invité(e)
    Par défaut
    C'est normal tu utilise la variable "msg_admin_objet" avant de la déclarer.

    A la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg_admin_objet = TextBox1.Text.Substring(debut_obj, longeur_obj)
    ecrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim msg_admin_objet As String = TextBox1.Text.Substring(debut_obj, longeur_obj)

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est un avertissement de visual studio, pas forcément une erreur
    quand on déclare une variable il n'y a rien dedans
    si on l'utilise après sans rien ca peut etre un comportement anormal, si dans ton code tu es sur qu'une valeur sera bien dedans au moment de l'utilisation il n'y a pas de soucis à laisser en l'état

    après modifier des variables dans une boucle sans les utiliser ca me parait plus étrange mais vs ne fait pas d'avertissements pour ca ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    S'il n'y a rien dans TextBox1, tu ne vas pas rentrer dans la boucle, et donc msg_admin_objet ne sera pas initialisé et vaudra Nothing

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Oui je comprend, mais en faite j'extrait des données d'une textbox, de facon a ce que je separe les chaines de caractére par les espaces pour extraire celle qui m'intéresses situé dérriére un libelle par exemple "Origine" et "Objet" dans le cas ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For Each ligne As String In TextBox1.Text.Split(ControlChars.NewLine) 'pour chaque ligne de la textbox je sépare les caractéres
                    'origine 
                    Dim debut_org As Integer = TextBox1.Text.IndexOf("Origine : ") + 10
                    Dim fin_org As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_org)
                    Dim longeur_org As Integer = fin_org - debut_org
                    msg_admin_origine = TextBox1.Text.Substring(debut_org, longeur_org)
                    'objet
                    Dim debut_obj As Integer = TextBox1.Text.IndexOf("Objet : ") + 8
                    Dim fin_obj As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_obj)
                    Dim longeur_obj As Integer = fin_obj - debut_obj
                    msg_admin_objet = TextBox1.Text.Substring(debut_obj, longeur_obj)
                Next
    et après une fois que j'ai les valeurs, (ps: elle seront toujours là) je les enregistre dans ma base de données mysql avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                Dim MyNewRow As DataRow = dst_admin.Tables("administratif").NewRow
     
     
                MyNewRow("origine") = msg_admin_origine
                MyNewRow("objet") = msg_admin_objet
                dst_admin.Tables("administratif").Rows.Add(MyNewRow)
     
                Dim MyCommBuild As New MySqlCommandBuilder(da_admin)
                da_admin.Update(dst_admin, "administratif")
    le probléme est si je suis ce que ma dit gcorbineau les deux variables crée dans le ne sont pas visible pour mon insertion dans la base de donnée, alors comment bien faire ?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    laisse ton code en l'état et ignore l'avertissement
    si tu veux réellement supprimer l'avertissement sur la déclaration de ta variable tu rajoutes = nothing derrière

    par contre si tu nous n'as pas omis de code dans le copier coller vers le forum, ce code reste étrange
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ok pol63 voila l'intégralité du code, je ne le trouve pas étrange, il me permet d'extraire les infos voulu d'une textbox et la sauvegarde 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
    38
    39
                Dim msg_admin_num As String
                Dim msg_admin_date As String
                Dim msg_admin_heure As String
                Dim msg_admin_origine As String
                Dim msg_admin_objet As String
                Dim msg_admin_complet As String
     
                msg_admin_num = TextBox1.Text.Substring(33, 10) 'extrait le n° du msg à la position connue
                msg_admin_date = TextBox1.Text.Substring(52, 10) 'extrait la date à la position connue
                msg_admin_heure = TextBox1.Text.Substring(65, 8) 'extrait l'heure a la position connue
                msg_admin_complet = TextBox1.Text 'extrait la totalité du message
     
                For Each ligne As String In TextBox1.Text.Split(ControlChars.NewLine) 'pour chaque ligne de la textbox je sépare les caractéres
                    'origine 
                    Dim debut_org As Integer = TextBox1.Text.IndexOf("Origine : ") + 10
                    Dim fin_org As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_org)
                    Dim longeur_org As Integer = fin_org - debut_org
                    msg_admin_origine = TextBox1.Text.Substring(debut_org, longeur_org)
                    'objet
                    Dim debut_obj As Integer = TextBox1.Text.IndexOf("Objet : ") + 8
                    Dim fin_obj As Integer = TextBox1.Text.IndexOf(ControlChars.NewLine, debut_obj)
                    Dim longeur_obj As Integer = fin_obj - debut_obj
                    msg_admin_objet = TextBox1.Text.Substring(debut_obj, longeur_obj)
                Next
     
     
                'enregistrement du message administratif dans la base de donnée
                Dim MyNewRow As DataRow = dst_admin.Tables("administratif").NewRow
     
                MyNewRow("numero") = msg_admin_num
                MyNewRow("date") = msg_admin_date
                MyNewRow("heure") = msg_admin_heure
                MyNewRow("origine") = msg_admin_origine
                MyNewRow("objet") = msg_admin_objet
                MyNewRow("complet") = msg_admin_complet
                dst_admin.Tables("administratif").Rows.Add(MyNewRow)
     
                Dim MyCommBuild As New MySqlCommandBuilder(da_admin)
                da_admin.Update(dst_admin, "administratif")

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    dans ta boucle for tu vas modifier 2 variables (donc potentiellement x passages dans la boucle)
    à la fin de ta boucle for tu ajoutes une ligne à la base de données, donc pas x ligne, et le contenu de cette ligne sera le dernier tour de boucle

    pourquoi alors faire x tour de boucle pour enregistrer une seule donnée ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    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
    Citation Envoyé par Pol63 Voir le message
    laisse ton code en l'état et ignore l'avertissement
    si tu veux réellement supprimer l'avertissement sur la déclaration de ta variable tu rajoutes = nothing derrière

    par contre si tu nous n'as pas omis de code dans le copier coller vers le forum, ce code reste étrange
    C'est nettement mieux de mettre la variable à Nothing comme tu l'as conseilé, certes le message n'est pas toujours une erreur mais ca l'est souvent, donc plutot que de skipper les warnings, il vaut mieux les lire faire attention à se qu'il raconte et trouver la solution pour les faire disparaitre si besoin celui-ci n'est pas valide.
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

Discussions similaires

  1. Modifications de variable déclarées avant
    Par FotoXe33 dans le forum Langage
    Réponses: 6
    Dernier message: 11/07/2009, 00h23
  2. Variable demande avant requete
    Par backdraf dans le forum Développement
    Réponses: 8
    Dernier message: 11/05/2009, 18h36
  3. Réponses: 5
    Dernier message: 04/04/2008, 19h40
  4. Réponses: 6
    Dernier message: 09/01/2008, 17h40

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