Comment éviter les erreurs de clé en SQL

Résolu
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 à 11:44
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 28 août 2008 à 12:11
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éja.

Merci de me répondre.

15 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 13:32
Bonjour

Ce sujet concerne plutot le SQL que Delphi. Il serait bon d'aller voir sur le forum associé au SQL (voir ici)

N.B. Ce sujet est un sujet récurrent. Faut utiliser le moteur de recherches!!

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 18:11
Bonsoir Cantador

"sans ajout de ligne de code" soit ! mais en modifiant alors la structure de la base de données ...

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 août 2008 à 18:34
3 secondes..

cantador
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 19:11
Allez après j'arrete

>3sec....
Tout dépend de la façon dont la gestion de la base a été faite et de la profondeur d'imbrication et des liens de celle-ci dans un système existant déjà bien ancré. Remettre en cause la structure d'une base de données peut engendrer beaucoup, voir même beaucoup trop de modifications, si la conception intiale a été mal faite.

P.S. Je sais que je ne t'apprend rien, mais cette remarque pourra toujours servir à Jenojen   

<hr />"L'imagination est plus importante que le savoir." Albert Einstein
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 à 19:20
Ma base de données a été faite sur de très bonnes bases vu qu'elle a été faite sur base du dico donné par le prof donc pas de soucis de ce coté la. Mais je sèche toujours quant à vérifier si les données que je veux rentrer ne se trouvent pas déja dans ma table. De plus la proposition de champ incrémenté ne tient pas ici, étant donné que ce qui sert de clé primaire à ma table tparier ici en l'occurence est une clé extérieure.

J'ai juste besoin d'un code qui puisse véirifer que les données que je veux enregistrer par une requête sql ne sont pas dèja présentes dans ma db parce que si je les ajoute mais quelles sont dèja présentes (clé primaire oblige) alors le prog plante tout simplement.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 19:54
Je te donne une piste :
Tu peux rechercher si un enregistrement existe par un "SELECT * FROM MaBaseDeDonnée WHERE (Champ1=Valeur)"  Si la requête ne te renvoit rien c'est que l'enregistrement n'est pas présent dans la base, sinon après soit tu modifies l'enregistrement existant soit tu avertit l'utilisateur et tu ne changes rien.

P.S. Je te conseille de nouveau d'aller voir sur le forum SQL.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
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 à 20:05
Merci pour ta réponse.

J'ai été voir mais j'ai pas trouvé si tu sais me rediriger vers un lien qui explique ça je t'en serais reconnaissant. J'ai créé mon propre topic sur la question mais sans succès et la méthode que tu m'expliques ici, j'en avais tenté un ersatz mais je ne savais pas comment appliquer cette requète et comment recevoir la réponse.
En gros j'avais l'idée mais pas la facon de faire.
Peux tu spécifier un peu plus ton aide ou me renvoyer vers un topic qui explique ça au mieux?

Merci d'avance.
sql.text:('select idcheval from tparier where idcheval ' +dm.tparticiper.fieldbyname('idcheval').asstring);
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 20:16
Il ne faut pas oublier les guillemets, créés par la fonction QuotedStr :sql.text:'SELECT * FROM tparier WHERE idcheval'+QuotedStr(dm.tparticiper.fieldbyname('idcheval').asstring);  

Il faut penser à utiliser le moteur de recherche !!!
http://search.codes-sources.com/r.aspx?r=select&s=15

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
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 à 20:30
Merci pour ta réponse.

Le champ idcheval est un numérique.
J'ai suivi ton lien et ces sujets renvoient quasi tous à la supression de doublon et moi ce que je veux c'est empêcher leur création et je n'ai rien trouvé de tout cela en suivant ce lien.
Mon problème n'est pas la ligne sql en soi, c'est de savoir qu'en faire.Comment en retirer le résultat pour l'appliquer à une condition.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 20:45
Le lien était juste là pour te montrer le moteur de recherche.... C'est à toi de faire les recherches

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 août 2008 à 21:48
sert de clé primaire à ma table tparier ici en l'occurence est une clé extérieure.
une piste :
Cherche du côté de KeyViol

cantador
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 à 21:55
Je dois avouer que je ne comprends pas trop ta piste. Que ce soit sur le site ou dans google je n'ai aucune correspondance sur keyViol
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 août 2008 à 22:01
keyviol = key violation !!!!

P.S. Ceci est ma dernière contribution à ce post.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Jenojen Messages postés 12 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 28 août 2008
28 août 2008 à 10:02
Désolé si j'ai pu en agacer certains ou paraitre paresseux.

Voici tout de même la solution à mon problème.

procedure Tgestionparis.dbChevauxDblClick(Sender: TObject);
begin
With dm.queryExe do
 begin
  sql.clear;  sql.text:( 'select idcheval from tparier where idcheval ' +dm.tparticiper.fieldbyname('idcheval').asstring + 'and idtickets = '+dm.tTickets.fieldbyName('idtickets').asstring);
  execsql;
  open;
 end;
if dm.queryExe.recordcount>=1 then
ShowMessage('Ce cheval est deja joué')
else
begin

Merci d'avoir essayé de m'aider.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 août 2008 à 12:11
if dm.queryExe.recordcount>=1 then

if dm.queryExe.recordcount>0 then

mais il y a plus simple..

cantador
0
Rejoignez-nous