Erreur de clé primaire

Résolu
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015 - 24 août 2010 à 18:08
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 25 août 2010 à 05:10
salut,
je veux mettre à jour une base de donnée sql server 2005 à partir d'une forme de vb.net 2005 contenant des textbox contenant les informations que je veux inserer dans les champs de la table de la base
j'ai fait

Dim ID As Integer = label1.text
'ObjetDataTable = GestionTO.ObjetDataSet.Tables("ma_table")
Dim ttable As DataTable = ma_forme.ObjetDataSet.Tables("ma_table")
Dim Row As DataRow = matable.Rows.Find(ID)
If Row IsNot Nothing Then
With Row
'.Item("Nom") = txtNom.Text
.Item("CodeTO") = CodeTOLabel1.Text
.Item("LogoTO") = LogoTOTextBox.Text
End With
End If

ma_forme.ObjetDataAdapter.Update(ttable)

l'exection MissingPrimaryKeyException n'a pas été générée m'apparait
avec l'erreur la table n'a pas de clé praimaire
portant ma table contient un clé primaire de type entier
help !!

12 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
25 août 2010 à 02:44
Tu ne m'a pas répondu pour la récupération de la ligne, ca marche ?

Voila, comme ca ça devrait aller :

Dim ID As Integer = label1.text 
Dim TA As New MonDataSetTableAdapters.SpecTOTableAdapter
Dim T As MonDataSet.SpecTODataTable =  TA.GetData
Dim R As MonDataSet.SpecTOsRow = matable.Rows.Find(ID) 
If R IsNot Nothing Then 
   Dim ID As Integer = label1.text 
   With R 
     .Nom = txtNom.Text 
     .CodeTO = CodeTOLabel1.Text 
     .LogoTO = LogoTOTextBox.Text 
   End With 
End If 
TA.Update(T)


ici 'MonDataSet' et 'MonDataSetTableAdapters' sont à remplacer par le nom de ton dataset Ex: 'ObjDataSet' et 'ObjDataSetTableAdapters' pour un dataset nommé 'ObjDataSet'


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
25 août 2010 à 05:10
Alors ce coup ci, à mon avis c'est que tu n'as vraiment pas de clé primaire. Ce qu'il faut faire c'est définir une requête UPDATE dans le TableAdapter :

Il faut que tu clic sur l'entête du TableAdapter (au dessus de Fill, GetData), puis dans la fenêtre de propriétés tu veras 'UpdateCommand', développe puis défini la propriété CommandText.

Pour la syntaxe, regarde sur google en tapant 'SQL UPDATE SYNTAXE'.

Généralement c'est

UPDATE Matable SET champ1 @Champ1, Champ2 @Champ2 etc...

Les @ étant les variable(arguments) à passer à la requête


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
24 août 2010 à 22:05
Vois-tu ta clé primaire dans le DataTable lié à ton TableAdapteur (je veux dire visuellement, en ouvrant le DataSet) ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
24 août 2010 à 22:15
je la vois bien
c bizare non!!
0

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

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
24 août 2010 à 22:32
Hummm...

Question, tu as une DataTable et un TableAdapter alors, si tu fais

Dim ttable As ObjetDataSet.NomDeTaDataTable = ma_forme.ObjetDataSet.Tables("ma_table") 
Dim Row As ObjetDataSet.NomDeTonDataRow = matable.Rows.Find(ID) 
If Row IsNot Nothing Then 
'...


NomDe...

Son les éléments créés par le DataSet fortement typé, par exemple si je fais un nouveau tableAdapter avec une table 'clients', dans mon dataset (toujours en visuel) j'aurais :

MonDatSet (Nom du dataset)

Clients
 - Nom
 - Prenom
 - Adresse
ClientsTableAdapter
 - Fill(), GetData()


Je peux donc appeler le code comme ceci:

Dim ID As Integer = label1.text 
Dim TA As New MonDataSetTableAdapters.ClientsTableAdapter
Dim T As MonDataSet.ClientsDataTable =  TA.GetData
Dim R As MonDataSet.ClientsRow = matable.Rows.Find(ID) 
If R IsNot Nothing Then 


Essaye avec cette méthode pour voir ce que cela donne.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
24 août 2010 à 23:28
lorsque je fais
ma_forme.ObjetDataAdapter.Update(T)
je rencontre l'erreur
Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
24 août 2010 à 23:35
Ca fonctionne pour la récupération de l'ID de ligne ?

lorsque je fais
ma_forme.ObjetDataAdapter.Update(T)
je rencontre l'erreur
Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées


Oui donc c'est bien un problème de clé primaire. Le commandbuilder ne peux pas créer une requête Update parce qu'il ne connait pas la clé primaire.

Tu peux déposer ici une capture de ton DataSet ? Pour que je vois comment est ton schéma de table.




Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
25 août 2010 à 00:08
désolé
comment est-ce que je peux déposer une image ici
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
25 août 2010 à 02:30
Ah voila j'ai réussi à déposer le capture de la dataset
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
25 août 2010 à 02:50
tu entres des informations sur ton label1 ou il y a une valeur préalablement initialiser pour ce label1?


Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
25 août 2010 à 03:24
@Mayzz: très gentil de votre part, c'a marché
merci infiniment
@NSUADI: non il s'agit d'une variable préalablement initialisée biensur
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
25 août 2010 à 03:47
en essayant le même code avec une autre table je rencontre l'erreur:
Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.
et ceci au niveau du code: TA.Update(T)
0
Rejoignez-nous