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

Windows Forms Discussion :

[VB 2005]Probleme avec une listbox et DBNull


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut [VB 2005]Probleme avec une listbox et DBNull
    Bonjour à tous,

    Tout d'abord je tiens à préciser que je suis débutant en vb, alors mon problème va peut être vous semblait bête...
    Avant d'exposer ce problème, je précise que je travaille sous visual studio 2005, et j'utilise une base de donnée sous Access.
    Alors mon problème est tout simple, je veux récupérer les donnée d'une table ayant pour condition le texte sélectionné dans ma listbox.
    Ma requête est donc la suivante :

    choix = ListBox1.Text
    sql = "select * from Personne where Nom='" & choix & "';"

    Il me semble que cela est correct vu que si je fais un messagebox.show(choix) il m'affiche bien le texte qui a été choisi dans la listbox, et si je fais un messagebox.show(sql), elle aussi semble correcte.

    Je précise que l'erreur que j'obtiens est : "La conversion du type 'DBNull' en type 'String' n'est pas valide. Mais ma requête ne retourne pas une valeur nulle."

    Enfin je débute et je n'ai certainement pas encore tout compris. Je précise que cette instruction est placé sur l'évenement clic dans la listbox. Je vous joins, le code sur cet évenement. Merci de me porter votre aide.

    Voici le code :
    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
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click
            Dim choix As String
            choix = ListBox1.Text
            cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Agenda.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            'Création de la requête sql
            sql = "select * FROM Personne where Nom='" & choix& "';"
            'Création de la commande et on l'instancie (sql)
            cmd = New OleDbCommand(sql)
            'Création du data-adapter (dta) et on l'instancie (cmd)
            dta = New OleDbDataAdapter(cmd)
            'On instancie la commande (cmd) à la connection (cnx)
            cmd.Connection() = cnx
            'On charge le dataset (dts) grace à la propriété fill du data-adapter (dta)
            dta.Fill(dts, "Personne")
            'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)                 
            dtt = dts.Tables("Personne")
            Me.TextBox1.Text = dtt.Rows(0).Item("Nom")
            Me.TextBox2.Text = dtt.Rows(0).Item("Prenom")
            Me.TextBox3.Text = dtt.Rows(0).Item("DateNaissance")
        End Sub
    
    Merci de m'avoir porté un peu d'attention
    PS : Veuillez m'excuser si un poste de ce type existe déjâ je n'ai pas été fichu de le trouver

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

    Tu ne nous as pas dit où tu avais l'erreur (sur quelle ligne) ?

    Ca doit être sur l'une des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.TextBoxyyy.Text = dtt.Rows(0).Item("yyyyy")
    Tu devrais détecter le DBNull avant d'affecter la valeur au .Text.

    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.TextBoxyyy.Text = CStr(IIf(IsDBNull(dtt.Rows(0).Item("yyyyy")), "", dtt.Rows(0).Item("yyyyy"))
    PS : Pense aux balises [code]

    Cdt.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Merci d'avoir répondu aussi rapidement.

    Les erreurs sont aux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Me.TextBox2.Text = dtt.Rows(0).Item("Prenom")
    Me.TextBox3.Text = dtt.Rows(0).Item("DateNaissance")

    Avec votre solution je n'ai plus d'erreur. Mais les champs ne se remplissent pas. JE ne comprend pas pourquoi ils sont nuls. Lorsque j'affiche le contenu de la variable "sql"


    et que je la teste sous mon sgbd access, il n'y a pas de champs nuls.


    Je ne comprends donc pas d'où vient ce problème...

    De plus maintenant lorsque je clic sur un élément de ma ListBox cet élément est recopié et collé à la fin. Je vais finir par abandonné ce formulaire

  4. #4
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Je ne vois pas d'où peut venir le probléme.

    En mode debug, tu obtiens bien quelque chose dans dtt ?

    Cdt.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    J'ai complètement changé mon formulaire, je suis passé d'une listbox à un combobox mais j'ai un nouveau problème sur l'événement clic, les textbox associé ne se mettent pas à jour. Une idée du "pourquoi ?"

    Au chargement du formulaire (vive l'assistant Visual studio)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Modif_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.PersonneTableAdapter.Fill(Me.AgendaDataSet.Personne)
            TextBox1.Enabled = False
            TextBox2.Enabled = False
            TextBox3.Enabled = False
        End Sub

    Pour l'affichage dans les textbox :
    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
     
    Private Sub ComboBox1_Clic(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.Click
            TextBox1.Enabled = True
            TextBox2.Enabled = True
            TextBox3.Enabled = True
            Dim choix As String
            choix = ComboBox1.Text
            MessageBox.Show(choix)
            ''ouverture de la connection(à partir du répertoire de l'application)sur la même ligne
            cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Agenda.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            ''Création de la requête sql
            sql = "select nom,prenom,datenaissance from Personne where nom ='" & choix & "';"
            ''Création de la commande et on l'instancie (sql) 
            cmd = New OleDbCommand(sql)
            ''Création du dataadapter (dta) et on l'instancie (cmd)
            dta = New OleDbDataAdapter(cmd)
            ''On instancie la commande (cmd) à la connection (cnx) 
            cmd.Connection() = cnx
            ''On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
            dta.Fill(dts, "Personne")
            ''On charge la datatable (dtt) grace à la propriété tables du dataset (dts)                  
            dtt = dts.Tables("Personne")
            ''Indiquer quelle colonne afficher
            'ListBox1.DataSource = dtt
            Me.TextBox1.Text = dtt.Rows(rownum).Item("Nom")
            Me.TextBox2.Text = dtt.Rows(rownum).Item("Prenom")
            Me.TextBox3.Text = dtt.Rows(rownum).Item("DateNaissance")
        End Sub
    Mais les textbox ici ne s'actualisent pas et je ne sais pas s'il faut travailler sur cet événement... Mais il y a du progrès !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    J'ai réussi a trafiquer ma listbox et elle affiche correctement cependant j'ai un problème pour afficher les valeur dans les textbox associés. Enfin lorsque je clic sur le premier ou second élément lors du lancement du formulaire tout marche comme il faut, cependant si le formulaire se lance et que je clic sur un élément supérieur au second j'ai une erreur... Ce n'est pas tres clair je vous joins donc un screenshot



    Je suppose donc que c'est un problème d'index, j'ai pas du tout comprendre à comment ceci fonctionnaient ...

    Voici le code de ma listbox
    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
     
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click
            rownum = ListBox1.SelectedIndex
            TextBox1.Enabled = True
            TextBox2.Enabled = True
            TextBox3.Enabled = True
            Dim choix As String
            choix = ListBox1.Text
            ''ouverture de la connection(à partir du répertoire de l'application)sur la même ligne
            cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Agenda.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            ''Création de la requête sql
            sql = "select nom,prenom,datenaissance from Personne where nom ='" & choix & "';"
            ''Création de la commande et on l'instancie (sql)
            cmd = New OleDbCommand(sql)
            ''Création du dataadapter (dta) et on l'instancie (cmd)
            dta = New OleDbDataAdapter(cmd)
            ''On instancie la commande (cmd) à la connection (cnx)
            cmd.Connection() = cnx
            ''On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
            dta.Fill(dts, "Personne")
            ''On charge la datatable (dtt) grace à la propriété tables du dataset (dts)                 
            dtt = dts.Tables("Personne")
            ''Indiquer quelle colonne afficher
            Me.TextBox1.Text = dtt.Rows(rownum).Item("Nom")
            Me.TextBox2.Text = dtt.Rows(rownum).Item("Prenom")
            Me.TextBox3.Text = dtt.Rows(rownum).Item("DateNaissance")
        End Sub
    et celui du 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private Sub Modif_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.PersonneTableAdapter.Fill(Me.AgendaDataSet.Personne)
            Dim index As Integer
            index = 0
            ListBox1.SelectedIndex = index
            Dim choix As String
            choix = ListBox1.Text
            ''ouverture de la connection(à partir du répertoire de l'application)sur la même ligne
            cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Agenda.mdb;"
            cnx = New OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            ''Création de la requête sql
            sql = "select nom,prenom,datenaissance from Personne where nom ='" & choix & "';"
            ''Création de la commande et on l'instancie (sql)
            cmd = New OleDbCommand(sql)
            ''Création du dataadapter (dta) et on l'instancie (cmd)
            dta = New OleDbDataAdapter(cmd)
            ''On instancie la commande (cmd) à la connection (cnx)
            cmd.Connection() = cnx
            ''On charge le dataset (dts) grace à la propriété fill du dataadapter (dta)
            dta.Fill(dts, "Personne")
            ''On charge la datatable (dtt) grace à la propriété tables du dataset (dts)                 
            dtt = dts.Tables("Personne")
            ''Indiquer quelle colonne afficher
            Me.TextBox1.Text = dtt.Rows(rownum).Item("Nom")
            Me.TextBox2.Text = dtt.Rows(rownum).Item("Prenom")
            Me.TextBox3.Text = dtt.Rows(rownum).Item("DateNaissance")
        End Sub

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

Discussions similaires

  1. Probleme avec une ListPicker dans une listBox
    Par YohDono dans le forum Windows Phone
    Réponses: 8
    Dernier message: 02/03/2012, 10h30
  2. probleme avec une listbox
    Par patou60110 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/04/2007, 19h38
  3. Probleme avec une ListBox
    Par beb30 dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2006, 11h08
  4. [debutant] Probleme avec une listBox.
    Par Mickey.jet dans le forum Delphi
    Réponses: 2
    Dernier message: 30/05/2006, 13h21
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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