jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 2014
-
12 mars 2012 à 14:24
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
13 mars 2012 à 13:25
Bonjour,
Encore moi, après le DBcomboBox le DBedit !!
J'ai, à la conception, configuré la chaine TSqlconnexion, TSQLQuery, TDataSetProvider, TClientDataSet, TDataSource, TDBedit. La première valeur remonter par TSQlQuery est affiché dans le DBedit.
La requete est "select annee_fab from voiture"
A l'éxécution, dans l'évenement Onclick d'un bouton, j'ai ce code dans le ClientDataset :
if ClientDataset3.State in [dsEdit,dsInsert] then
ClientDataSet3.Post;
ClientDataSet3.ApplyUpdates(-1);
Si je modifie la valeur du DBedit puis je clique sur le bouton j'obtiens ce message d'erreur :
"Update affected more than 1 record"
Je ne comprend pas, pourtant le clientDataSet est sur first et il n'affiche qu'une valeur dans le DbEdit donc c'est cette valeur à mettre à jour ?
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 12 mars 2012 à 16:12
Salut Jean,
ça veux dire simplement qu' il lui est impossible de faire la mise à jour car il ne sait pas quel enregistrement mettre à jour étant donné que plusieurs enregistrements sont "candidats" à la mise à jour (côté SQL serveur) !
Il faut tout simplement éviter les doublons ou encore créer une clé unique dans la table.
PS: il te manque les connaissances necessaires et tu risques de buter sur ce genre de problèmes tous les jours si tu t' obstines à apprendre sur le tas. Un peu de lecture est plus que conseillé.
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 20141 13 mars 2012 à 11:03
Bonjour Mauricio,
Pour moi le ClientDataSet avait un pointeur sur l'enregistrement en cours et donc savait quel champs à modifier. Mais effectivement comment peut-il connaître la clé primaire de la table, oups, désolé
J'ai donc chercher comment indiquer la clé primaire. Mais j'ai pas trouvé de champs keyfield ou un truc du genre ??
J'ai fais cela, mais sans grand succes
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 13 mars 2012 à 11:12
Salut Jean,
comme tu y es presque et que je suis EXTREMEMENT sympa, double cliques sur le TClientDataset et sélectionne le champ clé "idVoiture".
Maintenant, cherche la propriété ProviderFlags du champ et ajoute l' élément pkInKey.
A+
PS: attention au champ clé qui doit avoir Required à false si c' est un champ AutoInc!
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 13 mars 2012 à 13:25
Salut,
Je t' expliquerai bien pourquoi ça marche d' une façon et pas d' une autre mais j' ai largement répondu à la question posée et en plus, je vais pas écrire tout le manuel de la programation SQL découpé en petits messages: je te conseille de commencer à lire l' aide Delphi qui m' a beaucoup éclairé (regarde l' aide sur les propriétés providerFlags etc ...).
A+
PS: tu as des unités d' aide à la programation mySQL sur le site de mes compos ici: