Erreur de clé primaire [Résolu]

Signaler
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015
-
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
-
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

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

je la vois bien
c bizare non!!
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

désolé
comment est-ce que je peux déposer une image ici
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

Ah voila j'ai réussi à déposer le capture de la dataset
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
1
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
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

@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
Messages postés
43
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
7 octobre 2015

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)