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 :

[vb.net 2010] Datagridview + BD access => problème


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Par défaut [vb.net 2010] Datagridview + BD access => problème
    Bonjour à tous,

    Je viens vers vous car j'ai épuisé mon stock de bidouillage en tout genre et pour finir, je m'y perds complètement.

    Voilà mon problème :

    J'ai une BD access avec 2 tables (entre autre).

    Ma première table (tâche) utilise un identifiant de la seconde table (personne) pour savoir qui a encodé la tâche.

    Ma requête utilise donc une jointure, pas de soucis là dessus.

    Si j'ai bien compris la logique (et reprenez moi si je me trompe) pour afficher les résultats de la requête dans une datagridview, il faut :

    Créer un dataadapter
    Créer un dataset
    Créer un datatable qui a la structure du résultat de ma requête
    Ajouter ce datatable au dataset
    Faire un fill du dataadapter vers la table du dataset
    Spécifier le datasource du datagridview comme étant le datatable

    Là niveau code ça coince j'ai déjà essayé plusieurs combinaisons et j'ai tjrs mon datagrid qui n'affiche rien

    A Plus long terme il faudrait aussi que je puisse ajouter un nouveau record (row), supprimer, et mettre à jour.

    J'ai déjà lu et relu la doc Philippe Lasserre et rien n'y fait

    Pour infos je suis donc en vb.net sous visual studio 2010 ultimate (framework 4 donc).

    D'avance merci.

  2. #2
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut
    Bonjour,
    Si tu peux nous ecrire ton code pour bien voir le probleme.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Par défaut
    ok mais à force de changer je doute que ca veuille dire quelque chose encore..

    mais bon, voilà :

    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
     
    ObjetConnection = New OleDbConnection()
            ObjetConnection.ConnectionString = ChaineConnec
     
            ObjetConnection.Open()
     
            ObjetCommand = New OleDbCommand("SELECT tache.dateeve, tache.tache, tache.demandeur, utilisateur.id, utilisateur.nom FROM tache, utilisateurs WHERE tache.encodeur = utilisateurs.id")
     
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
     
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataTable = New DataTable("reqTache")
            Dim colonne As DataColumn
     
            colonne = New DataColumn()
            colonne.DataType = System.Type.GetType("System.DateTime")    
            colonne.ColumnName = "dateeve"
            ObjetDataTable.Columns.Add(colonne)
     
            colonne = New DataColumn()
            colonne.DataType = System.Type.GetType("System.String")   
            colonne.ColumnName = "tache"
            ObjetDataTable.Columns.Add(colonne)
     
            colonne = New DataColumn()
            colonne.DataType = System.Type.GetType("System.String") 
            colonne.ColumnName = "demandeur"
            ObjetDataTable.Columns.Add(colonne)
     
            colonne = New DataColumn()
            colonne.DataType = System.Type.GetType("System.Integer")
            colonne.ColumnName = "userId"
            ObjetDataTable.Columns.Add(colonne)
     
            colonne = New DataColumn()
            colonne.DataType = System.Type.GetType("System.String") 
            colonne.ColumnName = "userNom"
            ObjetDataTable.Columns.Add(colonne)
     
            ObjetDataSet.Tables.Add(ObjetDataTable)
     
    ObjetDataAdapter.Fill(ObjetDataSet, "reqTache")
     
    BindingSource1.DataSource = ObjetDataTable
            DataGridView1.DataSource = BindingSource1
            BindingNavigator1.BindingSource = BindingSource1
    Voilà, ça ne doit surement pas être bon.

    Merci d'avance.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Je suis encore sous le coup de la digestion mais il manque, entre la datatable et le datagridview, une binding source.

    Autrement je vous conseille d'utiliser VisualStudio et la partie Source de donnée pour définir ta table access en tant que source de donnée.

    Ainsi le code créant le dataset, les datatables, les tableadapter seront générés automatiquement. Encore mieux normalement dans la fenetre source de donnée, vous verrez apparaitre vos tables dans la base de donnée avec la possiblité de les glisser directement dans votre formulaire sous en tant que controle. Et là l'IDE créera automatiquement les objet nécessaires pour gérer l'opération.

    Une fois le résultat optenu (sous la forme d'un prototype fonctionnel), je vous recommande fortement d'étudier les objets et le code généré par Visual Studio afin de comprendre ce qui a été générée. Vous pourrez ainsi ensuite croiser vos nouvelles connaissances avec la doc Philippe Lasserre et la doc MSDN afin de pousser plus loin l'utilisation du datagridview (qui est un controle relativement complexe).

  5. #5
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Je ne voudrait pas contredire mon prédécesseur, mais j'ai un autre avis.

    Utiliser le designer pour ajouter des sources de données, ça peut sembler sympa, mais en code c'est pas grand chose a faire, et quand une erreur survient, il est impossible de la réparer, vu que le code est auto générer.

    (Par exemple, si dans une table de ta BDD, tu modifie une colonne, c'est la catastrophe, il faut tout recommencer).

    Ensuite le binding source n'est pas obligatoire.

    Dans ton code, tu ajoutes manuellement des colonnes a ta datatable, or ce n'est aps nécessaire. Le dataadapter va te les créers.

    Ton erreur viens je pense dans l'indication de la connexion a utiliser.

    Si je reprends ton code, ca donnerai 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
    17
    18
    19
    ObjetConnection = New OleDbConnection()
            ObjetConnection.ConnectionString = ChaineConnec
     
            ObjetConnection.Open()
            'Ligne de code modifier au bout
            ObjetCommand = New OleDbCommand("SELECT tache.dateeve, tache.tache, tache.demandeur, utilisateur.id, utilisateur.nom FROM tache, utilisateurs WHERE tache.encodeur = utilisateurs.id", ObjetConnection)
     
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
     
            ObjetDataTable = New DataTable("reqTache")
     
            ObjetDataSet.Tables.Add(ObjetDataTable)
     
            ObjetDataAdapter.Fill(ObjetDataSet, "reqTache")
     
            DataGridView1.DataSource = ObjetDataSet.Tables("reqTache")
     
            'Ne pas oublier de fermer la connection
            ObjetConnection.Close()

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 161
    Par défaut
    Essaie de voir 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
      Dim ObjetConnection As New OleDb.OleDbConnection(ChaineConnec)
     
            'Remplissage du DataGrid
            Dim ObjetDataSet As DataSet = New DataSet
            Dim ObjetDataAdapter As OleDb.OleDbDataAdapter
            Dim LaRequete As String = "SELECT tache.dateeve, tache.tache, tache.demandeur, utilisateur.id, utilisateur.nom FROM tache, utilisateurs WHERE tache.encodeur = utilisateurs.id"
     
            ObjetConnection.Open()
     
            ObjetDataAdapter = New OleDb.OleDbDataAdapter(LaRequete, ObjetConnection)
            ObjetDataAdapter.Fill(ObjetDataSet, "tache, utilisateurs")
            DataGridView1.DataSource = ObjetDataSet.Tables("tache, utilisateurs").DefaultView
     
            ObjetConnection.Close()

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 46
    Par défaut
    merci beaucoup pour vos réponses !

    Je test ça demain, pas le temps aujourd'hui et je post le résultat pour aider si d'autres ont le même problème.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/03/2013, 15h36
  2. vb.net 2010 + access => requête sur champ date/time
    Par jojo1284 dans le forum VB.NET
    Réponses: 18
    Dernier message: 09/05/2012, 16h46
  3. [CR 2008] Problème avec CrystalReport et vb.net 2010
    Par zilien974 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 05/10/2011, 15h03
  4. VB 2010 express => Datagridview et access
    Par jojo1284 dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/04/2010, 16h40
  5. [Vb.net 2003] Access.Application / Problème de fermeture d'Access
    Par Perceneige dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/05/2007, 18h32

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