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 :

Jointures et mise à jour


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 7
    Points
    7
    Par défaut Jointures et mise à jour
    Salut à tous,

    J'ai un petit problème sur lequel j'ai planché toute la matinée et je finis par croire que c'est impossible! J'espère que vous aurez une solution à me proposer... donc voilà un petit résumé:

    Il y a une dizaine de gestionnaires qui doivent contrôler l'après-vente d'environ 3000 points de vente. Chacun a donc son propre portefeuille d'agence à contrôler. Mais tous les gestionnaires peuvent facturer des billets pour chaque point de vente. La facturation de billets est distincte du contrôle, mais le gestionnaire responsable du contrôle doit savoir combien de billets ont été facturés, par lui même ou par d'autres gestionnaires.

    J'ai 3 tables:

    - une tables "Agences" qui contient la liste des agences avec toutes les données liées (adresse, ID du portefeuille etc.).
    - une tables "Après-vente" qui contient les contrôles effectués par les gestionnaires sur l'après-vente. Le seul champ que les gestionnaires modifient est le champ "Contrôle" : contrôle partiel ou total sinon: pièces non reçues), les autres champs étant définis automatiquement dès que le champ contrôle est modifié.
    - une table "Facturations" qui contient toutes les facturations des gestionnaires pour chaque point de vente. Cette table contient notamment les champs "Titres" (nombre de titres facturés) et "Montant" (somme des titres facturés par le gestionnaire).

    ==> ETAT ACTUEL: j'ai une "feuille de données" qui affiche pour chaque gestionnaire la liste de toutes les agences de son portefeuille, et qui lui permet de modifier l'état du contrôle. J'ai utilisé pour ça une jointure gauche des tables "Agences" et "Après-vente" de manière à ce que les agences non contrôlées s'affichent également.

    Le tableau fonctionne très bien, les données sont mises à jour.

    ==> MON PROBLEME: je voudrais ajouter à ma feuille de données deux colonne de "Facturation" qui affichent, pour chaque agence, le nombre de titres facturés ainsi que le montant total qu'ils représentent. J'ai donc créé une seconde jointure gauche, de la première jointure avec la table "Facturations".

    Le tableau affiche bien les données mais impossible de modifier le champ "contrôle" de la table "Après-vente"!

    ==> APPAREMMENT: j'ai l'impression que, comme tous les champs viennent de la même requête, la mise à jour du champ "Contrôle" génère un "Update" des autres champs. Et donc qu'Access refuserait la modification des données, puisqu'il ne peut pas mettre à jour un champp "calculé".

    Est-ce j'ai bien résumé le problème, et voyez vous une solution?

    NB1: De mon côté j'ai essayé pas mal de trucs, notamment d'ajouter les deux colonnes (totaux) directement dans la table "après-vente". A chaque fois qu'un gestionnaire ajouterait des données à la table "Facturation", les totaux seraient modifiés. Mais :
    - impossible de mettre en place des "déclencheurs", comme en SQL;
    - comment faire, en VBA, pour choisir entre une requête UPDATE ou INSERT, selon qu'une entrée existe déjà ou non dans la table "Après-vente"???

    NB2: j'ai bien pensé à n'afficher les totaux que pour l'agence sélectionnée. Il suffit de sélectionner une agence pour avoir les totaux (sous-formulaire). Ca fonctionne (c'est ce que j'utiliserai en dernier recours) mais ça ne me convient pas vraiment. Je préfèrerais que les gestionnaires aient une vue globale de leur portefeuille, y compris de tous les billets facturés (et ce, sans avoir à sélectionner toutes les agences ).
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Bonjour et bienvenue sur le forum Access de DVP.

    Ton problème est plus simple que ça et n'a malheureusement pas de solution.

    Il n'est pas possible de mettre à jour des champs dans une requête dans laquelle on effectue des opérations.

    Si c'est une simple requête sélection, il n'y a aucun problème, mais dès que l'on fait une somme, un regroupement, .... ce n'est plus possible.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Merci pour la réponse. J'ai eu une idée dans l'après-midi que je n'ai pas encore pu tester:

    1. exécuter une requête "création de table" sur une table temporaire en joignant les tables Agences et Facturations.

    2. faire la jointure gauche avec la table temporaire...

    Si ça fonctionne avec la table Agences (sans effectuer de calculs) ça devrait fonctionner avec une table temporaire, puisque les calculs sont déjà effectués!!?

    Bref, reste à tester... sinon t'en penses quoi? Ca ne devrait pas trop réduire les performances?!

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Je te conseille vivement de lire ce post et d'essayer:
    http://www.developpez.net/forums/sho...111#post810111

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Je ne sais pas si ça peut résoudre ton soucis, mais moi ça m'a déjà aidé.
    Dans l'aide d'Access (Aide intuitive) taper "mettre à jour données requête".
    Voir rubrique "Quand puis-je mettre à jour les données d'une requête ?"
    Il y a notemment cette sous-rubrique:
    Mise à jour des données d'une requête dont les tables ont une relation un-à-plusieurs
    Dans une requête basée sur une relation un-à-plusieurs, vous risquez de ne pas pouvoir modifier les données des résultats de la requête. Le tableau suivant illustre les types de champs qu'il n'est pas toujours possible de modifier et, le cas échéant, une autre solution pour la mise à jour.

    Type de champ Champ joint situé du côté « un »
    Solution Activez les mises à jour en cascade entre deux tables. Pour plus d'informations, cliquez sur .

    Type de champ Nouveaux enregistrements, si le champ joint situé du côté « plusieurs » n'apparaît pas dans la feuille de données
    Solution Ajoutez le champ joint situé du côté « plusieurs » de votre requête pour permettre l'ajout de nouveaux enregistrements.

    Type de champ Champ joint situé du côté « plusieurs », après la mise à jour des données du côté « un » côté « plusieurs » n'apparaît pas dans la feuille de données
    Solution Sauvegardez l'enregistrement; vous serez alors en mesure de modifier le champ joint situé du côté « plusieurs ».

    Type de champ Champ vide dans la table située du côté « un » d'une relation un-à-plusieurs dans laquelle existe une jointure externe
    côté « plusieurs » n'apparaît pas dans la feuille de données
    Solution Entrez des valeurs dans les champs de la table située du côté « plusieurs », mais uniquement si le champ joint de la table située du côté « un » contient une valeur correspondant à cet enregistrement.

    Type de champ Nouveaux enregistrements, si la clé unique entière de la table ODBC n'est pas produite côté « plusieurs » n'apparaît pas dans la feuille de données
    Solution Sélectionnez tous les champs des clés primaires des tables ODBC afin de permettre les insertions.
    Voir aussi : Lien assistance office 2003 Modifier les données dans une requête
    Bon courage

Discussions similaires

  1. Requête mise à jour avec jointure interne
    Par joquetino dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/01/2008, 18h41
  2. [MySQL] Jointure et Mise à jour
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/08/2007, 01h42
  3. TIBDataSet comment faire de la mise à jour avec jointure
    Par uluru dans le forum Connexion aux bases de données
    Réponses: 8
    Dernier message: 08/07/2006, 11h09
  4. Mise à jour avec jointure
    Par taupain dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/07/2004, 12h27
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 14h24

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