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

Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 11:44 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 13:32
3
Merci
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

Merci WhiteHippo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de WhiteHippo
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 août 2008 à 16:00
0
Merci
@Jenojen:


Si tu utilises une clé primaire auto-incrémentale, ce souci est réglé automatiquement (sans ajout de ligne de code)
Aucun numéro crée ne peut se retrouver ultérieurement.

cantador
Commenter la réponse de cs_cantador
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 18:11
0
Merci
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
Commenter la réponse de WhiteHippo
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 août 2008 à 18:34
0
Merci
3 secondes..

cantador
Commenter la réponse de cs_cantador
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 19:11
0
Merci
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
Commenter la réponse de WhiteHippo
Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 19:20
0
Merci
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.
Commenter la réponse de Jenojen
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 19:54
0
Merci
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
Commenter la réponse de WhiteHippo
Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 20:05
0
Merci
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);
Commenter la réponse de Jenojen
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 20:16
0
Merci
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
Commenter la réponse de WhiteHippo
Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 20:30
0
Merci
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.
Commenter la réponse de Jenojen
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 20:45
0
Merci
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
Commenter la réponse de WhiteHippo
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 août 2008 à 21:48
0
Merci
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
Commenter la réponse de cs_cantador
Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 21:55
0
Merci
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
Commenter la réponse de Jenojen
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 27 août 2008 à 22:01
0
Merci
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
Commenter la réponse de WhiteHippo
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 août 2008 à 22:16
0
Merci
@Jenojen:

Faut chercher un peu !
aide delphi + forum + google

A cause de ta paresse, tu viens de perdre un excellent combattant..

cantador
Commenter la réponse de cs_cantador
Jenojen 12 Messages postés samedi 1 décembre 2007Date d'inscription 28 août 2008 Dernière intervention - 28 août 2008 à 10:02
0
Merci
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.
Commenter la réponse de Jenojen
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 août 2008 à 12:11
0
Merci
if dm.queryExe.recordcount>=1 then

if dm.queryExe.recordcount>0 then

mais il y a plus simple..

cantador
Commenter la réponse de cs_cantador

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.