pwoc
Messages postés38Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention25 décembre 2007
-
6 mai 2006 à 11:31
vblover
Messages postés57Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention27 janvier 2011
-
14 déc. 2008 à 19:49
Voici une version simplifiée du code où il ne reste que l'essentiel.
Le principe est le suivant :
<ol><li>Je crée un objet "mdb" suivant la classe jointe</li><li>J'ouvre une base de données access (Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\x.mdb")</li><li>Je charge les données d'une table dans un dataset ("SELECT tags.* FROM tags")</li><li>J'ajoute une ligne a cette table du dataset</li><li>J'essaie de synchroniser mon dataset avec ma base de données... et c'est la que ca plante
</li></ol>Quelqu'un a t il une idée ?
Merci
Form Main.vb
Imports System.Data, System.Data.OleDb
Public Class frmMain
Dim mdbTags As New mdb
Public TagsDataSet As New DataSet()
Private Sub frmMain_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
mdbTags.mdbClose()
End Sub
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
mdbTags.mdbOpen(My.Settings.tagsConnectionString)
TagsDataSet = mdbTags.mdbGetDataSet("SELECT tags.* FROM tags")
Dim TagRow As DataRow
TagRow = TagsDataSet.Tables(0).NewRow()
TagRow("artist") = "artiste"
TagRow("album") = "album"
TagRow("title") = "titre"
TagsDataSet.Tables(0).Rows.Add(TagRow)
mdbTags.mdbSetDataSet(TagsDataSet)
End Sub
End Class
Classe mdb.vb
Imports System.Data, System.Data.OleDb
Public Class mdb
Private mdbConnection As OleDbConnection
Dim mdbCommand As OleDbCommand
Dim mdbAdapter As OleDbDataAdapter
Dim mdbDataSet As New DataSet
Dim mdbCommandBuilder As OleDbCommandBuilder
Public Sub mdbOpen(ByVal strConn As String)
mdbConnection = New OleDbConnection(strConn)
mdbConnection.Open()
End Sub
Public Function mdbGetDataSet(ByVal strSQL As String) As DataSet
mdbCommand = New OleDbCommand(strSQL, mdbConnection)
mdbAdapter = New OleDbDataAdapter(mdbCommand)
mdbAdapter.Fill(mdbDataSet)
Return mdbDataSet
End Function
Public Sub mdbSetDataSet(ByRef mdbDataSet As DataSet)
Dim mdbCmdIns As New OleDbCommand()
mdbCommandBuilder = New OleDbCommandBuilder(mdbAdapter)
mdbCmdIns = mdbCommandBuilder.GetInsertCommand()
mdbAdapter.Update(mdbDataSet)
End Sub
Public Sub mdbClose()
mdbConnection.Close()
mdbConnection = Nothing
mdbDataSet = Nothing
mdbAdapter = Nothing
mdbCommand = Nothing
End Sub
End Class
asecher
Messages postés262Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention27 avril 20071 6 mai 2006 à 15:56
N'as-tu pas, dans ton enregistrement, une valeur refusant d'être à valeur nulle ou encore une donnée trop longue ou qui n'est pas au bon format (en fonction du type) ?
pwoc
Messages postés38Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention25 décembre 2007 6 mai 2006 à 16:11
Dans ce cas là, il aurait déjà du me refuser l'ajout de la ligne dans le dataset, non ?
Or ici c'est vraiment aux moment dans la synchro avec la base de données que ca foire :s
vblover
Messages postés57Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention27 janvier 2011 14 déc. 2008 à 19:49
J'ai le meme probleme. Je n'arrive tout simplement pas a mettre ma base a jour suite a d'eventuels changements faits par l'utilisateur final a un datagridview. La meilleure facon de contourner le probleme c'est d'utiliser le visard pour la creation des differents objets: dataadapter dataset datanavigator databinding et datagridview. Ca marche a merveille.
Vblover.