1. #1
    Membre actif
    Inscrit en
    juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : juin 2005
    Messages : 499
    Points : 189
    Points
    189

    Par défaut Table de données Access sous forme de "buffer tournant"

    Bonjour,


    je souhaiterai implémenter un module de log basé sur Log4Net, les logs seraient dirigés vers une base de données Access.

    Le développement autour des bases de données est encore bien flou pour moi...

    J'aurai voulu savoir s'il était possible d'avoir une table de données, avec un nb max d'entrées, afin de ne conserver que les NbMax derniers logs
    comment implémenter ça?

    Merci pour vos éclairages

  2. #2
    Expert Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 990
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 990
    Points : 7 763
    Points
    7 763

    Par défaut

    Bonjour,

    En mono-utilisateur, une solution parmi d'autres:

    • définir une table avec une clé primaire de type entier et un champ entier pour stocker le N° d'enregistrement permettant de définir un ordre chronologique,
    • après avoir créé la table, initialiser la table Nb_max enregistrements avec une clé de 1 à nb_max et un n° d'enregistrement égal à la clé,
    • lors de chaque lancement de l'appli, récupérer le dernier N° de séquence utilisé(LastSeq)et la clé correspondante (LastKey),
    • lors de l'enregistrement d'un log, on fait LastSeq=LastSeq+1 et LastKey=(LastKey+1) modulo nb_max, puis on met à jour l'enregistrement de la table correspondant à LastKey.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre actif
    Inscrit en
    juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : juin 2005
    Messages : 499
    Points : 189
    Points
    189

    Par défaut

    Merci Graffito pour ton aide


    Une précision cependant : N° de séquence et N° d'enregistrement, c'est la même chose dans ton explication??

    Par contre, ce qui m'ennuie, c'est qu'avec un n° d'enregistrement, au bout d'un moment, je vais arriver "au bout"
    faudra que je remette à zéro le n° d'enregistrement à un moment donné...
    enfin, ça doit pouvoir se gérer, tout en gardant la chronologie...

  4. #4
    Expert Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 990
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 990
    Points : 7 763
    Points
    7 763

    Par défaut

    N° de séquence et N° d'enregistrement, c'est la même chose dans ton explication??
    Oui.
    Par contre, ce qui m'ennuie, c'est qu'avec un n° d'enregistrement, au bout d'un moment, je vais arriver "au bout"
    faudra que je remette à zéro le n° d'enregistrement à un moment donné...
    C'est exact.
    Si LastSeq dépasse une valeur N, il faut une procédure qui remet les N° de séquences de 1 à nb_max en soustrayant à chaque N° de sequence N-Nb_Max.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre actif
    Inscrit en
    juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : juin 2005
    Messages : 499
    Points : 189
    Points
    189

    Par défaut

    Citation Envoyé par Graffito Voir le message
    Si LastSeq dépasse une valeur N, il faut une procédure qui remet les N° de séquences de 1 à nb_max en soustrayant à chaque N° de sequence N-Nb_Max.
    comme je le disais, j'y connais rien en manipulations sur les bases de données...
    Est-ce qu'il est possible de faire ce genre de procédure pour l'ensemble des éléments d'une table ou faut-il le faire élément par élément...

  6. #6
    Expert Confirmé Sénior Avatar de Graffito
    Inscrit en
    janvier 2006
    Messages
    5 990
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 5 990
    Points : 7 763
    Points
    7 763

    Par défaut

    Est-ce qu'il est possible de faire ce genre de procédure pour l'ensemble des éléments d'une table ou faut-il le faire élément par élément...
    Une commande SQL devrait suffire.

    En supposant que N-Nb_Max = 5678, cette commande serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Table1 SET NumeroSeq = NumeroSeq - 5678
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Membre actif
    Inscrit en
    juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : juin 2005
    Messages : 499
    Points : 189
    Points
    189

    Par défaut

    Ok, merci pour tout!

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

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