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

Modélisation Discussion :

Comment faire un update automatique d'un champ en fonction de la valeur d'un autre [AC-2010]


Sujet :

Modélisation

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    bonjour

    je vais être un peu plus précis que dans le titre

    Je dispose de 5 tables, 4 de base et une qui est lié par des relation aux autre
    en effet dans la 5eme 4 champs sont des listes déroulante dont le contenu depent du contenu des 4 tables de base.
    (relation avec intégrité référentielle et mise a jour en cascade des champs correspondant)
    la structure de celle ci est la suivante
    Table5
    Champ1 : ID en NuméroAuto (Clé primaire)
    Champ2 : Liste déroulante lié sur la 1er table de base
    Champ3 : Liste déroulante lié sur la 2eme table de base
    Champ4 : Liste déroulante lié sur la 3eme table de base
    Champ5 : Liste déroulante lié sur la 4eme table de base
    Champ6 : Numeric
    Champ7 : Numeric
    Champ8 : Calculé : Champ6 / Champ7
    Champ9 : Calculé : Champ8*3

    je dispose d'une requête pour extraire les valeur des champs 1,3,4,5,9 et à vocation d'être utilisé dans une liste déroulante à affichage sur 5 colonnes

    Je crée donc une 6eme table avec un champ1 ID en NuméroAuto et un champ2 en liste déroulante avec comme requête d'affichage celle définit ci-dessus. J'affiche dans la table la valeur du champ3 de la table5 et stock la valeur du champ1 de la table5 (j'utilise pour ca l'assistant liste de choix)

    mon souhait et de crée un troisième champ dans cette 6eme table qui se met automatiquement a jour en fonction de la valeur du 2eme champs (une requête automatique peut être, mais ca a pas l'air possible pour une zone de texte standard) et que celui-ci soit bloquer a l'édition manuel (si possible)

    merci d'avance


    est ce que si je crée un formulaire pour entré mes donnée cela règlera mon problème ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    C'est une mauvaise idée d'avoir des champs calculés dans une table.

    De plus, si ta 5ième table contient des données issues des tables précédentes, il est souhaitable d'utiliser une requête.

    Avec cette requête, tu peux aller chercher des éléments dans les autres tables et comme c'est un objet dynamique, la mise à jour se fera toute seule.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    ok, mais alors si c'est une mauvaise idée de faire des champs calculé par quoi je les remplace ?
    en fait je t'explique, cette table et une table de suivi de tarification et j'ai besoin que le le champ se mette a jour tout seul par calcul en fonction du prix d'achat de base, le principe du calcul été bien, je rentré mon tarif d'achat, ma quantité et dans le 3eme champ ca me calculer directement le prix unitaire en faisant prix d'achat / quantité, du coup si chez mon fournisseur le prix d'achat changer, je le modifier et directement j'avais le prix unitaire

    si tu a une solution alternative a me proposé je suis preneur.
    plus je peu professionnalisé mon application, mieux se sera

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si tu as besoin de faire des opérations, la meilleure solution est d'utiliser une requête.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    aurai tu un exemple, un bout de code ?
    je débute sous access 2010 et je doit dire je m'y perd encore pas mal meme en aillant de bonne connaissance en Transact-SQL

    et je suppose du fait que tu me dit qu'il faut que je fasse des requête que toute mes insertion ou modification de donnée de fait par formulaire.
    parce que jusqu'à maintenant j'utilisai mes table en brut et rentré directement mes enregistrement dedans, je n'ai pas encore crée un seul formulaire (là est peu être mon erreur d'ailleurs)

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Peu importe l'endroit ou sont stockées les données, que ce soit dans la même table ou dans des tables différentes.

    Prennons une table simple dans laquelle on retrouve des articles, avec un prix unitaire et une quantité.

    Supposons T1 contenant quatre champs.

    T1
    Id
    txtDenomination
    dbQty
    dbPrix

    dbQty et dqPrix étant des réels doubles

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T1.txtDenomination, T1.dbQty, T1.dbPrix, [dbQty]*[dbPrix] AS Total
    FROM T1;

    Dans tous les cas, lorsque j'affiche la requête, j'ai le résultat et j'ai fait l'économie d'un champ dans la table.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    je suis d'accord avec toi mais ta solution ne correspond pas pour mon projet.
    en effet je suis sur le modèle d'une base de donnée relationnelle et la valeur du champs calculé et repris dans d'autre table pour d'autre calcul (d'où l'intégrité relationnelle et la mise a jour en cascade)
    ou alors je sais pas faire pour reprendre des valeur calculé par requête dans d'autre table avec mise a jour automatique des champs

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,


    On peut utiliser une requête pour une autre requête et ainsi de suite.

    Comment fait-on avec les BD qui ne peuvent stocker des champs calculés ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    bah oui c le cas pour les version de access 97 et 2003

    mais la bah je ne sais pas faire,
    je vois pas du tout les syntaxe sql ou la méthode de création
    je vais essayer pas mal de chose, méthode découverte quoi

    je ferai un up si je trouve comment faire

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour,

    Sous Access 2010, il est possible d'utiliser les évènements de tables. Toutefois, cette technique ne doit pas pallier à un manque au niveau de la conception. A réserver plutôt aux personnes averties.

    A lire :

    ExclusivitéLes nouveautés de Microsoft Access 2010

    TutorielLes bonnes pratiques de la programmation des macros de données

    TutorielMise en place d'un journal d'évènement dans Access 2010

    TutorielNumérotation personnalisée des enregistrements dans Access 2010

    ArticleComportement des évènements de table dans une transaction

    ArticleComportement des évènements de table en environnement multi-utilisateurs

  11. #11
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    Je me retourne vers vous car je me heurte de nouveau a des soucis
    j'ai complètement re-modéliser ma base de données
    j'utilise maintenant des tables, des requêtes et des formulaires
    les formulaires étant basé sur les requête je met a jour les données des table uniquement à partir des formulaires
    comme ma conseiller heureux-oli je n'utilise plus les champs calculé mais c'est la que j'ai besoin de vos connaissances.
    J'ai donc quatre tables de base

    TType
    ID
    Nom

    TMarque
    ID
    Nom

    TFournisseur
    ID
    Nom

    TProduit
    ID
    Nom

    J'ai crée une 5eme table
    TTarif
    ID -> texte
    Type -> liste déroulante référence sur TType
    Fournisseur -> idem sur TFournisseur
    Produit -> idem TProduit
    Marque -> idem TMarque
    Prix d'achat -> numérique
    Quantité -> numérique
    Prix d'achat unitaire -> numérique

    quel serai la syntaxe de ma requête pour que mon ID soit automatiquement générer est stocké dans le champ ID de mon enregistrement et que celui-ci soit un assemblage des valeur des champ Type Fournisseur Produit et Marque
    et idem pour que le champ prix d'achat unitaire soit automatiquement calculer et stocké avec la valeur prix d'achat/Quantité

    une seul requête suffit ou faut t'il que je crée une requête select et ensuite une requête updade

    je suis un peu perdu sur la bonne méthode a adopter et la syntaxe des requête.

    merci d'avance

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 862
    Points
    56 862
    Billets dans le blog
    40
    Par défaut
    bonjour Nephi,

    Sur les noms de champs, il est préférable d'avoir:
    TType
    IDType
    NomType

    TMarque
    IDMarque
    NomMarque

    TFournisseur
    IDFournisseur
    NomFournisseur

    TProduit
    IDProduit
    NomProduit
    pour la table TTarif, il est préférable de conserver la clé primaire sur un numAuto et rajouter un champ [CodeTarif] éventuellement indexé à "oui-sans doublon".

    C'est le principe retenu dans le tutoriel:
    Numérotation personnalisée des enregistrements dans Access 2010

    Dans le tutoriel il s'agira de transposer le cas des Factures avec un IDFacture de type NumAuto et un NumeroFacture calculé à ton cas particulier.

    Pour la suite, si tu gères ta numérotation avec les évènements de table, ce sera probablement sans moi puisque je ne possède pas Access 2010 (veinard !)

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    Merci f-leb

    J'ai modifier tous les nom de champs comme préconiser.
    J'ai lu avec attention le tutoriel (que, "mea-culpa" lol, je n'avais pas lu avant) et en a retenu les grands principes, cependant les personnes avant toi mon déconseillé d'utilisé des champs calculé et je pense que je vais mi tenir pour le moment (à part si quelqu'un vient me clamé le contraire et m'explique pourquoi . . . )
    Pars contre je pense que je vais utilisé les événements de tables notamment pour essayé de validé l'enregistrement et voir ma fois si je peu pas généré les champs (le prix d'achat unitaire et le code de tarification donc) a se moment la.
    Mais la ca va être méthode découverte
    Donc si quelqu'un a une idée sur le moyen d'utilisé une ou plusieurs requête et des formulaires pour faire ca, je suis toujours preneur. Bien qu'utilisant Access 2010 je suis toujours avec mes base MS-SQL, et les principes ne sont pas forcement portatif

    Petite MAJ (il est 22h et j'ai les neurones qui se barre en hurlant )
    J'ai réussi a faire ma requête pour génère les champs a calculé et a les afficher. Enfin en exécutant la requête, mais les champs de la table eux reste vide.
    Est t-il donc possible a l'aide d'une autre requête de mettre a jour les champs tout en vérifiant la validité des information généré par la requête ?

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    bon ben voila problème solutionner
    merci a tout le monde, toute vos suggestion et aide mon permis de résoudre mon problème (enfin jusqu'au prochain hein )
    pour faire simple j'ai créer 3 requête
    une première qui fait un simple select sur tout les champs que la table.
    une deuxième qui fait un select sur les champs que j'ai besoin et créer des champs avec des alias pour faire les calculs (comme ca j'évite les champ calculer n'est-ce pas heureux-oli )
    et enfin pour mettre a jour ma table (les champs qui doivent stocké les valeur calculé), j'ai une requête update avec une jointure
    je détail : update de la table avec jointure sur la requête de calcul et mise a jour des champs avec les valeur calculé contenu dans les allias.
    en tout cas merci tout le monde, j'arrive enfin a faire quelque chose de professionnel au bout de 1 semaine et demi de pratique d'access ;p

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

Discussions similaires

  1. Cacher un champ en fonction de la valeur d'un autre
    Par Lagoon94 dans le forum W4 Express
    Réponses: 2
    Dernier message: 08/06/2011, 15h50
  2. Réponses: 6
    Dernier message: 22/10/2009, 15h42
  3. Réponses: 1
    Dernier message: 23/04/2007, 10h13
  4. Réponses: 12
    Dernier message: 13/02/2007, 14h21
  5. Réponses: 5
    Dernier message: 30/12/2006, 15h35

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