Comment éviter les erreurs de clé en SQL

Jenojen Messages postés 12 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 28 août 2008 - 27 août 2008 à 15:01
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 18 sept. 2008 à 21:45
Bonjour,

J'aimerais
savoir comment éviter d'enregistrer deux fois les mêmes données
lorsqu'on passe par le SQL. En gros j'ai un bouton derrière lequel y a
du SQL (insert into...) et j'aimerais qu'avant d'exécuter  je puisse
vérifier que les données que je veux entrer ne sont pas dèja dedans
pour éviter les erreurs avec les clés primaires. En gros un truc qui
vérifie dans la table que le clé primaire n'y soit pas déjà. Pour mon projet Hippodrome j'aimerais pouvoir renvoyer un showmessage si jamais la valeur de clé primaire introduite se trouve déja dans ma table.

Merci de me répondre.

7 réponses

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 août 2008 à 15:18
Salut,

Met le champs ou tu ne veus pas qu'il y ai deux fois les même valeurs en UNIQUE...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
Jenojen Messages postés 12 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 28 août 2008
27 août 2008 à 15:27
Merci de ta réponse.

Oui ça c'est fait mon champ est déclaré en tant que clé primaire. Mais ce que je veux c'est qu'il n'y ait pas d'erreur possible quand j'utilise le programme. Qu'il ne me dise pas violation de clé. En gros j'aimerais savoir comment parcourir ma table à la recherche d'une clé similaire à celle qui s'apprête à être introduite pour que je puisse dire au programme s'il trouve cette même clé: 'Cheval déjà introduit dans la course' en l'occurrence. Parce que si j'introduis deux fois une même clé le programme plante.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 août 2008 à 15:43
Ba il suffis de faire un insert avec une clause WHERE ...

INSERT INTO table VALUES('valeur','...') WHERE (SELECT cle FROM) NOT = valeur;

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 août 2008 à 15:44
Petite correction :

INSERT INTO table VALUES('valeur','...') WHERE (SELECT cle FROM table</gras>) NOT = valeur;

Si la réponse vous convient, pensez : Réponse acceptée !
0

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

Posez votre question
Jenojen Messages postés 12 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 28 août 2008
27 août 2008 à 15:55
Merci beaucoup pour ta réponses!
Est ce que pourrais m'insérer ton code la dedans parce que j'ai essayé mais sans succès. En sachant que idcheval est la valeur qui ne peut se retrouve deux fois dans cette table.

with dm.queryExe do
  begin
   sql.clear;
   sql.add('insert into tparier (idtickets, posarrivee, idcheval) values (');
   sql.add(dm.tTickets.fieldbyname('idtickets').asstring +',');
   sql.add(inttostr(compteur)+ ',') ;
   sql.add(dm.tParticiper.fieldbyname('idcheval').asstring + ')');
   ExecSQL;
   sql.text:= 'select * from tcourses';
   open;
 end;

Merci d'avance pour ton aide
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
27 août 2008 à 15:58
Olala, je ne connais pas du tout cette structure...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
18 sept. 2008 à 21:45
Salut,

je ne sais pas si cela existe avec access mais le plus logique serait un
if not exists() insert into

with dm.queryExe do
  begin
   sql.clear;

   sql.add('if not exists(select* from tparier where idcheval = ' + 
                dm.tParticiper.fieldbyname('idcheval').asstring + ' and idtickets = ' + 
                dm.tTickets.fieldbyname('idtickets').asstring + ') ');

   sql.add('insert into tparier (idtickets, posarrivee, idcheval) values (');
   sql.add(dm.tTickets.fieldbyname('idtickets').asstring +',');
   sql.add(inttostr(compteur)+ ',') ;
   sql.add(dm.tParticiper.fieldbyname('idcheval').asstring + ')');
   ExecSQL;
   sql.text:= 'select * from tcourses';
   open;
 end;
0
Rejoignez-nous