Enregistrer un dataset dans le fichier MDB d'origine

Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 - Modifié le 24 janv. 2021 à 20:04
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 - 26 janv. 2021 à 19:39
Bonjour,
Pour mon programme, j'arrive a récupérer les données d'un fichier mdb, je rempli un dataset et un datagridview avec, j'arrive a modifier mon dataset, mais quand je recherche à enregistrer mes modifications dans le fichier mdb de départ (nomDB ), celui-ci n'est pas modifié.

voilà le code de mon bouton :
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        cnx = New OleDbConnection
        cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " & nomDB & ";"
        cnx.ConnectionString = cnxstr
        cnx.Open()

        dts.Tables("FICHE").AcceptChanges()
        dta.Update(dts, "FICHE")
        dts.Clear()
        dta.Fill(dts, "FICHE")
        dtt = dts.Tables("FICHE")
        cnx.Close()
    End Sub



D'avance merci.

9 réponses

Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 11:26
Merci pour ces liens qui m'auraient bien servi a l'époque, mais cela ne résout pas mon problème.
Je sais modifier le dataset et le dataAdapter, mais mon fichier .mdb d'origine, lui, n'est pas modifié..
Quand je ferme mon programme, je pers mes modifications..
1
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
Modifié le 26 janv. 2021 à 11:39
As-tu lu?

AJOUTER UN ENREGISTREMENT

parce que ce n'est pas la manière dont tu procèdes!

si tu téléchargeais l'exemple tu comprendrais mieux la façon de procéder

Tu trouveras d'autres exemples ici:

https://codes-sources.commentcamarche.net/source/list/visual-basic-vb-net-1/17-base-de-donnees/last

@+
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
Modifié le 26 janv. 2021 à 09:10
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 11:48
oui, j'ai aussi essayé
Dim cmdDB As New OleDbCommandBuilder(dta)

dta.Update(dts, "FICHE")
dts.Clear()

dta.Fill(dts, "FICHE")
dtt = dts.Tables("FICHE")

pour le même résultat, il me recharge toujours le mdb d'origine
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 12:07
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 12:33
Toujours pas, mais on avance mon dataset.getchanges () est a Null...
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 12:47
voici mon code :
dtr = dts.Tables("FICHE").Rows(rownum)

'modification des données
dtr("COCNE") = DB1.Rows(e.RowIndex).Cells(0).Value
dtr("NUPERMIS") = DB1.Rows(e.RowIndex).Cells(1).Value
dtr("COPERAUT") = DB1.Rows(e.RowIndex).Cells(2).Value
dtr("NUFICHE") = DB1.Rows(e.RowIndex).Cells(3).Value
dtr("NOM") = DB1.Rows(e.RowIndex).Cells(4).Value


Dim changes As DataSet
'Dim cmd As New OleDbCommand(access, cnx)
Dim cmdDB As New OleDbCommandBuilder(dta)

changes = dts.GetChanges()
If changes IsNot Nothing Then
dta.Update(dts.Tables(0))
End If
dts.AcceptChanges()

et j'ai maintenant, un message d'erreur au moment de update
Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans System.Data.dll

Informations supplémentaires : La génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 15:56
J'ai pris l'exemple du dernier lien donné et cela fonctionne!!!!!!!!!!!!!

Imports System.Data.OleDb
Public Class Form1
    Dim connetionString As String
    Dim connection As OleDbConnection
    Dim oledbAdapter As OleDbDataAdapter
    Dim oledbCmdBuilder As OleDbCommandBuilder
    Dim ds As New DataSet
    Dim changes As DataSet
    Dim i As Integer
    Dim sql As String
'Ouvrir et afficher dans Datagridview
   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\LePivert\Documents\Visual Studio 2010\Projects\Creer_Connecter__bddaccess_W8\Connecter_bddaccess_W8\bin\Debug\Mabase_exemple.mdb;" 'adapter le chemin de la base
        connection = New OleDbConnection(connetionString)
        sql = ("Select * from Clients") 'adapter le nom de la table
        Try
            connection.Open()
            oledbAdapter = New OleDbDataAdapter(sql, connection)
            oledbAdapter.Fill(ds)
            DataGridView1.DataSource = ds.Tables(0)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
'enregistrer dans la base Access
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Try
            oledbCmdBuilder = New OleDbCommandBuilder(oledbAdapter)
            changes = ds.GetChanges()
            If changes IsNot Nothing Then
                oledbAdapter.Update(ds.Tables(0))
            End If
            ds.AcceptChanges()
            MsgBox("Save changes")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class


et voilà c'est pas compliqué!
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 16:14
Ben, c'est pas compliqué, pourtant, voici mon code qui marche tant que je ne modifie rien. Sinon, si je veux modifier une valeur, il me met le message d'erreur !


Imports System.Data.OleDb
Public Class Form2


    Dim connetionString As String
        Dim connection As OleDbConnection
        Dim oledbAdapter As OleDbDataAdapter
        Dim oledbCmdBuilder As OleDbCommandBuilder
        Dim ds As New DataSet
        Dim changes As DataSet
        Dim i As Integer
    Dim sql As String

    'Ouvrir et afficher dans Datagridview
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        connetionString = "Provider=Microsoft.Jet.OLEDB.4.0 ; data source = demo.mdb;" 'adapter le chemin de la base
        connection = New OleDbConnection(connetionString)
        sql = ("Select * from FICHE") 'adapter le nom de la table
        Try
                connection.Open()
                oledbAdapter = New OleDbDataAdapter(sql, connection)
                oledbAdapter.Fill(ds)
                DataGridView1.DataSource = ds.Tables(0)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
        'enregistrer dans la base Access
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Try
                oledbCmdBuilder = New OleDbCommandBuilder(oledbAdapter)
                changes = ds.GetChanges()
                If changes IsNot Nothing Then
                    oledbAdapter.Update(ds.Tables(0))
                End If
                ds.AcceptChanges()
                MsgBox("Save changes")
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 16:46
Je n'ai aucun problème pour modifier ou ajouter (manuellement)

Essaie de mettre ton fichier Access dans le même dossier que ton executable

et change:

 connetionString = "Provider=Microsoft.Jet.OLEDB.4.0 ; data source = demo.mdb;" 'adapter le chemin de la bas


par:

 connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\demo.mdb;"


là il y a un problème par rapport à mon code:

data source = demo.mdb;" 'adapter le chemin de la bas
</code>

@+
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 16:50
Non, toujours pareil....
Merci d'avoir essayer et désolé de t'avoir fait perdre ton temps.
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 16:55
Si tu veux je t'envoie ce que j'ai fait!
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
26 janv. 2021 à 17:01
Non, c'est sympa, mais je vais laisser tomber.

J'ai fini par arriver a quelque chose par ce code :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        cnx = New OleDbConnection
        cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = demo.mdb;"
        cnx.ConnectionString = cnxstr

        Dim access As String
        '--------------------------Marche en sélectionnant seulement champs modifiés-------------------------------------------------------------------------------------------------
        access = "UPDATE FICHE SET COCNE = '" & TextBox1.Text & "', COPERAUT = '" & TextBox3.Text & "', NUFICHE ='" & TextBox4.Text & "', NOM ='" & TextBox5.Text & "' WHERE NUPERMIS ='" & TextBox2.Text & "'" ' & Chr(34)

        Dim cmd As New OleDbCommand(access, cnx)
        cnx.Open()
        cmd.ExecuteNonQuery()
        cnx.Close()


        dts.Clear()
        dta.Fill(dts, "FICHE")
        dtt = dts.Tables("FICHE")


Encore merci d'avoir essayé...
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 17:09
Il y a quelques années, j'ai fait ce programme, si cela t'interesse?

https://codes-sources.commentcamarche.net/source/55175-creer-et-connecter-une-base-access-sous-windows-8

@+ Le Pivert
0
Whismeril Messages postés 18639 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2023 629
26 janv. 2021 à 18:16
Bonsoir

j'arrive a modifier mon dataset,
est contradictoire de
mais on avance mon dataset.getchanges () est a Null...


Je ne suis pas un spécialiste en bdd et surtout pas avec des dataset (je trouve dommage d'utiliser cet objet "archaïque" au détriment de Linq...Mais avec Access, pour ce que j'en sais, pas trop le choix), mais il me semble qu'en fait ton dataset n'est pas modifié, puisque getchanges() est null.

Mais tout archaïque qu'il soit, si on le binde correctement à un datagridview (comme indiqué dans le lien qu'à donné LePivert dans le message 5) toute modification apporté dans le datagridview est automatiquement reportée dans le datatable.

Pas besoin de code de ce genre
'modification des données
dtr("COCNE") = DB1.Rows(e.RowIndex).Cells(0).Value
dtr("NUPERMIS") = DB1.Rows(e.RowIndex).Cells(1).Value
dtr("COPERAUT") = DB1.Rows(e.RowIndex).Cells(2).Value
dtr("NUFICHE") = DB1.Rows(e.RowIndex).Cells(3).Value
dtr("NOM") = DB1.Rows(e.RowIndex).Cells(4).Value

qui d'ailleurs m'étonne, on dirait que tu veux modifier l'ensemble des données du datable avec une seule ligne de datagridview.


Je te propose que créer un projet de test tout neuf.
Juste un formulaire, un datagridview et 2 boutons.

Tu mets ces codes http://vb.net-informations.com/dataadapter/dataadapter-datagridview-oledb.htm dans ce projet (en adaptant la chaine de connexion bien sûr) et tu essayes de modifier une ligne.

Attention, il semble y avoir une petite erreur dans le click du bouton 1 : DataSource doit être attaché.

0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137
26 janv. 2021 à 18:31
Salut Whismeril,

tu as pris le train en marche sans regarder le post 5

https://codes-sources.commentcamarche.net/forum/affich-10104332-enregistrer-un-dataset-dans-le-fichier-mdb-d-origine#5

Cordialement

@+ Le Pivert
0
Whismeril Messages postés 18639 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2023 629 > cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023
26 janv. 2021 à 19:15
Salut,
en si, c'est pour ça que j'ai écrit
(comme indiqué dans le lien qu'à donné LePivert dans le message 5)
0
cs_Le Pivert Messages postés 7899 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2023 137 > Whismeril Messages postés 18639 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2023
26 janv. 2021 à 19:39
Au temps pour moi, j'ai lu en diagonal

Bonne soirée
0
Rejoignez-nous