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

VBA Access Discussion :

Désactiver temporaire une macro de données [AC-2010]


Sujet :

VBA 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
    335
    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 : 335
    Points : 166
    Points
    166
    Par défaut Désactiver temporaire une macro de données
    Bonjour

    Connaissez vous un moyen en vba (ou ADO/DAO) pour désactiver temporairement une macro de données avant de réaliser une opération de synchronisation de données (car cela me mets à jour mon champs Modifie_le par le trigger alors qu'il ne faudrait pas lors de la synchro...).
    puis de la ré-activer dès la synchro terminée évidemment...
    une idée peut être ?
    bonne soirée

    guen

  2. #2
    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
    il y a une solution en DataMacro: on rajoute dans la table qui va subir le traitement un champ yes/no [TraitementBatch]

    Pour la datamacro [Before Change] a son debut on insert une simple condition :

    if TraitementBatch
    StopAllMacros


    Bref, quand on veut traiter, il faut un Update Query global qui met les champs [TraitementBatch]=yes, et a la fin du traitement on met ce champ a No

  3. #3
    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
    Il faudra aussi penser à une gestion d'erreur sérieuse dans le code VBA appelant la synchro sans quoi le champ booléen dont l'idée est très bonne risque de rester à true à la moindre erreur de synchro.

  4. #4
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    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 : 335
    Points : 166
    Points
    166
    Par défaut
    Bonjour
    oui ! Bien vu le champ conditionnel dans la table je n y avais pas pense !
    Pour la gestion d erreur dans la syncro j en ai une mais il faut que j y ajoute cette gestion du booléen effectivement.
    Je teste cela...et je vous dirai
    merci

  5. #5
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    335
    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 : 335
    Points : 166
    Points
    166
    Par défaut
    Juste pour vous dire que pour clôturer ce post, la technique pour bloquer temporairement les triggers grâce à une coche oui/non fonctionne trés bien mais que j'ai créé une table système (tabTable) qui reprend toutes les tables de ma base et qui indique si les triggers sont activés ou pas (coche TAB_SuiviModif).
    Je teste donc la valeur de cet enregistrement avant de savoir si j'exécute la macro de mise à jour ou pas.
    Le XML de la macro nommée est le suivant (à copier-coller dans une macro de données)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-16" standalone="no"?>
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="BeforeChange"><Statements><Comment>Définit une variable locale pour savoir si doit suivre le changement des modifications</Comment><LookUpRecord><Data><Reference>tabTable</Reference><WhereCondition>[TAB_Nom]="tabExploitation"</WhereCondition></Data><Statements><Action Name="SetLocalVar"><Argument Name="Name">varSuiviModif</Argument><Argument Name="Value">[tabTable].[TAB_SuiviModif]</Argument></Action></Statements></LookUpRecord><ConditionalBlock><If><Condition>[varSuiviModif]=-1</Condition><Statements><Comment>vérifie si suivi des modifications activée pour cette table, sinon, ne fait rien</Comment><ConditionalBlock><If><Condition>[cree_par] Is Null</Condition><Statements><Comment>première modification = insertion &gt; mets à jour cree_par</Comment><Action Name="SetField"><Argument Name="Field">cree_par</Argument><Argument Name="Value">UtilisateurCourant()</Argument></Action></Statements></If><Else><Statements><Comment>déjà inséré = modification &gt; mets à jour modifie_le et modifie_par</Comment><Action Name="SetField"><Argument Name="Field">Modifie_le</Argument><Argument Name="Value">Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">modifie_par</Argument><Argument Name="Value">UtilisateurCourant()</Argument></Action></Statements></Else></ConditionalBlock></Statements></If></ConditionalBlock></Statements></DataMacro></DataMacros>
    Il ya juste que je ne sais pas lui faire détecter automatiquement le nom de la table sur laquelle j'applique ma macro de donnée alors je la tape "en dur" (ce qui m'oblige à copier coller et modifier ma macro dans les 112 tables de ma base...)... si qq a une idée...
    A plus

    guen

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

Discussions similaires

  1. [AC-2010] Récupérer le nom de la table dans une macro de données
    Par efilippi dans le forum Macros Access
    Réponses: 2
    Dernier message: 09/07/2013, 09h20
  2. [OpenOffice][Base de données] [macro] connection a une base de données dans une macro
    Par Eruil dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 23/04/2007, 16h19
  3. [VBA Excel] Conserver une donnée d'une macro à une autre
    Par Mourne dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/03/2007, 10h45
  4. une macro "enregistrer donnée en cours"
    Par copainvince dans le forum Access
    Réponses: 14
    Dernier message: 19/01/2007, 16h54
  5. Réponses: 3
    Dernier message: 23/09/2006, 15h19

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