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

Macros Access Discussion :

Requête action sur grosse table avec trigger LONG


Sujet :

Macros Access

  1. #1
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut Requête action sur grosse table avec trigger LONG
    Bonjour

    Tout heureux de voir apparaitre les macro de données avec la version 2010, j'en ai usé (abusé ?) sur la centaine de table de mon projet pour historiser les modifications (créé_par/modifie_par et modifie_le) sur les évènements insert/update/delete. C'est génial...enfin, c'était génial... Avec des tables qui atteignent aujourd'hui plus de 100 000 lignes, quand je fais un update de toutes les lignes, cela prend un temps impossible !! Même si je le fais par une requête native d'access sans transaction (en principe plus rapide).
    Il est vrai que je fais un appel à une fonction vba pour déterminer le nom de la personne actuellement connectée pour remplir modifie_le/par.
    Avez-vous par hasard un système qui permet de désactiver temporairement les triggers d'une table ? (une petite propriété cachée de la table...please...)
    J'ai pour le moment fait un système qui va d'abord lire dans une autre table qui répertorie le nom de toutes mes tables et indique si le trigger doit être appliqué ou pas. Si non, il abandonne là mais cette opération reste très longue également...
    merci de votre aide

    guen

  2. #2
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    bonjour,

    difficile de répondre comme ça.... quand tu parles de trigger peux tu préciser ce tu sous-entends
    100 000 lignes n'est pas si énorme, je suppose que tes tables sont correctement indexées, as tu pu déterminer si c'étaient certaines requêtes qui posaient problèmes ou si c'est général ?
    quelques pistes.... ( il y a un tuto bien fait sur performances http://loufab.developpez.com/tutorie.../optimisation/ ou la manière d'examiner le plan d'exécution est détaillé)
    - les indexs, comme je te l'ai dis,
    - éviter les appels aux fonctions vba directement dans tes select, si tu travailles par utilisateurs, essaye de factoriser l'utilisation de la fonction vba pour alimenter une variable temporaire qui sera ensuite reprise dans tes ordres de mise à jours
    - travailler avec des requêtes qui minimisent les jointures, quitte à jouer avec un principe de table temporaires intermédiaires....

  3. #3
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    bonjour

    en fait, je parle bien du nouveau système de macro de données, l'équivalent des triggers dans les autres systèmes de base de données, pas des macros classiques d'Access (que je n'utilise jamais par ailleurs...) Il n'y a pas de requête derrière, juste un remplacement de la date de modification par la date du jour et une fonction qui va chercher l'utilisateur actuellement connecté pour mettre à jour le modifie_par/cree_par. J'ai l'impression de toute façon que, qu'importe ce que l'on mets dans la macro de données, sa simple existence rallenti grandement les opérations d'update/insert sur la table.

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Tu cree un champ flag dans la table qui sera mis a "Yes" avant toute modification en masse par une operation exterieure (par exemple un query) sur une decision manuelle

    En tout debut de macro BeforeChange et AfterUpdate tu fais un test du genre
    ---if Updated("flag") or flag=Yes then StopMacro--

  5. #5
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    merci pour ta réponse. j'avais presque fait ça puisque en début de macro, il cherche dans une table de gestions des macros si les triggers sont activés pour cette tabl eou pas. si pas, alors, il quitte la macro. mais le simple fait de faire cette recherche de "flag" ralenti beaucoup les actions en masse sur la table... je pense que les "triggers" sous Access ne sont pas optimisés...

  6. #6
    Modérateur

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

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

    As-tu lu :
    "Les bonnes pratiques de la programmation des macros de données"
    http://warin.developpez.com/tutoriel...nements-table/

    Il y est mentionné quelques chausses-trappes qui peuvent alourdir le traitement.

    A+

Discussions similaires

  1. [2005] Temps exécution trop long sur 3 tables avec sous-requête
    Par afrodje dans le forum Développement
    Réponses: 10
    Dernier message: 29/04/2014, 18h15
  2. Réponses: 7
    Dernier message: 05/09/2010, 09h34
  3. créer TRIGGER sur 1 table avec liaison sur 2 autre table
    Par shaka84 dans le forum Développement
    Réponses: 2
    Dernier message: 11/04/2006, 11h10
  4. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  5. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38

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