Erreur de clé primaire [Résolu]

cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 24 août 2010 à 18:08 - Dernière réponse : Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention
- 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 !!
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 25 août 2010 à 02:44
3
Merci
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.

Merci Mayzz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Mayzz
Meilleure réponse
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 25 août 2010 à 05:10
3
Merci
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.

Merci Mayzz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Mayzz
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 24 août 2010 à 22:05
0
Merci
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.
Commenter la réponse de Mayzz
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 24 août 2010 à 22:15
0
Merci
je la vois bien
c bizare non!!
Commenter la réponse de cs_nahoulaa
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 24 août 2010 à 22:32
0
Merci
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.
Commenter la réponse de Mayzz
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 24 août 2010 à 23:28
0
Merci
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.
Commenter la réponse de cs_nahoulaa
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 24 août 2010 à 23:35
0
Merci
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.
Commenter la réponse de Mayzz
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 25 août 2010 à 00:08
0
Merci
désolé
comment est-ce que je peux déposer une image ici
Commenter la réponse de cs_nahoulaa
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 25 août 2010 à 02:30
0
Merci
Ah voila j'ai réussi à déposer le capture de la dataset
Commenter la réponse de cs_nahoulaa
NSUADI 540 Messages postés mardi 4 août 2009Date d'inscription 1 février 2013 Dernière intervention - 25 août 2010 à 02:50
0
Merci
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
Commenter la réponse de NSUADI
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 25 août 2010 à 03:24
0
Merci
@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
Commenter la réponse de cs_nahoulaa
cs_nahoulaa 43 Messages postés mercredi 12 août 2009Date d'inscription 7 octobre 2015 Dernière intervention - 25 août 2010 à 03:47
0
Merci
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)
Commenter la réponse de cs_nahoulaa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.