Problème avec DataAdapter

Résolu
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 - 2 mai 2009 à 15:55
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 - 3 mai 2009 à 22:12
Bonjour à tous et à toutes,

Je poste ici ce message suite à un problème que je n'arrive pas à résoudre et qui me bloque complètement.

Lorsque j'essaie de faire un Update d'un DataSet vers une base Access, j'ai un message d'erreur que voici :

"DataColumn 'SAISON' manquant dans DataTable 'TCompanie' pour SourceColumn 'SAISON'
.

Ce message apparaît dans ces lignes de code :

-----
-----

'On cree une nouvelle ligne
objetDataRow = objetDataSet.Tables("TCompanie").NewRow()

'On definit les valeurs de chaque champ
objetDataRow.Item("NOM") = Me._AjoutCompanieNom
objetDataRow.Item("ADRESSE") = Me._AjoutCompanieAdresse
objetDataRow.Item("CONTACT") = Me._AjoutCompanieContact
objetDataRow.Item("TEL") = Me._AjoutCompanieTel
objetDataRow.Item("SITE_WEB") = Me._AjoutCompanieSite

'On ajoute la ligne au DataSet
objetDataSet.Tables("TCompanie").Rows.Add(objetDataRow)

'Pour modifier les valeurs changees dans le DataAdapter
objetCommandBuilder = New OleDbCommandBuilder(objetDataAdapter)

'Mise a jour vers la base
objetDataAdapter.Update(objetDataSet, "TCompanie") /!\ ERREUR /!\

'On vide le DataSet et on le 'recharge' de nouveau.
objetDataSet.Tables("TCompanie").Clear()
objetDataAdapter.Fill(objetDataSet, "TCompanie")

-----
-----

Je ne comprends pas pourquoi j'ai un tel message, car dans ma table TCompanie, aucun champ n'a le nom "SAISON".

Pour information, dans mon DataSet je récupère les tables de ma base de données et je fait les relations entre elles. Il se trouve qu'une table nommée TDate possède un champ 'SAISON', mais elle n'a aucun lien avec la table TCompanie...

A votre avis, d'où cela peut-il venir ?

Merci énormément d'avance,

-Papymuzo-

1 réponse

cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
3 mai 2009 à 22:12
J'ai trouvé la solution à mon problème !

Pour ceux que sa intéresse ou pour les futures personnes qui auraient le même problème que moi, voici la solution :

Prenons un exemple avec deux tables T1 et T2.

Si l'on prend un objetCommand (OledbCommand) et un seul, on devra faire une première requête pour la T1 et une seconde pour la T2 afin de récupérer le contenu des tables (ce qui est normal).

Or, si l'on veut faire une update pour T1, l'erreur apparaîtra. Pourquoi ? Parce que la commande "garde en mémoire" la dernière requête SQL effectuée (donc celle pour T2 !).

Ainsi, si l'on fait :

objetCommand = New OledbCommand("SELECT * FROM T1")
... remplissage du DataSet ...
objetCommand = New OledbCommand("SELECT * FROM T2")
... remplissage du DataSet ...

=> On a les deux tables dans le DataSet.

Si l'on veut modifier T1, on devra faire :

objetCommand = New OledbCommand("SELECT * FROM T1"), afin de "retrouver" la requête SQL qu'on a utilisé pour remplir la table.

Voila ;)

En espérant avoir été utile,

-Papy-
1
Rejoignez-nous