La requête SQL SELECT

Résolu
kj_83 Messages postés 28 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 29 juin 2006 - 13 juin 2006 à 09:46
kj_83 Messages postés 28 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 29 juin 2006 - 15 juin 2006 à 14:12
Boujour à tous , j'ai juste une petite question toute bête : je voudrais savoir si lorsqu'on utilise la requête SQL SELECT celle-ci renvoie une valeur.Je demande ça car je réalise en ce moment un programme de gestion de stock ou l'on peut rentrées des informations dans une base de donnée et donc de mon coté j'aimerais controler si les infos rentées ne si trouve pas déjà (en d'autre terme gérer les doublons) .Voilà pourquoi SELECT m'interesse.

Salut , bonne journée .

5 réponses

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
13 juin 2006 à 14:34
C'est parfait,

Je pense que tu as fais les bons choix (Juste pour le type numérique je crois que access a un type Entier ou entier Long qui serait meilleur mais je suis pas spécialiste access).
Tu as eu raison d'indexé ton champ sans doublon (en général la DB doit collé le plus a la réalité donc on essaira toujours de mêtre les contrainte au plus serrer)(Avis perso...).

Maintenant tu as bien décrit le problème quand tu tente d'insérer une valeur déjà existante tu as une erreur (normale puisque les doublons ne sont pas autorisé).
Il y'a deux solution :

méthode de la gestion des erreur :
dans ton application tu met un try ... catch
ex (désolé syntax VB) :
TRY
   'Ajout dans la base access
CATCH ex as system.Exception
   'On test ex si l'erreur indique que la valeur existe déjà:
      'Afficher ->impossible d'entrer cette valeur elle éxiste déjà.
   'Sinon
      throw (ex)
End CATCH

Cette solution fera travailler l'application et peu le moteur de DB.

méthode de la vérification préalable :
Pseudo code:

Si [SELECT Count(*) FROM tblProduit WHERE NomProduit = 'Non du produit']=0
ALORS
   'Afficher ->impossible d'entrer cette valeur elle éxiste déjà.
SINON
   'Ajout dans la base access
FIN SI

Explication :

SELECT Count(*)
Compte le nombre d'enregistrement selectionner.
FROM tblProduit
Indique la table selectionner.
WHERE NomProduit LIKE 'Nom du produit'
Indique la condition de selection.

Lors de la construction de ta requette 'Nom du produit' proviendra d'une variable pense à doubler les apostrohe(') pour indiquer a access quel ne marque pas la fin de la chaine ex :

SELECT Count(*) FROM tblProduit WHERE NomProduit  ='P'tit Prod''
SELECT Count(*) FROM tblProduit WHERE NomProduit ='P''tit Prod'''

n'étant pas trés abituer au C++ et ne sachant pas dans quel environnement tu travaille, je ne peut pas te dire comment tu dois executer la requette et en récupérer le résultat.

Je te conseille plutôt la première solution.

J'espère que tout ceci t'aura aider.
3
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
13 juin 2006 à 10:19
Salut,

ben avec "select count(*) from ..." tu peut avoir le nombre de lignes qui correspondent à un condition

Mais si tu veu juste vérifier la clé primaire, moi à ta place j'enverrai la requete et je traiterai le numero d'erreur renvoyé.

Mais si c pour vérifier plus de trucs je ferai un trigger
0
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
13 juin 2006 à 13:02
Salut,

Alors ca c'est de la réponse ou je m'y connait pas PoFMaN si tu ne veut pas perdre ton temps tu peut faire encore plus rapide en ne répondant pas du tout (pense-tu réelement qu'ils faille parler de trigger a quelqu'un qui n'est pas familiariser avec SELECT).

 kj_83 il y a beaucoups de choses que peut faire une requette select (récupération de plusieurs valeurs, récupération d'une valeur unique, Assignation ... si tu veux plus d'infos pose des questions bien concrete.

Toutefois PoFMaN à raison de te parler de clef primaire et d'index pour gérer les doublons mais une fois encore rien ne peut être vraiment expliquer si tu ne transmet pas quelque eléments : La définition de la table en jeu et une description assez détailler de ton problème.
0
kj_83 Messages postés 28 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 29 juin 2006
13 juin 2006 à 13:41
Salut,

Mon programme comporte une base donnée Access composé de 4 tables dont celle qui nous intéresse prénomée tblProduit , elle est composée de 2 champs :

NomProduit  (de type Texte)  j'ai choisie de l'indexé sans doublons (j'avais le choix avec ou sans doublons).Problème, lorsque dans mon programme (en C++) je rentre un produit qui se trouve déjà dans la base de donnée cela génère une erreur (mais c'est normal puisqu'il n'accepte pas les doublons) , je ne sais pas si le fait ,d'indexé de la sorte est la bonne solution.

Le deuxième champ est : StockMini qui représente la quantité minimum du produit à sa création (de type Numérique et non indexé).Encore une fois je ne sais pas ci cela convient.

Et en plus il y une clé primaire dont je ne maitrise pas tout les comportements ( de type NuméroAuto, indexé sans doublons)  qui s'incrémente à chaque nouvel enregistrement.A ce sujet j'aurais une autre petite question concernant le fonctionnement de cette clés primaire : elle numérote chaque enregistrement en partant de 1 et en incrémentant à chaque fois, et ce que je ne comprends pas c'est par exemple si il y a 5 enregistrements ( de 1 à 5) et si l'on décide de supprimer le 4ème et le 5ème le prochaine enregistrement aura pour numéro 6 ce qui nous donne : 1 , 2 , 3 , 6 comme numéro d'identification dans la table.

Cette parenthèse bouclée revenonsant au problème : dans le programme l'utilisateur à la possibilité de rajouter un produit dans la base de donnée , je voudrais savoir si le produit rentré par l'utilisateur ne se trouve pas déjà dans la base de donnée dans ce cas là il faudrait le prévenir .

Voilà désolé pour la longueur j'espère que c'est plus claire maintenant.
0

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

Posez votre question
kj_83 Messages postés 28 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 29 juin 2006
15 juin 2006 à 14:12
Salut ,

Désolé pour ma réponse tardive ça marche super

A bientot.
0
Rejoignez-nous