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:
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.