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 :

Form avec base de données ACCESS et ComboBox


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    480
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 480
    Points : 164
    Points
    164
    Par défaut Form avec base de données ACCESS et ComboBox
    Bonjour,

    Je suis en train d'essayer de comprendre comment gérer une base de données ACCESS avec un Windows Form en VB.

    • J'arrive à me connecter à la base de données
    • J'arrive grâce à des TextBox à récupérer les valeurs des enregistrements ACCESS
    • J'arrive à créer un DataGridView pour afficher les données
    • J'arrive à Sauver, supprimer, créer un nouvel enregistrement, précédent, suivant...
    • J"arrive à gérer les CheckBox...

    Mais voilà, j'ai un gros problème avec les listes déroulantes

    J'ai dans mon fichier ACCESS, deux tables [Membres] et [Codes postaux]

    • La table [Codes postaux] contient 3 champs, ID_CP, CP et LOCALITE
    • La table [Membres] contient plusieurs champs, noms, prénoms etc... et un champ liste déroulante qui est lié à l'ID_CP de la table [Codes postaux]

    J'arrive donc facilement avec une requête à afficher les données de la table [Membres] avec le CP et la Localité présente dans la table [Codes postaux], là rien de compliqué

    MES DEUX PROBLEMES SONT :

    1. Si je lie dans la DataGridView le table [Membres] tout est OK, je peux modifier etc... par contre si je lie la requête pour pouvoir afficher le CP et la Localité, cela s'affiche mais je ne sais plus rien changer... est-il possible de régler cela ?
    2. Mon formulaire contient donc des TextBox liées à la BD et il y a évidemment un ComboBox qui devrait contenir les codes postaux de la table [Codes postaux] liée à la table [Membres]
      a. Je n'arrive pas à récupérer les codes postaux qui se trouvent en trois colonnes (ID_CP, CP et Localité) et à les afficher dans la ComboBox en trois colonnes avec si possible l'ID_CP invisible mais bien présent car c'est cette valeur qui fait le lien avec la table [Membres].

    Pourriez-vous m'aider ?

    Très bonne soirée à vous

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Le remede à ton mal est dans un DataRelation, puisque tu as une "cle etrangere"(foreign key) dans ta table CodesPostaux.
    cette cle permet de creer une relation dans ton DataSet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      Dim ds As New DataSet("ds")
            Dim membres As New DataTable ("membres")
            Dim codespostaux As New DataTable ("cdpostaux")
            ds.Tables.Add(membres)
            ds.Tables.Add(codespostaux)
            Dim membreCodePostalRel As DataRelation =
                ds.Relations.Add("RelMembreCodePostal", ds.Tables("cdpostaux").Columns("ID_CP"), ds.Tables("membres").Columns("ID_CP"))
    Ensuite il faut 2 bindingsources , le 1er pour alimenter le Combo,le second le Dgv contruits comme suit:
    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
     
    dim codepostalBds as New BindingSource
            codepostalBds.DataSource = ds
            codepostalBds.DataMember = "cdpostaux"
            ComboBox1.DataSource = codepostalBds
            ComboBox1.DisplayMember = "CP-Localite"
            ComboBox1.ValueMember = "CP"
            ComboBox1.DataBindings.Add("SelectedValue", codepostalBds, "ID_CP", True, DataSourceUpdateMode.OnPropertyChanged)
     
     
            dim membreBds as New BindingSource
            membreBds.DataSource = codepostalBds
            membreBds.DataMember = ds.Relations(0).RelationName
            DataGridView1.DataSource = membreBds
            BindingNavigator1.BindingSource = membreBds
    Il va sans dire qu'il faut manager également 2 DataAdapters pour la m.a.j en base (bd Access).

    N.B : le Combo ne peut afficher qu'un champ à la fois et si tu veux afficher CP+Localite il faut ajouter un champ expression "CP-Localite" ("calculé") dans ta table "cdpostaux" après son "Fill" par le DataAdapter.
    bon code...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    480
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 480
    Points : 164
    Points
    164
    Par défaut
    Bonjour et merci pour votre réponse

    Je vais essayer, mais à mon avis je vais avoir du mal...

    Où dois-je placer ces deux morceaux de code ? Dans le Private Sub Form1_Load ?

    Par contre là, je décroche complétement...
    Il va sans dire qu'il faut manager également 2 DataAdapters pour la m.a.j en base (bd Access).

    N.B : le Combo ne peut afficher qu'un champ à la fois et si tu veux afficher CP+Localite il faut ajouter un champ expression "CP-Localite" ("calculé") dans ta table "cdpostaux" après son "Fill" par le DataAdapter.
    bon code...
    Et dire que mon but est d'importer les données d'un fichier CODA dans une BD pour ensuite gérer les enregistrements... je crois que je m'avance de trop...

    Bon restons zen...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    480
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 480
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Je n'y arrive pas...

    Croyez-vous que je pourrais "abuser" en vous demandant si il serait possible de vous envoyer mon projet pour que vous y regardiez...

    Belle journée

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    tu peux poster ,je vais essayez de l'examiner .

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Bonjour

    Bon ,apres avoir ton projet ,ce n'est pas avec un combo ni une relation qu'il faut operer (ils sont reserves à ce qu'on appelle une table de correspondance ou "lookup table" ,technique destinée uniquement à l'affichage sans m.a.j-voir lien ci-après un pas-à-pas).
    En fait tu es dans la gestion de tables hierarchique avec clè etrangere(foreign key) et m.a.j en cascade,illustée par les databases d'exemple Microsoft NorthWind :table parente Orders (commandes) et fille (customers).
    Ta table parente est CodesPostaux, ta table fille est Membres.
    Tu le constateras dans le projet ci-joint si tu ouvres le volet Source de Données :
    Sous le noeud table CodePostaux,tu as un sous-noeud Membres
    ce sous -noeud Membres represente tous les membres qui ont un code postal (figure dans la table CodesPostaux)
    Sous le noeud table Membres (le dernier)figure tous les membres ,même ceux qui n'ont pas de code postal( ne figure pas dans la table CodesPostaux).
    Cette complication exige pour les nouveaux membres ajoutés à la table Membres ,d'être ajoutes aussi à la table CodePostaux.
    L'interface du projet revu ci-joint le permet puisque , il suffit d'ajouter les nouveaux membres dans le dgv et de rafraichir l'interface ce que tu peux faire avec la meme interface en cliquant sur le refresh que j'ai rajouté (button1).
    P.J.: projet revu ci-joint dénommé WindowsApp1.

    lien Microsoft pour la "Lookup Table" :
    https://docs.microsoft.com/en-us/dot...orkdesktop-4.8icrosoft pour la "Lookup Table" ci -dessous :


    voir P.J ci-joint du projet ci-joint.
    bon code...
    Fichiers attachés Fichiers attachés

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    480
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 480
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Merci Je regarderai à ça demain...

    Bonne soirée.

Discussions similaires

  1. Connexion avec base de données ACCES
    Par CrisL dans le forum Exécution et industrialisation
    Réponses: 4
    Dernier message: 13/01/2020, 21h13
  2. Réponses: 1
    Dernier message: 04/01/2016, 11h09
  3. Base de donnée Acces avec VB. 6
    Par aderfat dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 14/08/2008, 13h42
  4. [Vb.NET] Requete base de donnée acces avec apostrophe
    Par eown dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 20h56
  5. Réponses: 1
    Dernier message: 24/11/2005, 12h44

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