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 :

DataSet contenant plusieurs Tables


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut DataSet contenant plusieurs Tables
    Bonjour,

    Je suis en train de développer une application VB en ado.net, avec une base de données ACCESS contenant 3 Tables (Utilisateur, PC, Logiciel).

    Ce programme me permettra de référencer les Utilisateurs, leurs Pc ainsi que les Logiciels installés sur chacun d'entres eux.

    L'affichage des informations se fait par des Listbox.

    J'ai crée la connexion, qui se connecte sur la BD, ainsi que tous les objets nécessaires (DataSet, Command, DataAdapter, Datable...).
    Toutes les informations que j'attends de la Table Utilisateurs s'affichent dans les différentes Listbox (elles se mettent à jour automatiquement si je sélectionne un autre utlisateur)

    Le problème, c'est que je souhaite à présent afficher les informations de la table PC, qui coïncideraient à la sélection de l'utilisateur (donc de la table Utilisateur) via un champs commun contenu dans les deux tables et qui se nomme : "IDPC".

    Ma question est la suivante
    :

    - Comment dois-je faire, pour que les deux champs Utilisateur.Idpc et Pc.Idpc soient communs, afin que l'affichage des listbox soit cohérant ?

    Exemple : l'IDPC sélectionné de la table utlisateur, soit le même IDPC présélectionné de la table PC ????

    J'ai lus pleins de tutoriaux à propos des DataSet et du Sql, mais je bloc...

    Ci dessous la déclaration des Objets pour la table Utilisateur (qui marche) sachant que la connexion est déjà établie. Actuellement les informations de la table PC s'affichent, mais la présélection de l'IDPC n'est pas commun avec celui de l'IDPC de la table Utilisateur.

    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
    ObjetDataSet.Clear()
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\bd1.mdb;"
            ObjetConnection = New OleDbConnection()
            ObjetConnection.ConnectionString = strConn
            ObjetConnection.Open()
     
            strSql = "SELECT *. FROM UTILISATEUR"
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "UTILISATEUR")
            ObjetDataTable = ObjetDataSet.Tables("UTILISATEUR")
     
            ListBox2.DataSource = ObjetDataSet.Tables("UTILISATEUR")
            ListBox3.DataSource = ObjetDataSet.Tables("UTILISATEUR")
            ListBox4.DataSource = ObjetDataSet.Tables("UTILISATEUR")
            ListBox5.DataSource = ObjetDataSet.Tables("UTILISATEUR")
            ListBox6.DataSource = ObjetDataSet.Tables("UTILISATEUR")
            ListBox7.DataSource = ObjetDataSet.Tables("UTILISATEUR")
     
            ListBox2.DisplayMember = "IDUSER"
            ListBox3.DisplayMember = "NOM"
            ListBox4.DisplayMember = "PRENOM"
            ListBox5.DisplayMember = "MPSESSION"
            ListBox6.DisplayMember = "EMAIL"
            ListBox7.DisplayMember = "IDPC"
     
            strSql = "SELECT PC.* FROM PC"
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "PC")
            ObjetDataTable = ObjetDataSet.Tables("PC")
     
            ListBox14.DataSource = ObjetDataSet.Tables("PC")
            ListBox14.DisplayMember = "IDPC"
    J'ai bien essayé de mettre une requête unique pour les deux tables du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            strSql = "SELECT utilisateur.id, utilisateur.iduser, utilisateur.nom, utilisateur.prenom, utilisateur.mpsession, utilisateur.email, utilisateur.mpemail, utilisateur.aliasemail, utilisateur.idpc, utilisateur.numtel, pc.idpc, pc.marque FROM UTILISATEUR INNER JOIN PC ON utilisateur.idpc = pc.idpc;"
    Mais les 2 listbox devant charger l'Idpc des deux tables (Utilisateurs et Pc) se remplissent avec l'argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Data.DataRowView
    J'espère avoir été clair...n'hésitez pas à me faire parvenir vos remarques.

    Merci d'avance c'est pour un projet de cours et j'avoue que je bloc un peu...

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Salut,

    essai de procéder comme ceci :

    Dans ton DataSet, tu crées une DataRelation entre le DataTable Utilisateur et le DataTable PC, en te basant sur IDPC.
    Ensuite pour la liaison des données, tu crées 2 BindingSource (un pour chaque DataTable), et tu utilises ces BindingSource comme source de données tes ListBox.

    Un truc dans le genre devrait fonctionner, (je te laisser optimiser ) :
    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
    ObjetDataSet.Clear()
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.StartupPath & "\bd1.mdb;"
            ObjetConnection = New OleDbConnection()
            ObjetConnection.ConnectionString = strConn
            ObjetConnection.Open()
     
            strSql = "SELECT *. FROM UTILISATEUR"
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "UTILISATEUR")
            ObjetDataTable = ObjetDataSet.Tables("UTILISATEUR")
     
            strSql = "SELECT PC.* FROM PC"
            ObjetCommand.CommandText =strSql
            ObjetDataAdapter.Fill(ObjetDataSet, "PC")
            ObjetConnection.Close
     
    ObjetDataSet.Relations.Add(new DataRelation("UTILISATEUR_PC", ObjetDataTable.Columns(IDPC), ObjetDataSet.Tables("PC").Columns(IDPC)))
     
    Dim bdgUTILISATEUR as new BindingSource(ObjetDataSet,"UTILISATEUR")
    Dim bdgPC as new BindingSource(bdgUTILISATEUR , "PC")
     
            ListBox2.DataSource = bdgUTILISATEUR 
            ListBox3.DataSource = bdgUTILISATEUR 
            ListBox4.DataSource = bdgUTILISATEUR 
            ListBox5.DataSource = bdgUTILISATEUR 
            ListBox6.DataSource = bdgUTILISATEUR 
            ListBox7.DataSource = bdgUTILISATEUR 
     
            ListBox2.DisplayMember = "IDUSER"
            ListBox3.DisplayMember = "NOM"
            ListBox4.DisplayMember = "PRENOM"
            ListBox5.DisplayMember = "MPSESSION"
            ListBox6.DisplayMember = "EMAIL"
            ListBox7.DisplayMember = "IDPC"
     
            ListBox14.DataSource = bdgPC 
            ListBox14.DisplayMember = "IDPC"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup pour ces conseils Fred.G.
    Je vais me pencher sur cette piste !
    Je vous tiens au courant

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Après maintes essais je n'arrive toujours pas au résultat que j'attends grrrr

    J'ai bien crée la DataRelation ainsi que les deux BindingSources :

    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
    strSql = "SELECT UTILISATEUR.* FROM UTILISATEUR"
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "UTILISATEUR")
            ObjetDataTable = ObjetDataSet.Tables("UTILISATEUR")
     
            strSql = "SELECT PC.* FROM PC"
            ObjetCommand.CommandText = strSql
            ObjetDataAdapter.Fill(ObjetDataSet, "PC")
            ObjetDataTable = ObjetDataSet.Tables("PC")
            'ObjetConnection.Close()
     
            ObjetDataSet.Relations.Add(New DataRelation("UTILISATEUR_PC", ObjetDataSet.Tables("UTILISATEUR").Columns("IDPC"), ObjetDataSet.Tables("PC").Columns("IDPC")))
     
            Dim bdgUTILISATEUR As New BindingSource(ObjetDataSet, "UTILISATEUR")
            Dim bdgPC As New BindingSource(ObjetDataSet, "PC")
     
     
            ListBox1.DataSource = bdgUTILISATEUR
            ListBox2.DataSource = bdgUTILISATEUR
            ListBox3.DataSource = bdgUTILISATEUR
            ListBox4.DataSource = bdgUTILISATEUR
            ListBox5.DataSource = bdgUTILISATEUR
            ListBox6.DataSource = bdgUTILISATEUR
            ListBox7.DataSource = bdgUTILISATEUR
            ListBox8.DataSource = bdgUTILISATEUR
     
            ListBox1.DisplayMember = "ID"
            ListBox2.DisplayMember = "IDUSER"
            ListBox3.DisplayMember = "NOM"
            ListBox4.DisplayMember = "PRENOM"
            ListBox5.DisplayMember = "MPSESSION"
            ListBox6.DisplayMember = "EMAIL"
            ListBox7.DisplayMember = "IDPC"
            ListBox8.DisplayMember = "IDPC"
     
            ListBox14.DataSource = bdgPC
            ListBox14.DisplayMember = "IDPC"
    Mais quand je selectionne un IDPC de la table UTILISATEUR, l'IDPC de la Table PC ne coïncide toujours pas

    Je laisse un screen de ce que j'obtiens...
    Images attachées Images attachées  

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut

    Pourquoi as-tu modifé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim bdgUTILISATEUR as new BindingSource(ObjetDataSet,"UTILISATEUR")
    Dim bdgPC as new BindingSource(bdgUTILISATEUR , "PC")
    Si tu ne spécifies pas bdgUTILISATEUR comme DataSource de bdgPC, la relation ne sera pas prise en compte...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Autant pour moi, si je commence à modifier ce qu'il ne faut pas...!

    J'ai spécifié bdgUtilisateur en tant que DataSource de bdgPC mais lorsque le programme se connecte à la BD je reçois en retour le message d'erreur suivant.
    Bizard
    Images attachées Images attachées  

  7. #7
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Oups ! Désolé, c'est le nom de la DataRelation qu'il faut indiquer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim bdgPC as new BindingSource(bdgUTILISATEUR , "UTILISATEUR_PC")

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    C'est parfait !

    Merci grandement pour ton aide Fred.G c'est vachement sympa

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2013, 16h30
  2. Réponses: 4
    Dernier message: 18/08/2010, 13h09
  3. Réponses: 5
    Dernier message: 03/08/2007, 09h24
  4. [VB 2005]Dataset avec plusieurs tables
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/05/2006, 14h25
  5. Réponses: 19
    Dernier message: 13/03/2006, 13h06

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