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

IHM Discussion :

Créer un historique résistant : Table (ou Requête ?) [AC-2003]


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 134
    Points : 53
    Points
    53
    Par défaut Créer un historique résistant : Table (ou Requête ?)
    Bonjour à tous,

    Il me faut créer une table A (plutôt qu'une requête simple) afin qu'elle serve d'historique.
    Comment faire cela ?

    Je souhaiterais que les données s'ajoutent à partir d'une autre table B, dont des lignes peuvent se supprimer (d'où l'intérêt de l'Historique table A : conservant les lignes supprimées de la table B)

    J'ai pensé au Mémo mais je ne sais trop comment m'en dépatouiller. Et je ne suis pas certain du juste service d'une Requête Insert.

    Suis-je sur la bonne voie ? Une idée ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    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 621
    Points : 56 866
    Points
    56 866
    Billets dans le blog
    40
    Par défaut
    bonjour,

    tout dépend de ce qu’on souhaite "historiser" et dans quel but…

    Pour archiver des enregistrements, une simple table (éventuellement sauvegardée dans un autre fichier) reprenant les champs de la table B avec une DateSuppression peut suffire.

    Sinon on peut aller jusqu’à une véritable journalisation avancée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 134
    Points : 53
    Points
    53
    Par défaut
    Bonjour F-Leb,

    Mon but est le suivant : archiver l'achat et la consommation de différents produits.

    Ma table "Courant" comprend les évènements gérés un temps entre l'achat et la consommation. A la consommation (date), je souhaite supprimer de la table "Courant", mais conserver dans la table "Historique".

    Effectivement, ce tuto est très intéressant.
    Seulement, je suis sur Access2003 format 2000...

    Bk

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 134
    Points : 53
    Points
    53
    Par défaut
    Bon : j'ai essayé cela, qui ne fonctionne pas à merveille et j'expliquerai pourquoi.

    Je crée une Requête Ajout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO Historique ( CPe, Nom, Produit, Code, [Date d'achat], [Date de consommation] )
    SELECT [Courant].CPe, [Courant].Nom, [Courant].Produit, [Courant].Code, [Courant].[Date d'achat], [Courant].[Date de consommation]
    FROM Courant;
    Par cette Requête Ajout, j'escompte ajouter la ligne créée en Table "Courant" vers la Table "Historique". Seulement, cela ajoute la ligne en question ainsi que toutes les précédentes, que je retrouve alors en double puis triple quadruple etc...

    Comment faire pour ajouter seulement la ligne ?
    Bk

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    C'est normal que la requête que tu as fasses cela.

    Pour être sûr de ne copier que la ligne voulue, il faut que tu mettes un clause Where à ta requête et comme critère tu utilises la clé primaires qui est un identifiant unique. Mais attention, ta table de destination ne doit pas avoir cette clé comme clé primaire, mais cela doit être une simple table de stockage.

    Philippe

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 134
    Points : 53
    Points
    53
    Par défaut
    Bonjour à Tous,

    Merci Philippe pour la très juste remarque.
    J'ai finalement résolu mon problème et je vous en propose ici la démarche expérimentée :

    * créer une table (A) qui sera le fonds.
    * créer une requête Ajout s'appuyant sur la table (A) et se dirigeant sur la table (B) (avec en général au moins un critère pour rester logique)

    => Cette table (B) devient l'Historique, en raison du caractère Ajout, si et seulement si :

    * la requête Ajout est mobilisée à chaque enregistrement
    * créer une requête Suppression qui intervient sur la table (A) (selon le-s même-s critère-s que pour la requête Ajout)
    * la requête Suppression est mobilisée à chaque enregistrement

    La logique :
    - La table (A) comprend une CP, un Nom, une date Début, une date Fin, et n champs... La table B comprend exactement les mêmes champs.
    - Je crée une entrée avec une date Début => en A = Provisoire
    - Je peux mobiliser la requête Ajout et la requête Suppression (critère : Date Fin) : cela n'agira pas sur les enregistrements de A si la date Fin n'est pas entrée
    - Plus, j'entre une date Fin
    - Je mobilise la requête Ajout puis la requête Suppression (critère : Date Fin) : cela agit d'abord sur les enregistrements de A dont la date Fin est entrée en les inscrivant en table B (Historique), puis cela agit à nouveau sur les enregistrements de A dont la date Fin est entrée en les supprimant dans cette table A : cette table A est donc en qualité éphémère.
    => Les enregistrements ajoutés en B restent indemnes.

    On a donc bien : A = Provisoire ~ & ~ B = Historique

    Non ?
    Bk

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

Discussions similaires

  1. [AC-2010] Créer un historique en regroupant plusieurs tables
    Par alexRTA dans le forum Access
    Réponses: 5
    Dernier message: 21/02/2013, 08h37
  2. Position d'un enregistrement dans une table ou requête Query
    Par polinevol dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 03h53
  3. créer un site : Pb table .DBF
    Par missnouvelle dans le forum ASP
    Réponses: 5
    Dernier message: 20/10/2005, 16h07
  4. interdir importation des tables et requêtes
    Par zian dans le forum Access
    Réponses: 1
    Dernier message: 17/09/2005, 15h23
  5. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50

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