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 :

Table : Cherche une méthode pour ne pas supprimer des lignes (mise en archive) [AC-2013]


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Table : Cherche une méthode pour ne pas supprimer des lignes (mise en archive)
    Bonjour

    J'utilise Access(2013) pour mettre en place une solution constituée d'un fichier contenant les écrans (EXE) et d'un autre fichier contenant les Tables (BDD).

    EXE a donc les tables "liées" de la BDD, et propose plusieurs écrans pour manipuler les données.

    Chaque table de BDD a un début de structure identique, résumée ici :
    SYSID NuméroAuto Clé primaire
    SYSDATEADD Date général, NOT NULL Défaut -> Date et heure du moment
    SYSDATEMOD Date général, NULL Si "Update" sur la ligne -> ajouter la date/heure du moment automatiquement
    SYSARCHIVED Oui/Non, Défaut=Non Si "Delete" de la ligne -> mettre Oui
    SYSDATEARCHIVED Date général, NULL Si "Delete" de la ligne -> ajouter la date/heure du moment automatiquement


    EXE affiche le contenu d'une table (sans les champs SYS, donc via une Requête) en mode "Liste" et l'utilisateur peut changer les données et même supprimer des lignes via les actions classiques proposées par l'interface Liste d'access.

    Si l'utilisateur souhaite supprimer une ligne, je souhaiterais qu'elle ne soit pas retirée de la BDD, mais "mise en archive". Comment ? via un "Trigger" ? une Macro ?

    Idem si l'utilisateur modifie une donnée dans une ligne, je souhaite mettre à jour la colonne SYSDATEMOD automatiquement

    Si vous pouvez m'aguiller, je vous remercie d'avance

    Cordialement,

  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.

    En passant par un formulaire.

    Pour la mise en archive, la solution la plus simple est d'interdir la suppression et de mettre un champ EstSupprime a "true". Pour info c'est d'ailleurs ce que fait la BD. Elle marque l'enr comme supprime et c'est tout.

    Bon sinon, tu peux detecter la suppression et recopier l'info dans une autre table.

    Pour la mise a jour de la date de modification, avec l'evenement Apres Modification cela se fait direct.

    Je ne sais pas si tu peux faire la meme chose avec des macros de donnees pour la gestion des suppressions. Pour la modif, cela depend du type du champ.
    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
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci marot_r

    je continue ma prospection d'informations pour pouvoir répondre à mon besoin

    un lien que je lis avec attention :
    https://warin.developpez.com/tutorie...nements-table/

    to be continued

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon je suis parti sur cette solution (pas de formulaire) : dans chaque table, je vais ajouter 2 macros.
    • Une pour l'évènement AvantModification (BeforeChange)
    • L'autre pour l'évènement AprèsSuppression (AfterDelete)


    Astuce intéressante : le code XML peut être collé directement dans l'éditeur de macro, pratique quand on a pas mal de tables à "macroiser"

    Macro 1 (BeforeChange) :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
      <DataMacro Event="BeforeChange">
        <Statements>
          <ConditionalBlock>
            <If>
              <Condition>Not IsNull([[SYSID])</Condition>
              <Statements>
                <Action Name="SetField">
                  <Argument Name="Field">[SYSDATEMOD]</Argument>
                  <Argument Name="Value">Now()</Argument>
                </Action>
              </Statements>
            </If>
          </ConditionalBlock>
        </Statements>
      </DataMacro>
    </DataMacros>

    Macro 2 (AfterDelete) :
    Bon, faut la personnaliser à chaque table en y ajoutant tous ses champs que l'on veut préserver, car la ligne est bien supprimée (et recréer dans la foulée). Pas trouvé mieux comme solution...
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
      <DataMacro Event="AfterDelete">
        <Statements>
          <CreateRecord>
            <Data>
              <Reference>NOMDEMATABLEICI</Reference>
            </Data>
            <Statements>
              <Action Name="SetField">
                <Argument Name="Field">SYSID</Argument>
                <Argument Name="Value">[Old].[SYSID]</Argument>
              </Action>
              <Action Name="SetField">
                <Argument Name="Field">SYSDATEADD</Argument>
                <Argument Name="Value">[Old].[SYSDATEADD]</Argument>
              </Action>
              <Action Name="SetField">
                <Argument Name="Field">SYSDATEMOD</Argument>
                <Argument Name="Value">[Old].[SYSDATEMOD]</Argument>
              </Action>
              <Action Name="SetField">
                <Argument Name="Field">SYSLOGLASTMOD</Argument>
                <Argument Name="Value">[Old].[SYSLOGLASTMOD]</Argument>
              </Action>
              <Comment>Mise en archive ici</Comment>
              <Action Name="SetField">
                <Argument Name="Field">SYSARCHIVED</Argument>
                <Argument Name="Value">True</Argument>
              </Action>
              <Action Name="SetField">
                <Argument Name="Field">SYSDATEARCHIVED</Argument>
                <Argument Name="Value">Now()</Argument>
              </Action>
              <Comment>Puis ajouter TOUS les champs spéciques à la table ci dessous. DéfinirChamp pour chaque champs avec Valeur = [Ancien][ChampSpecifique]</Comment>
              <Action Name="SetField">
                <Argument Name="Field">XXX</Argument>
                <Argument Name="Value">[Old].[XXX]</Argument>
              </Action>
            </Statements>
          </CreateRecord>
        </Statements>
      </DataMacro>
    </DataMacros>

    Je remercie chaleureusement ce site et forum pour la mine d'informations, ainsi que le site suivant :
    http://www.info-3000.com/access/macrodonnee/index2.php

    Je résous moi même ce post, mais reste attentif à vos réponses éventuelles pour savoir si il y a une meilleure solution.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2013, 15h10
  2. Cherche une méthode pour créer un rapport comme avec Tinn R
    Par tiyolx dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 14/08/2012, 08h20
  3. Les méthodes pour Lister / Vider / Supprimer les Tables
    Par Jean-Philippe André dans le forum Contribuez
    Réponses: 5
    Dernier message: 04/02/2008, 10h30
  4. je cherche une commande pour vider les tables
    Par BECHIRXV dans le forum SQL
    Réponses: 10
    Dernier message: 18/01/2008, 13h41
  5. une méthode pour ne pas utiliser onLoad
    Par Brag__ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 11h40

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