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 :

Echec de la conversion de la valeur varchar 'Administrateur en type de données int [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut Echec de la conversion de la valeur varchar 'Administrateur en type de données int
    Bonjour tout le monde,
    voilà je dispose d'un formulaire d'inscription Windows Form avec plus champs comme l'illustre le code suivant:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Imports System.Data.SqlClient
    Public Class forminscription
        Dim con As New SqlConnection
        Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ComboBox1.Items.Add("--Selectionner un groupe--")
            ComboBox1.SelectedIndex = 0
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
                For Each oRow As DataRow In res.Tables("Table").Rows
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = ComboBox1.Items.Add(oRow.Item("nom_grp"))
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
        Private Sub btajout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btajout.Click
            con.Open()
            Try
                Dim cmd As New SqlCommand(("INSERT INTO utilisateurs VALUES ('" & _
                                           txtidutili.Text & "','" & _
                                           ComboBox1.Text & "','" & _
                                           txtnomutili.Text & "','" & _
                                           txtmdp.Text & "','" & _
                                           txtnomfautili.Text & "','" & _
                                           txtprenomutili.Text & "','" & _
                                           txtemailutili.Text & "','" & _
                                           txtbputili.Text & "', SYSDateTime(), '" & _
                                           txtetatcompte.Text & "','" & _
                                           txtnumteleutili.Text & "')"), con)
     
                cmd.ExecuteNonQuery()
                con.Close()
                MsgBox("Success ...", MsgBoxStyle.Information, "L'utilisateur a ete correctement ajouter")
                txtidutili.Focus()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter
     
        End Sub
     
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
     
        End Sub
    End Class
    Et quand j'exécute mon code, j'ai ce message d'erreur:
    Echec de la conversion de la valeur varchar 'Administrateur en type de données int.
    Nom : conversionvaleur.png
Affichages : 2120
Taille : 15,3 Ko
    Et j'ai besoin d'un coup de pouce, merci à l'avance!

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    ça serait de savoir au niveau de quelle instruction cette erreur apparait, et ça serait bien de connaitre la structure de la table concernée.

    En gros tu essaye quelque part de mettre la chaine 'Administrateur' dans un objet de type integer, donc ça ne peut pas aller
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    L'erreur apparaît à ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     For Each oRow As DataRow In res.Tables("Table").Rows
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = ComboBox1.Items.Add(oRow.Item("nom_grp"))
                Next
    Lors de l'exécution de cette requête:
    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
     
            con.Open()
            Try
                Dim cmd As New SqlCommand(("INSERT INTO utilisateurs VALUES ('" & _
                                           txtidutili.Text & "','" & _
                                           ComboBox1.Text & "','" & _
                                           txtnomutili.Text & "','" & _
                                           txtmdp.Text & "','" & _
                                           txtnomfautili.Text & "','" & _
                                           txtprenomutili.Text & "','" & _
                                           txtemailutili.Text & "','" & _
                                           txtbputili.Text & "', SYSDateTime(), '" & _
                                           txtetatcompte.Text & "','" & _
                                           txtnumteleutili.Text & "')"), con)
     
                cmd.ExecuteNonQuery()
                con.Close()
                MsgBox("Success ...", MsgBoxStyle.Information, "L'utilisateur a ete correctement ajouter")
                txtidutili.Focus()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    Et dans ma table le type de données de la colonne concernée c'est int

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Si tu essaye de mettre du texte dans une colonne de type int, c'est évident que ça peut pas marcher. Soit tu te trompe de colonne, soit il va falloir revoir la conception de la base.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Juste une précision!
    En html, cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select name="liste">
    <option value="1">Administrateur</option>
    <option value="2">Gestionnaire</option>
    <option value="3">Vendeur</option>
    <option value="4">Stagiaire</option>
    </select>
    Signifie que chaque élément de la liste a une valeur qui est numérique autrement dit si on fait un submit de ce formulaire c'est la valeur 1 qui serait récupérer à la place du texte Administrateur, 2 à la place du texte Gestionnaire, 3 à la place du texte Vendeur, ainsi de suite
    Et pour le cas de ma base de données, j'ai une table groupe_utilisateurs qui a deux champs: id_grp de type int et nom_grp de type varchar(15)
    Bref, voici les enregistrements de ma table groupe_utilisateurs
    id_grp nom_grp
    1 Administrateur
    2 Gestionnaire
    3 Vendeur
    4 Stagiaire

    Et donc pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ComboBox1.DisplayMember = "nom_grp"
    va récupéré les valeurs de ma colonne nom_grp qui sont de type varchar et ce sont ses données qui seront visibles dans le combobox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ComboBox1.ValueMember = "id_grp"
    va récupéré les valeurs de ma colonne ig_grp qui sont de type int et ce sont ses données qui seront récupéré lors du traitement du formulaire bref l'équivalent de l'attribut value="1" en html
    Et si ce n'est pas le cas donnée une bonne explication et la meilleur solution de récupéré id_grp de type int

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Ok, mais dans ta requete tu utilise ComboBox1.Text, c'est à dire le texte saisi dans la zone d'édition du combo, donc une string.

    Si c'est la valeur de l'id_grp correspondant à l'item sélectionné que tu veux, il faut utiliser SelectedValue
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Avec ceci sa fonctionne bien, voici la requête pour alimenter ma ComboBox1 au chargement du formulaire:
    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
    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlCommand(req, con)
                Dim da As SqlDataAdapter = New SqlDataAdapter(execu)
                Dim res As New DataTable("groupes_utilisateurs")
                da.Fill(res)
                If res.Rows.Count > 0 Then
     
                    ComboBox1.DataSource = res
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = "nom_grp"
                End If
                con.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    Et sa c'est pour l'insertion des données:
    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
    Private Sub btajout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btajout.Click
            con.Open()
            Try
                Dim cmd As New SqlCommand(("INSERT INTO utilisateurs VALUES ('" & _
                                           txtidutili.Text & "','" & _
                                           ComboBox1.SelectedValue & "','" & _
                                           txtnomutili.Text & "','" & _
                                           txtmdp.Text & "','" & _
                                           txtnomfautili.Text & "','" & _
                                           txtprenomutili.Text & "','" & _
                                           txtemailutili.Text & "','" & _
                                           txtbputili.Text & "', SYSDateTime(), '" & _
                                           txtetatcompte.Text & "','" & _
                                           txtnumteleutili.Text & "')"), con)
     
                cmd.ExecuteNonQuery()
                con.Close()
                MsgBox("Success ...", MsgBoxStyle.Information, "L'utilisateur a ete correctement ajouter")
                txtidutili.Focus()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    Maintenant je voudrais que: --Choisissez un groupe-- soit l'élément sélectionnez par défaut dans mon ComboBox1 et je précise qu'il ne fait pas parti du résultat de la requête!

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Je pense que tu dois pouvoir rajouter directement ce texte dans Combo1.Text. Comme il ne correspond à aucun item ça ne sélectionnera aucun item, mais il devrait être visible quand même
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  9. #9
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Un peu de code svp!

  10. #10
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Combo1.Text = "--Choisissez un groupe--"
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  11. #11
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    J'ai fais ceci:
    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
    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlCommand(req, con)
                Dim da As SqlDataAdapter = New SqlDataAdapter(execu)
                Dim res As New DataTable("groupes_utilisateurs")
                da.Fill(res)
                If res.Rows.Count > 0 Then
                    ComboBox1.Text = "--Choisissez un groupe--"
                    ComboBox1.DataSource = res
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = "nom_grp"
                End If
                con.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    Et j'ai ce code d'erreur:
    Items collection cannot be modified when the DataSource property is set.

  12. #12
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    C'est effectivement un peu plus compliqué que je l'imaginais.

    Tu faire ceci en rajoutant manuellement une ligne dans la datatable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                If res.Rows.Count > 0 Then
                    dr as datarow = res.NewRow
                    dr("id_grp") = -1
                    dr("nom_grp") = "--Choisissez un groupe--"
     
                    ComboBox1.DataSource = res
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = "nom_grp"
                End If
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2014, 12h35
  2. Réponses: 1
    Dernier message: 13/02/2010, 13h44
  3. conversion d'un Array List vers un type de donnée
    Par msahli3 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/03/2009, 17h44
  4. Réponses: 4
    Dernier message: 18/06/2007, 13h54
  5. Réponses: 3
    Dernier message: 04/06/2007, 09h31

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