Comment éviter les erreurs de clé en SQL [Résolu]

Signaler
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
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

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
3 secondes..

cantador
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008

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.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008

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);
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008

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.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008

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
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
1
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
Messages postés
12
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
28 août 2008

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.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
if dm.queryExe.recordcount>=1 then

if dm.queryExe.recordcount>0 then

mais il y a plus simple..

cantador