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 :

Update automatique d'un champ pour toute la table


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Update automatique d'un champ pour toute la table
    Bonjour,

    je n'ai aucune idée par ou commencer afin de réaliser mon souhait sur ma base de données, ni même si cela est réalisable.

    Voila, en autre je dispose:

    d'une table T_Personnel avec des champs: ID (clé primaire), Points_Pers, Profil-Pers, Actif_Pers ( case à cocher Vrai ou faux).
    d'une table T_Transactions avec des champs: num_com (sans doublons), ID_Trans, Nom_Trans, Prenom_Trans, Date_Trans, Montant_Trans, Justification_Trans

    Pour plus de 600 membres, je dois injecter un nombre x ou y de points suivant 2 profils distincts ( et si Actif coché) une fois par an, j'y ajouterai dans la T_Transactions la mention Dotation XXXX (suivant l'année en cours) dans le champ Justification_Trans.

    En créant une table supplémentaire reprenant la dotation suivant le profil, serait-il possible d'un clic d’incrémenter l'UPDATE à tout le Personnel et de laisser la trace dans la table T_Transactions?

    La cerise sur le gâteau, un Personnel peux changer de profil au cours de l'année (en début de mois). La possibilité de corriger la dotation suivant un calcul du nombre de mois prestés et à prester dans l'un et l'autre des profils (en douzième), en d'en laisser trace dans la table T_Trans avec mention dans le champs justification :"Changement de profil au XX/XX/XXXX (date)".

    La solution est-elle compliquée pour moi, un grand débutant?
    Pouvez-vous m'aiguiller vers la solution?

    Merci d'avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pourrais-tu preciser quelle version de Access tu utilises ?

    Aussi pourrais-tu mettre un exemple de ce a quoi tu veux arriver ?

    Enfin si j'ai bien compris, ce nombre de point X ou Y est fixe et le meme chaque annee, c'est bien cela ?
    Ce nombre pourrait-il varier dans les annees futures ?

    A priori, tu peux faire cela avec une simple requete de mise a jour et les fonctions Iif() et DateDif() mais avec un exemple il sera plus facile de te guider.

    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 régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Bonjour, et merci de l'interêt porté à mes questions.

    J'utilise une base de données ACCESS 2007-2010.

    Pour l'exemple:

    une Table T_Dotation avec champs Profil (en relation avec Profil_Pers de la table T_Personnel): U, NU, NA et champ Dotation avec respectivement: 31600(points), 9760(points), Non applicable (o points)

    Dans Points_Pers (Table T_Personnel), j'a le solde de points restant du client.

    Si ce client est actif (case à cocher dans champ Actif_Pers (T_Personnel)), suivant son profil (U, NU, NA) dans champs Profil_Pers (T_Personnel) je lui ajoute le 01 janvier une dotation (qui pourrait être modifiée dans le futur, ce pourquoi de la table T_Dotation ci-dessus)

    Exemple:
    Sur un clic mise à jour dotation de tout le personnel
    le client N°1 actif en profil U ayant un solde au 31/12/2018 de 500 points, voit au 01/01/2019 (jour et mois fixe, année suivant date clic) son solde passer à (500+31600)=32100 Points.
    le client N°2 actif en profil NU ayant un solde au 31/12/2018 de 500 points, voit au 01/01/2019 (jour et mois fixe, année suivant date clic) son solde passer à (500+9760)=10260 Points.
    le client N°3 étant actif en profil Na tout comme le client N°4 non actif ne verraient rien modifier leur solde respectif.

    A l'aide d'un formulaire : CHANGEMENT DE PROFIL (uniquement valable de profil "U" vers "NU" et inversement):

    le 01/06/2019 (date toujours le premier du mois), le client N°1 passe en profil "NU", son solde (32100 points) doit donc être modifié.
    il à le droit à son solde 2018(500) additionné de 01/01/2019 au 31/05/2019 à une dotation de 5X(31600/12), additionné de 01/06/2019 au 31/12/2019 à une dotation de 7X(9760/12)
    Le solde de départ (32100 Points) devient donc : 19360 Points

    Ce nouveau solde s'enregistrerai (UPDATE) dans la T_Personnel, champ Points_Pers.
    La trace de la dotation annuelle s'enregistrerait dans la table T_Transactions dans les champ Date_Trans (date réelle du clic), Montant_Trans (dotation allouée), dans le champ Justification_Trans serait inscrit la mention "dotation annuelle XXXX (suivant date en cours).
    La trace du changement de profil s'enregistrerait aussi dans la T_Transactions dans les champs Date_Trans (date réelle de la modification); Montant_Trans (le(s) chiffre(s) de différence calculé), Dans le champ Justification_Trans, serait inscrit la mention "Modification de profil en date du XX/XX/XXXX (Date de modification de profil signalé dans le formulaire)

    Espère avoir été assez clair dans mon explication, mais il n'est pas toujours facile de retranscrire ses pensées.

    Merci à vous

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ca va prendre un peu de temps a te repondre car il faut argumenter.
    Je te reviens.

    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 régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Super merci pour l'aide apportée, je peux au besoin envoyé ma BDD, mais je sais pas comment on fait?

    Cela sera peut être plus facile pour tester, voir mieux comprendre?

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Non merci pour la BD, je ne suis pas equipe pour chez moi.

    Bien revenons a tes moutons :-).

    Idealement il ne faut pas stocker le resultat d'un caclul dans une table.
    Il est recommande de faire le calcul a partir des etapes et d'afficher le solde.
    Donc on devrait avoir quelque part quelque chose comme :

    tblGestionPoint
    ClefGestionPoint
    ClefPersonne
    DateGestionPoint
    QtePoint (+/-)

    Et faire la somme de tous les QtePoint de tblGetsionPoint pour une personne jusqu'a la date donnees.

    Cela ne change pas grand chose a la maniere de le calculer mais cela permet d'avoir des donnees qui sont sures.
    Car si tu changes une des valeurs d'ajout ou de retrait SANS passer par tes formulaires, tu peux te retrouver avec un solde faux.

    Pour ton second probleme : il faut avoir quelque part dans la BD l'info sur le changement de profil.

    Apres le calcul est assez simple :

    1. Initialiser la date de debut de profil annuel (si j'ai bien compris, par defaut le 1 janvier de l'annee)
    2. Trouver la date de changement de profil de cette personne pour cette annee si elle existe, superieure a la date de debut de profil courant.
    3. Si on trouve cette date, calculer le nombre de mois depuis la date de debut de statut a la date de changement.
    4. Recuperer le nombre de point de l'annee en function du profil.
    5. Calculer le nombre de point obtenu au prorata : NbMois / 12 * NbPointAnnee.
    6. Si tu as une table des mouvements detailles, ecrire cette dotation.
    7. Sinon additionner en memoire.
    8. Changer la date de debut de profil pour la nouvelle date.
    9. Boucler pour trouver la prochaine date de changement de profil ou la fin de l'annee.


    Avant d'aller plus loin, il serait plus facile de faire le calcul si on avait le debut et la fin dans le meme enregistrement.
    Donc pour les profils ca ressemblerai a cela :

    tblChangementProfil
    ClefChangementProfil
    DateDebutProfil
    DateFinProfil (pour le profil actif tu peux mettre 9999/12/31 comme cela c'est toujours valide).
    CodeProfil

    Avec ces infos le calcul du nombre de mois et de la proportion est instantane.

    Est-ce une modification envisageable pour toi ?

    Sinon, ma solution sera plus facile a implanter en VBA qu'en SQL.

    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.

  7. #7
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    La réflexion est correcte pour le résultat que je désire. je vais déjà regarder l'impact de la modification des tables dans ma BD

    Mais je suis incapable que cela soit en VBA ou SQL d'écrire cette procédure.

    Je vais essayer quand même, ne pouvant laisser ma Bd en cet état.

    Un grand merci de l'aiguillage en tout les cas.

  8. #8
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Attention, petite précision:

    Personnel actif ou non (case à cocher représentant une personne encore membre et dont le calcul de point doit continuer)

    tout à fait différent du profil ou changement de profil (U, NU, NA) servant de base à la dotation d'un membre Actif

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Mais je suis incapable que cela soit en VBA ou SQL d'écrire cette procédure.
    Je n'ai pas dis que tu devais le faire seul :-) et avec ce que j'ai dit tu as peu d'indications.

    Le calcul est un poil complexe et plus facile a realiser en VBA.

    Pour les conditions exactes cela reste sous ton controle une fois que tu auras le squelette de la reponse l'adaptation ne devrait pas etre trop complexe.

    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.

  10. #10
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Oufff, lol

    j'attend donc ton squelette et je l'adapterai à ma situation.

    Encore merci de ce coup de pouce.

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Sauf que mon squelette depend des reponses aux questions precedentes :
    1. Est-ce que tu as quelque part les dates de changement de type ?
    2. Est-ce qu'on pourrait avoir DateDebutType, DateFinType ?


    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.

  12. #12
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Oui, sans aucun soucis...

    les dates de changement de types sont présent et je les y ai ajoutés tel que demandé: DateDebutType, DateFinType.

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

Discussions similaires

  1. [AC-2013] Gérer un historique de modication pour tous les champs de toutes les tables ?
    Par marot_r dans le forum Modélisation
    Réponses: 2
    Dernier message: 17/03/2015, 17h43
  2. Update sur toutes les champs de toutes les tables
    Par cmasset dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/12/2013, 19h04
  3. Réponses: 20
    Dernier message: 26/05/2011, 16h53
  4. Réponses: 13
    Dernier message: 24/09/2010, 22h07
  5. Réponses: 4
    Dernier message: 01/03/2006, 13h58

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