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 :

[Visual basic 2005] Comment récupérer des champs d' une base access


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut [Visual basic 2005] Comment récupérer des champs d' une base access
    Bonjour,

    Je suis Grand débutant en VB et j' ai besoin d' un petit renseignement.

    Voila je voudrais dans un formulaire créer plusieurs listes déroulantes qui récuperent leurs valeurs dans une base de donnée access.

    Oui mais voila comment faire...

    Après avoir fouiller sur le web et "bidouillé" je n' y arrive pas.

    J' ai bien compris le principe de connexion à la base de donnée via BindingSource qui si j' ai bien tout compris me crée un DataSet mais ensuite pour mettre en relation ma ListBox avec les champs que je désire et bah je n' y arrive pas... Je suppose encore que je dois renseigner dans les propriétés de ma ListBox les champs contenus dans DataBindings mais je ne sais quoi renseigner.

    Bref je nage dans le flou total, je pense que de générer le code doit etre plus simple mais la encore ..... je débute.

    Y aurait il une ame charitable pour me montrer la voie?

  2. #2
    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
    j'y connais rien en bindings et autre trucs automatiques
    mais en manuel ca donnerait à peu près ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dim connexion as oledbconnexion ("chaine de connexion")
    dim command as oledbcommand ("select * from table",connexion)
    dim reader as oledbreader
    connexion.open
    reader = command.executereader
     
    while reader.Read
      listbox1.add(reader.item(O))
    while end
    reader.close
    connexion .close
    enfin c'est à adapter mais le nombre de ligne doit pas etre loin de ca
    (et avec un petit try catch)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Perso, vu que le monsieur a un DataSet apparemment qui contient ces données, j'aurais plutot fait qqch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonControl.DataSource = MonDataSet.Tables(0)
    MonControl.DisplayMember = MonDataSet.Tables(0).Item("macolonneA")
    MonControl.ValueMember = MonDataSet.Tables(0).Item("macolonneB")
    Où MonDataSet est le DataSet renvoyé par la requête et MonControle, le composant où il veut que les valeurs s'affichent.

    La propriété DataSource spécifie où puiser l'information (la source quoi^^).
    La propriété DisplayMember spécifie la colonne où le composant va chercher les valeurs à afficher.
    La propriété ValueMember spécifie la colonne où le composant va chercher la valeur rattachée à ce qui est affiché.

    Exemple à la con :

    Imaginons que nous ayons une table qui reprend les différents status qu'un objet x peut avoir. Disons que dans la table on a 2 colonnes. Un id et un nom.

    Si on fait un "select * from MaTableDesStatus" et qu'on place tout ça dans ds (DataSet), après, avec une combobox, je peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combobox1.DataSource = ds.Tables(0)
    combobox1.DisplayMember = ds.Tables(0).Item("nom")
    combobox1.ValueMember = ds.Tables(0).Item("id")
    Ce qui fera que la combo affichera la liste des noms des différents status mais quand on sélectionne un, derrière, c'est l'id qui est sélectionné.

    Si j'suis pas clair, référez-vous au cours de Philippe Lasserre. Il est extrêment bien fait !

    Griftou.
    Kropernic

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    J' essaierai vos codes ce soir mais merci d' avoir été aussi réactif en tout cas

    Citation Envoyé par griftou Voir le message
    Si j'suis pas clair, référez-vous au cours de Philippe Lasserre. Il est extrêment bien fait !

    Griftou.
    C' est ce cour dont tu parles griftou? http://plasserre.developpez.com/vsommair.htm

  5. #5
    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
    oui, ce site explique beaucoup de choses sur vb.net
    on y est tous passé un jour ou l'autre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Oui oui, c'était bien celui là ^^

    Griftou.
    Kropernic

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    J' ai donc abandonné de tenter d' afficher mes données à partir du l'onglet propriétés de ma listbox....

    J' ai donc pas mal potasser le cour de Mr lasserre et j' en avais plein la tête (bah oui ca peut pas rentrer en un jour :p ) alors j' ai décider de mettre à pratique ce que j' avais vu et ce que vous m' avais conseillé.

    J' ai donc fais un dataset qui pointe directement sur un champ "marque" ensuite voial ce que j' ai fais


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            ListBox1.DataSource = marque.Tables(0)
            ListBox1.DisplayMember = marque.Tables(0)("Marque")
            ListBox1.ValueMember = marque.Tables(0).Item("id")
        End Sub
    Inspiré pour pas dire copier ce qu' avais posté griftou.

    Cependant voila que vb m' averti :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	La classe 'System.Data.DataTable' ne peut pas être indexée, car elle n'a pas de propriété par défaut.	C:\Users\Mathieu\Desktop\CESI\VB\RESERVATION_INFORMATIQUE\RESERVATION_INFORMATIQUE\FRM_Réservation.vb	15	34	RESERVATION_INFORMATIQUE
    et la je dit help.

    M'y suis je mal pris pour faire mon dataset? Es ce plus simple de s'en passer et de taper du code sql?

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    On peut voir le bout de code où tu crées ton dataset ?

    Enfin si tu fais ça en automatique, ce qu'il faut connaitre c'est le nom du dataset. Là avec cette erreur, on dirait que "marque" n'est pas le dataset mais un datatable du dataset.

    Griftou.
    Kropernic

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Tu avais raison, j' ai tout repris depuis le début pour y voir plus clair.

    Voial comment j' ai procèdé :



    Je me connecte à ma base de donnée via l' outils BindingSource, je lui indique le chemin de mon .mdb ensuite je sélectionne les tables et les champs que je veux utiliser, la en l' occurrence je sélectionne tout.

    Ce qui me donne un dataSet qui se nomme Rerservation_InformatiqueDataSet

    Ensuite pour ma listbox voila ce que j' ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            ListBox1.DataSource = Rerservation_InformatiqueDataSet.Portable(0)
            ListBox1.DisplayMember = Rerservation_InformatiqueDataSet.Portable(0)("N° portable")
            ListBox1.ValueMember = Rerservation_InformatiqueDataSet.Portable(0).Item("id")
        End Sub
    Et la effectivement plus de messages d' erreur par contre ma listbox bah elle liste rien ^^ j' ai un jolie carré balnc à la place de mes marques

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Pourquoi tu mets ce code dans l'évent SelectedIndexChanged ?

    Ces instructions ne sont effectuées que lorsque tu changes d'éléments dans ta listbox. Essaie plutot dans le FormLoad ou qqch du genre.

    Griftou.
    Kropernic

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    En fait je crée la liste box à partir de la barre d' outils et ensuite je double clik dessus ce qui me met en mode "code" pour lui attribuer le code que tu m' a donner.

    SelectedIndexChanged a été généré lors de la création de la listbox sans quoi que je fasse.

    j' ai coller le code entre les deux.

    Apparement les outils graphiques sont plus une contrainte que de développer qu' en code.

    Je sens que je vais m' amuser

  12. #12
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Non c'est tout à fait logique. Lorsque tu double-cliques sur un contôle, tu accèdes à l'évènement le plus couramment utilisé pour ce contrôle.

    Si tu double-cliques sur un bouton, tu arriveras dans l'évènement Click du bouton afin de pouvoir affecter du code à cet évènement.
    Idem pour ta listbox. L'évènement "par défaut" est celui qui se produit lorsque l'utilisateur choisit un élément dedans. C'est donc lorsque l'index sélectionné change et c'est bien l'évènement dans lequel tu rentres quand tu double-cliques dessus.

    Tu dois donc double-cliquer sur le contrôle Form et mettre ton code là.

    Sais pas du tout si j'suis clair ^^.

    Griftou.
    Kropernic

  13. #13
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Si si, donc ce n' est pas entre le sub / End Sub du bouton qu' il faut que je code mais au démarrage , pour le formulaire.

    Je vais essayer ca, merci



    [edit]

    Mmm maintenant j' ai ca comme erreur au lancement du formulaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <System.Diagnostics.DebuggerNonUserCodeAttribute()>  _
            Public Default ReadOnly Property Item(ByVal index As Integer) As PortableRow
                Get
                    Return CType(Me.Rows(index),PortableRow)
                End Get
            End Property
    et j' ai fais ca

    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
    Public Class FRMreservation
     
        Private Sub basededonnée_CurrentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles basededonnée.CurrentChanged
     
        End Sub
     
        Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
     
        End Sub
     
        Private Sub FRMreservation_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ListBox1.DataSource = Rerservation_InformatiqueDataSet.Portable(0)
            ListBox1.DisplayMember = Rerservation_InformatiqueDataSet.Portable(0)("Marque")
            ListBox1.ValueMember = Rerservation_InformatiqueDataSet.Portable(0).Item("N° portable")
        End Sub
    End Class

  14. #14
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    J'ai jamais vu cette erreur ^^.

    Par contre, si j'ai bien suivi ce que tu as fait, dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub FRMreservation_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ListBox1.DataSource = Rerservation_InformatiqueDataSet.Portable(0)
            ListBox1.DisplayMember = Rerservation_InformatiqueDataSet.Portable(0)("Marque")
            ListBox1.ValueMember = Rerservation_InformatiqueDataSet.Portable(0).Item("N° portable")
        End Sub
    Portable est le nom d'une table de ton dataset ? Si oui, il faut enlever le "(0)" car cela veut dire que tu prends la ligne à l'index 0. Or ce n'est pas du tout ce que tu veux faire. S'il y a plusieurs tables dans ton dataset, enlève le "(0)". S'il n'y a qu'une seule table, remplace "Portable" part "Tables". Tu prendras alors la tables à l'index 0.

    Suis-je clair ?

    Griftou.
    Kropernic

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Portable est bien le nom d' une table et j' en ai 4 dans mon dataset.

    j' enlève (0) donc?

  16. #16
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Si tu veux accéder à la table qui s'appelle "Portable" alors oui.
    Kropernic

Discussions similaires

  1. [XL-2010] comment faire des insert dans une base access sans avoir access
    Par Poulki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/08/2012, 07h45
  2. comment ajouter des champs dans une base en exploitation?
    Par Clotilde dans le forum InterBase
    Réponses: 4
    Dernier message: 04/09/2009, 19h53
  3. [MySQL] je cherche une aide pour récupérer des champs d'une base de donnée
    Par maya24 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/09/2007, 12h14
  4. Réponses: 2
    Dernier message: 09/07/2006, 17h40
  5. [Excel] Récupérer des données d'une base Access
    Par FoxDeltaSierra dans le forum Excel
    Réponses: 8
    Dernier message: 03/09/2005, 10h22

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