Enregistrer un dataset dans le fichier MDB d'origine

Signaler
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
-
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
-
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

Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
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..
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
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

@+
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
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
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
Toujours pas, mais on avance mon dataset.getchanges () est a Null...
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
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é.
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
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é!
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
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
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
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>

@+
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
Non, toujours pareil....
Merci d'avoir essayer et désolé de t'avoir fait perdre ton temps.
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
Si tu veux je t'envoie ce que j'ai fait!
Messages postés
20
Date d'inscription
vendredi 7 décembre 2018
Statut
Membre
Dernière intervention
25 mai 2021
1
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é...
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
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
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
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é.

Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124
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
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549 >
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021

Salut,
en si, c'est pour ça que j'ai écrit
(comme indiqué dans le lien qu'à donné LePivert dans le message 5)
Messages postés
7406
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 juin 2021
124 >
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021

Au temps pour moi, j'ai lu en diagonal

Bonne soirée