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

Requêtes et SQL. Discussion :

Requête pour incrémenter de +1 le champ d'une table à partir d'une valeur fixée dans un autre champ [AC-2010]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Juin 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 18
    Par défaut Requête pour incrémenter de +1 le champ d'une table à partir d'une valeur fixée dans un autre champ
    Bonjour,

    Je sollicite votre aide car je bloque actuellement sur un problème qui de prime abord pourrait paraitre simple.
    En clair, je souhaite construire une requête qui permettra d'incrémenter de +1 un champ précis d'une table dès l'instant où l'enregistrement d'une donnée dans une autre table est effectuée.
    Pourquoi ce mécanisme, car je suis en train de mettre en place un système d'entrée/sortie de matériel. Dès que l'on enregistre une sortie de matériel (disons de la table A), cela doit rajouter +1 dans un champ (localisé dans une table B) que j'ai arbitrairement nommé "compteur", à partir de là, je récupère cette valeur via un champ calculé (nommé "stock actuel") qui effectue une soustraction entre le chiffre correspondant au stock initial et le chiffre stocké dans le champ "compteur".

    En résumé :
    Enregistrement validé dans Table A
    Ajout de +1 dans Compteur (Table B)
    Champ calculé => Stock actuel (Table B) = Stock (Table B) - Compteur (Table B)

    J'espère que mon histoire est clair,

    Merci par avance pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Pourrais-tu préciser quelle version d'Access tu utilises ?
    La solution pourrait varier selon la version.

    Sinon, en Access on évite de procéder ainsi car si tes données historiques changent ou si tu rates une sortie tes soldes seront faux.

    Ce qui est recommandé est de faire le cumul des entrées et sorties à une date données.

    ex :

    tblMouvementStock
    clefMouvement
    DateMouvement
    ClefArticle
    QteMouvement (+/-)
    CodeTypeMouvement

    Si tu veux le solde au 2016-08-18, tu fais un truc du genre DSum("QteMouvement"; "tblMouvementStock"; "[date]<=#2016-08-18#") .

    CodeTypeMouvemnet peut être quelque chose comme
    ENTREE
    SORTIE
    PERTE SUR STOCK
    GAIN SUR STOCK
    STOCK INITIAL ou STOCK CONSTATE

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Juin 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 18
    Par défaut
    Bonjour,

    Merci pour cette réponse rapide.

    Je comprends la démarche.
    Ceci étant, mon besoin est de savoir précisément si via une requête d'ajout par exemple, cela est réalisable.
    J'utilise Access 2010.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Pour faire le +1, tu peux utiliser une requête d'ajout, du code VBA, une macro ou une macro de données.

    Le point délicat va être de détecter la modification.

    Je vois deux solutions :
    1. Dans un formulaire, sur l'événement Après Ajout tu déclenches le mécanisme qui fait "+1".
    2. Avec une macro de données. Après Ajout tu déclenches le mécanisme qui fait "+1".


    Les 2 solution semblent identiques et dans leur principe c'est vrai.

    L'avantage de la solution 1 c'est que tu vois nettement où se font les choses et c'est assez facile à mettre au point et à débugger.
    LE gros inconvénient c'est que si tu fais des ajouts SANS passer par le formulaire ton compteur ne sera pas mis à jour.

    La solution 2 résout ce problème puisque c'est directement au niveau de la table que tu traites l'ajout.

    J'ai un peu joué avec les macros de données et je leur ai trouvé les inconvénients majeurs suivants :
    1. Pas de débuggeur (on peut avoir une sorte de Debug.Print).
    2. Pas d'erreur attrapable si la macro plante (il y a une table système qui te donne l'erreur).
    3. Si tu fais une modification en dév., il faut la refaire en prod. (Il est peut-être possible de "Copier" une macro mais c'est à faire manuellement. Pas d'import possible.).


    Plus agaçant que vraiment problématique, l'éditeur n'a pas la souplesse de celui de VBA.

    Si tu veux approfondir les macros de données, il y a un bon tutoriel sur le site.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre averti
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Juin 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Juin 2016
    Messages : 18
    Par défaut
    C'est précisément à cette étape que je bloque.
    Je n'arrive pas à construire la requête permettant d'incrémenter de +1 le champ "Compteur", en prenant en compte le fait que l'élément déclencheur est l'ajout d'un nouvel enregistrement à partir d'une autre table.

    Car la difficulté, je ne l'ai pas précisé, c'est que le +1 doit être enregistré sur une ligne correspondant au même matériel qui a été sélectionné à partir d'une autre table.
    Je suppose que la requête serait du type :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Compteur VALUE 1 FROM T_Accessoires INNER JOIN T_Suivi_Dotation ON T_Accessoires.Accessoire = T_Suivi_Dotation.Accessoire;

    Pour précision :
    T_Accessoire correspond à la table intégrant le champ "Compteur"
    T_Suivi_Dotation correspond à la table intégrant les champ permettant de sélectionner l'accessoire qui doit sortir du stock

    Merci encore pour l'aide apportée

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Désolé je dois rater quelque chose.

    Est-ce que tu
    1. augmentes de 1 la valeur d'un champ existant (L'équivalent de MonChamp=MonChamp+1)
    2. ajoutes un enregistrement contenant 1 dans une table ?


    Est-ce bien cette étape qui te pose un problème pas de déterminer quand tu dois le faire ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 18/05/2013, 20h54
  2. Réponses: 7
    Dernier message: 22/06/2012, 12h12
  3. [AC-2007] Requête analyse croisée et ajout de valeurs comprises dans d'autres champs
    Par Alias_bel dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/03/2012, 12h17
  4. Réponses: 6
    Dernier message: 07/02/2006, 14h44
  5. remplir un champ d'une table à partir d'une autre table
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/02/2005, 16h48

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