IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Gérer des références" uniques" de produits avec plusieurs versions de produit [AC-2007]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Gérer des références" uniques" de produits avec plusieurs versions de produit
    Bonjour,

    Bon je galère depuis un bon moment sur le meilleur moyen de gérer le problème suivant :

    J'ai une BDD de composants incluant notamment la référence du composant, son nom, mais aussi sa version.
    Je voudrais que lorsque via un formulaire j'ajoute un nouveau composant, Access me génère automatiquement une référence de composant, incrémentant simplement le nombre total de composant uniques existants, mais par ailleurs qu'on puisse créer une nouvelle version d'un composant existant; ça sera plus clair avec un exemple ...

    J'ai déjà 10 composants dans ma base et je créé les suivants :
    REF-00011-1 Bidule version 1
    REF-00012-1 Machin version 1
    REF-00012-2 Machin version 2
    REF-00013-1 Chose version 1

    9a me parait tout bête, mais je sais pas trop comment faire...
    Merci de votre aide!

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut Manque des informations
    Bonsoir,

    Ce n'est pas très clair ou il manque des informations

    J'imagine que vous disposez d'une table "T_Composant" avec les champs "RefComposant", "NomComposant" et éventuellement une clé qui identifierait chaque enregistrement de votre table, comme par exemple un champ numéro-auto.

    Avec cette table vous pourriez réaliser une sous-requête qui calculerait le numéro de version du composant en fonction du nom du composant et de son numéro unique (la clé):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
     (Select Count(RefComposant) From T_Composant T1 where T1.RefComposant=T_Composant.RefComposant and T1.numComposant<=T_Composant.numComposant)

    Ensuite, vous pourriez injecter ce SQL dans une requête principale pour obtenir le numéro de version (champ numVersion) pour chaque ligne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_numComposant, RefComposant, NomComposant, (Select Count(RefComposant) From T_Composant T1 where T1.RefComposant=T_Composant.RefComposant and T1.numComposant<=T_Composant.numComposant) AS numVersion
    FROM T_Composant;

    Ce numéro de version pourrait également servir à créer la référence complète par concaténation...

    Cdlt,

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour votre réponse et désolé si je n'ai pas été clair.

    Vous aviez bien deviné, j'ai effectivement une table T_Composants contenant les champs NomComposant, RefComposant et IDComp (la clé avec numéro auto)

    Ok pour la première requète, elle fonctionne et met bien une nouvelle version quand deux composants ont la même référence (j'ai pas bien compris ce qu'était T1 cela dit...)
    Par contre je sèche un peu sur la deuxième requète :

    - où la mettre? je ne comprend pas bien ce que vous entendez par injecter cette première requete dans une requète principale
    - vous indiquer dans le code une table T_numComposant, je dois créer une table en plus?

    Merci!

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Non, en fait vous disposez d'une seule table et c'est la deuxième requête, la requête principale qui nous intéresse.
    Elle contient tout et se base uniquement sur la table T_Composant, elle devrait vous renvoyer les numéros de versions.

    Par contre il s'est glissé une coquille dans le sql que je vous ai transmis, le voici corrigé:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT numComposant, RefComposant, NomComposant, (Select Count(RefComposant) From T_Composant T1 where T1.RefComposant=T_Composant.RefComposant and T1.numComposant<=T_Composant.numComposant) AS numVersion
    FROM T_Composant;

    a+

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ah ok c'est ce qu'il me semblait

    Par contre quand je créé cet nouvelle requête et que je l'exécute j'obtiens l'erreur suivante : "Vous avez écrit une sous requête pouvant renvoyer plus d'un champ sans utiliser le mot réservé EXISTS dans la clause FROM de la requête principale. Révisez l'instruction SELECT de la sous requête pour obtenir un seul champ"

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut Re
    Ce type de requête avec la fonction Count et sans regroupement sur un champ ne renvoie qu'un résultat, donc je ne comprends pas ce message d'erreur.

    Pouvez vous poster le code SQL de votre sous-requête ?

    En dernier recours vous pouvez utiliser à la place une fonction de domaine :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("RefComposant","T_Composant","RefComposant='" & [RefComposant] & "' and numComposant<=" & [numComposant]) AS numVersion

    Et la requête principale devient donc:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT numComposant, RefComposant, NomComposant, DCount("RefComposant","T_Composant","RefComposant='" & [RefComposant] & "' and numComposant<=" & [numComposant]) AS numVersion
    FROM T_Composant;

    a+

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voici le code de ma requête (IDComp étant ma clé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Expr1: (SELECT IDComp, RefComp, NomComposant, (Select Count(RefComp) From Composants Where T1.RefComp=Composants.RefComp and T1.IDComp<=Composants.IDComp) AS VerComp From Composants)
    J'ai essayé avec la fonction de domaine...j'ai la même erreur ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Expr1: (SELECT IDComp, RefComp, NomComposant, DCount("RefComp","Composants","RefComp='" & [RefComp] & "' and IDComp<=" & [IDComp]) AS VerComp

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut Re
    Il faut supprimer ce "expr1:" devant la requête ?
    De plus, vous avez oubliez de renommer la table "composants" en "T1" dans la sous-requête...

    Normalement, en mode création de la requête principale, dans l'onglet "Créer", choisir le menu "Affichage", puis "Mode SQL" et enfin coller ce sql dans l'éditeur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDComp, RefComp, NomComposant, (Select Count(RefComp) From Composants T1 Where T1.RefComp=Composants.RefComp and T1.IDComp<=Composants.IDComp) AS VerComp From Composants

    Encore une fois ce code SQL, c'est celui de votre requête principale, celle qui affiche le résultat final...

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Okkk ça marche

    bon ba il me reste une question de débutant du coup...

    comment je fais pour que le résultat de cette requète aille me remplir automatiquement mon champ Version (VerComp) de ma table Composants?

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    Libre à vous de créer un champ pour le numéro de version, mais pourquoi sauvegarder dans une table une valeur qui peut être calculée dans une requête.

    Peut-être pour une question de performance si vous avez beaucoup de composants ?

    Dans ce cas, vous pouvez utiliser une requête mise à jour pour actualiser ce champ :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Composants SET VerComp = DCount("RefComp","Composants","RefComp='" & [RefComp] & "' and IDComp<=" & [IDComp]);

    Dans ce code le nom de votre champ version se nomme "VerComp".

    Je vous laisse donc choisir...

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    De rien,

    Sujet intéressant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2012, 18h13
  2. [AC-2007] probleme produit avec plusieurs prix
    Par badam dans le forum Access
    Réponses: 5
    Dernier message: 15/02/2011, 16h48
  3. Commande avec plusieurs type de produit
    Par jeffciara dans le forum Schéma
    Réponses: 3
    Dernier message: 06/02/2008, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo