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.