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 :

Actualiser données dans bdd via datagrid


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Points : 53
    Points
    53
    Par défaut Actualiser données dans bdd via datagrid
    Bonjour,

    J'ai créé un dataset qui est rempli via une requête SQL qui porte sur deux tables. C'est là qu'est mon souci. Je m'explique, j'ai un datagrid qui charge les données stockées dans mon dataset. Mon but est qu'un utilisateur puisse modifier les données dans la datagrid et que cela actualise la bdd (base Access pour info), mais ça ne le fait pas à cause de cette erreur : "La génération SQL dynamique n'est pas prise en charge pour plusieurs tables de base"

    Mon 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Dim Connexion As New System.Data.OleDb.OleDbConnection()
     
        'Création du DataSet qui est le reflet exact de la bdd Access
        Dim DataSet As New DataSet
     
        'L'objet DataAdapter qui fait l'intermédiaire entre la BDD et le DataSet.
        Dim DataSetAdaptateur As New OleDbDataAdapter("SELECT Article.Libellé_Article, Article.Code_Article, Article.Stock_réel, Article.Stock_mini, Article.Date_Peremp, Article.Quantite_sortie, Lot.Date_Peremption, Lot.Lieu_stockage, Lot.Fournisseur, Lot.Date_Reception, Lot.Quantite_sortie FROM Article INNER JOIN Lot ON Article.Num_Article = Lot.Numéro_Article", Connexion)
     
        'Déclaration d'un OleDbCommandBuilder qui permettra la modification des données dans le DataGrid et son initialisation (sinon pas d'update)
        Dim ObjetCB As OleDbCommandBuilder = New OleDbCommandBuilder(DataSetAdaptateur)
     
        'Affichage des données dans le DataGridView
        Private Sub creation_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Try
                Connexion.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source=C:\...\Base.accdb ; Persist Security Info=False;"
                Connexion.Open()
     
                DataSetAdaptateur.Fill(DataSet, "DataTableCreation")
     
                'Liaison du DataSet contenant les données de la BDD avec le DataGrid via la propriété DataSource de ce dernier.
                DG_DataGrid.DataSource = DataSet.Tables("DataTableCreation")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
            Connexion.Close()
     
        End Sub
     
        'Modif des données lorsque le user clique sur le bouton
        Private Sub Bt_enregistrement_Click(sender As Object, e As EventArgs) Handles Bt_enregistrement.Click
     
            Dim reponse As MsgBoxResult
     
            reponse = MsgBox("êtes vous sur ?", 4161, "Confirmation d'enregistrement")
     
            If reponse = 1 Then
     
                DataSetAdaptateur.UpdateCommand = ObjetCB.GetUpdateCommand()
     
                Try
                           DataSetAdaptateur.Update(DataSet, "DataTableCreation")
                Catch ex As Exception
                           MessageBox.Show(ex.Message)
                End Try
     
            Else
     
                'On quitte l'appli sans enregistrer
     
            End If
     
        End Sub
    Je ne vois pas comment faire, même en transformant la requête en une vue dans Access, j'ai la même erreur.
    J'ai lu que dans le cas d'une requête faisant appel à plusieurs tables, il fallait se passer du commandBuilder ; je veux bien mais comment faire pour passer les update manuellement ?

    Merci d'avance à ceux qui m'aideront.

  2. #2
    Membre émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    J'ai tapé ça dans Google :

    "La génération SQL dynamique n'est pas prise en charge pour plusieurs tables de base"

    Premier lien :

    http://www.developpez.net/forums/d89...ne-retourne-p/
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Points : 53
    Points
    53
    Par défaut
    J'ai fait la même recherche, d'où ma phrase : "J'ai lu que dans le cas d'une requête faisant appel à plusieurs tables, il fallait se passer du commandBuilder ; je veux bien mais comment faire pour passer les update manuellement ?"

    Mais depuis je me suis débrouillé et j'ai réussi. Merci quand même ...

  4. #4
    Membre émérite 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 : 39
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Le dernier message du Post dis pourtant :

    "La solution la plus "simple" est de créer toi même la commande Update du DataAdapter. Il faut juste faire une requête UPDATE avec des paramètres pour chaque valeur, en définissant la propriété SourceColumn de chaque paramètre. De cette façon le DataAdapter ira chercher les valeurs des paramètres dans les colonne correspondantes de la DataTable"

    Et si tu as résolus, ça aurait été sympa de mettre comment, pour les autres utilisateurs du Forum qui cherchent des réponses, comme toi
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 164
    Points : 53
    Points
    53
    Par défaut
    Oui mais je ne voyais pas comment écrire le code quand même, quelles méthodes appelées ensuite, quelles propriétés utiliser ... Ca restait une indication assez vague pour moi. Voilà pk j'ai posté ici, en espérant avoir une aide plus précise, je ne suis pas un pro de vb.net ...

    J'm'en suis tiré avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim Connexion As New System.Data.OleDb.OleDbConnection()
     
    Dim DataSet As New DataSet
     
    Dim DataSetAdaptateur As New OleDbDataAdapter("SELECT Article.Libellé_Article, Article.Code_Article, Article.Stock_réel, Article.Stock_mini, Article.Date_Peremp, Article.Quantite_sortie, Lot.Date_Peremption, Lot.Lieu_stockage, Lot.Fournisseur, Lot.Date_Reception, Lot.Quantite_sortie FROM Article INNER JOIN Lot ON Article.Num_Article = Lot.Numéro_Article", Connexion)
     
    - Update des données
    Update = New OleDbCommand("UPDATE Article SET Article.Stock_réel = @Stock WHERE (((Article.Code_Article)='BMAMP1'))", Connexion)
    Update.Parameters.AddWithValue("@Stock", DG_DataGrid.CurrentCell.Value)
    DataSetAdaptateur.UpdateCommand = Update
    DataSetAdaptateur.Update(DataSet, "DataTableCreation")
    Et je me suis aperçu que le code d'update fonctionne également sans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update.Parameters.AddWithValue("@Stock", DG_DataGrid.CurrentCell.Value)
    Du coup je me demandais dans quelle situation peut-on utiliser Parameters.AddWithValue ? Dans le cas d'une requête qui demande beaucoup de paramètres ? Et quelle est cette syntaxe avec @ ? Tableau associatif ?

Discussions similaires

  1. [C#] Récupération d'une donnée dans BDD Access
    Par Kerod dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/07/2014, 19h29
  2. [Débutant] MAJ de données dans BDD via interface WPF
    Par jerrypeeren dans le forum Linq
    Réponses: 2
    Dernier message: 19/11/2013, 21h38
  3. [MySQL] insertion données dans BDD via formulaire
    Par stefanelle dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/02/2009, 10h51
  4. [MySQL] problème ajout donnée dans BDD via php
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/05/2006, 23h41
  5. [MySQL] vérifier données dans BDD
    Par ardamus dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2006, 17h21

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