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 :

Ajouter les entrées d'un DGV à une base Access


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 66
    Points
    66
    Par défaut Ajouter les entrées d'un DGV à une base Access
    Bonjour,
    Je suis en train de faire un petit formulaire en Vb.net pour ajouter des entrées à une base de données Access qui gère des commandes.
    À l'ouverture, le formulaire n'est pas lié à la base, ce n'est qu'au moment de transférer les données que je fais la liaison.
    Il y a un premier niveau, celui de la commande que j'arrive à enregistrer sans problème dans la base. J'arrive aussi à récupérer l'ID généré par access.
    Là où j'ai un souci, c'est avec le DGV qui vient ensuite et dans lequel j'entre une ou plusieurs positions de la commande en question.

    Dans mon exemple, j'ai un DGV avec trois colonnes (désignation, nombre, unité) que je veux transférer dans les champs Designation, nombre et unite de la table TblPosition.
    Pour le moment, j'ai fait des essais, peu concluants, avec ce 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
    25
    conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\bd.mdb;")
     
            Dim selStr As String = "INSERT INTO TblPosition (ID, Designation, nombre, unite) VALUES (@PosID, @Design, @nbre, @unit)"
            Dim pr(4) As OleDbParameter
            da1.InsertCommand = New OleDbCommand(selStr, conn)
            pr(0) = da1.InsertCommand.Parameters.Add("@PosID", OleDbType.Integer)
    pr(1) = da1.InsertCommand.Parameters.Add("@Design", OleDbType.VarChar)
            pr(2) = da1.InsertCommand.Parameters.Add("@nbre", OleDbType.Integer)
            pr(3) = da1.InsertCommand.Parameters.Add("@unit", OleDbType.VarChar)
     
                For i = 0 To Me.DataGridView1.Rows.Count - 1
                    Dim row As DataGridViewRow = Me.DataGridView1.Rows(i)
     
     
                    pr(0).Value = Me.PositionID.Text
               pr(1).Value = Me.DataGridView1.Rows(i).Cells(1).Value
               pr(2).Value = Me.DataGridView1.Rows(i).Cells(3).Value
               pr(3).Value = Me.DataGridView1.Rows(i).Cells(4).Value
     
            Next
     
                conn.Open()
     
                da1.InsertCommand.ExecuteNonQuery()
                conn.Close()
    Le problème, c'est que la dernière ligne du DGV est toujours vide pour permettre de nouveaux ajouts, et cette ligne génère une erreur puisqu'il n'y a rien à enregistrer.
    Je me demande si c'est la bonne méthode pour faire ce que je veux. Je pense qu'il faudrait peut-être mieux passer par un dataset/datatable, non ?
    Si c'est le cas, comment est-ce que je peux faire ça assez simplement, sachant que mon DGV n'est lié à aucune source au chargement du formulaire?

    Merci pour votre aide!

    Guillaume

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 To Me.DataGridView1.Rows.Count - 2
    Pour esquiver la dernière ligne.

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Le plus propre pour ne pas avoir ce genre de problème est de lier une datatable à la propriété Datasource du datagridview et de se baser sur le datatable pour mettre à jour la BD.
    La datatable n'aura pas cette ligne supplémentaire, et en plus, en passant par un adaptateur bien construit, vous pourriez mettre à jours la BD avec un simple .update

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    @Prologic:
    J'y avais pensé, mais je trouve que ça fait un peu "bidouille", et puis ma première ligne étant remplie par des valeurs standard au chargement, si je ne la touche pas, il n'y a vraiment qu'une ligne, du coup en mettant "-2", rien n'est enregistré.

    @Sankassssss:
    C'est aussi à ça que je pensais, mais je ne sais pas comment faire ça par le code, pour ne lier le DGV qu'au moment d'enregistrer les données et pas au chargement du formulaire, je préfère que le DGV*reste indépendant au chargement.
    J'ai trouvé des infos pour la liaison à l'aide de l'assistant, mais je voudrais tout faire par le code. Est-ce que tu pourrais me dire grosso modo comment faire dans mon cas ou, au pire, me dire où c'est expliqué ? (je patauge un peu là)

    Merci par avance
    Guillaume

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Tu peux le faire en déconnecté, en très gros :
    au chargement du formulaire :
    1. Tu crées un datatable
    2. Tu lui ajoutes toutes les colonnes
    3. Tu le lies au datagridview

    Lors de la sauvegarde :
    1. tu crées un adaptateur avec ces commandes
    2. Tu le lies à la datatable
    3. tu appels la méthode update


    Je te conseil de lire / parcourir : Modification de données dans ADO.NET

    Si tu as des soucis sur un point précis, n'hésites pas, le forum est là pour ça

  6. #6
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    Pour lier votre datagridview à une datatable par le code, rien de plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            DataGridView1.DataSource = <nom de la table>
    En mode lecture/écriture.

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par GCAccess Voir le message
    @Prologic:
    J'y avais pensé, mais je trouve que ça fait un peu "bidouille", et puis ma première ligne étant remplie par des valeurs standard au chargement, si je ne la touche pas, il n'y a vraiment qu'une ligne, du coup en mettant "-2", rien n'est enregistré.
    Alors tu peux garder le -2 et faire une vérification sur le nombre de lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.DataGridView1.Rows.Count >= 2 then ...
    Là encore c'est bidouille et les autres solutions données sont plus propre.

Discussions similaires

  1. Lister les fonctions et procédures d'une base Access
    Par Jean-Philippe André dans le forum Contribuez
    Réponses: 4
    Dernier message: 15/01/2009, 15h19
  2. Lister les noms des tables d'une base access
    Par chefinf dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/07/2008, 18h34
  3. Créer connexion entre Vb.net et une base Access
    Par fixfix dans le forum Accès aux données
    Réponses: 9
    Dernier message: 05/12/2007, 10h07
  4. Lister les noms de table d'une base Access
    Par fikou dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/08/2007, 10h48

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