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

Bases de données Delphi Discussion :

Tracabilité d'une base


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Par défaut Tracabilité d'une base
    Bonjour,
    pour des bsoins de tracabilité d'une base, j'ai besoin d'enregistrer toutes les modifications apportées par l'utilisateur des qu'il modifie un enregistrement. Je veux enregistrer tous les champs modifiés avec l'ancienne valeur et la nouvelle valeur.
    J'ai regardé l'evenement OnFieldChangeComplete mais j'arrive pas à utiliser l'objet Fields passé en paramètre (type OLEVariant).
    Merci de votre aide.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Par défaut
    Salut,


    euh.... quel composant s'il te plait ??

    @+

  3. #3
    Membre confirmé Avatar de alexmorel
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2003
    Messages : 196
    Par défaut Eh chef
    Je serais toi je mettrais plutot un trigger directement dans la base sur l'insertion, modication et la suppression..

    Ce sera plus rapide et plus sur et facilement en place.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2003
    Messages : 64
    Par défaut
    Salut,

    J'ai réalisé ça récemment (base interbase)
    En mettant un trigger sur une table 'Etab'.
    Ci joint l'exemple d'un trigger 'after update'.
    Ce trigger a pour effet de créer dans une table 'etab_log' un enregistrement qui ne contient QUE les données modifiées, ce là me semble plus facile à lire ensuite que si toutes les données étaient recopiées dans le log.
    Code : 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
    DECLARE VARIABLE fADRESSE1 char(60);
    DECLARE VARIABLE fADRESSE2 char(60);
    DECLARE VARIABLE fCODPOS   char(5);
    DECLARE VARIABLE fETAB_ID  integer;
    DECLARE VARIABLE fNOM      varchar(30);
    DECLARE VARIABLE fVILLE    char(30);
     
    begin
         if (new.ADRESSE1 = old.ADRESSE1) then fADRESSE1=''; else fADRESSE1=new.ADRESSE1;
         if (new.ADRESSE2 = old.ADRESSE2) then fADRESSE2=''; else fADRESSE2=new.ADRESSE2;
         if (new.CODPOS = old.CODPOS) then fCODPOS=''; else fCODPOS=new.CODPOS;
         if (new.NOM = old.NOM) then fNOM=''; else fNOM=new.NOM;
         if (new.VILLE = old.VILLE) then fVILLE=''; else fVILLE=new.VILLE;
         INSERT INTO ETAB_LOG(ETAB_ID, ADRESSE1, ADRESSE2, CODPOS, NOM, VILLE, DATEMODIF, USERMODIF)
                VALUES (new.ETAB_ID, :fADRESSE1, :fADRESSE2, :fCODPOS, :fNOM, :fVILLE, current_timestamp, (SELECT NOM FROM USERS WHERE USERS.USERS_ID=new.USER_ID));
    end
    Je trace également l'hheure de la modif et l'ID de l'utilisateur ayant effectué la modif.
    Cette methode amène à faire des TRES longs triggers si la table a beaucoup de champs...Si quelqu'un a une méthode plus efficace/légère je suis également preneur.

    Amicalement.

  5. #5
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Par défaut
    j'ai trouvé une solution qui e convient en utilisant l'evt OnFieldChangeComplete :
    pour le nom du champ : Fields[i].Name
    pour l'ancienne valeur : Dataset.FieldByName(Fields[i].Name).OldValue
    pour la nouvelle valeur : Dataset.FieldByName(Fields[i].Name).NewValue

    PS : j'utilise les TADOQuery et SQL-Server

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

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 16h32
  2. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 18h39
  3. sauver une base
    Par phil_java dans le forum Administration
    Réponses: 3
    Dernier message: 07/03/2003, 18h08
  4. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 17h16
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 13h18

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