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 :

suivi de 'update'


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut suivi de 'update'
    Bonjour,

    J’ai une table Excel importée dans Access, et elle ‘update’ chaque semaine. En fait c’est une table qui enregistre le déroulement des contrats pour bp de projets.

    L’objet est de créer une requête ou un formulaire pour suivre « history » des updates.
    C’est à dire, à quelle date, quelles cellules ont été modifiées à quoi. (en fait 'les dates' peuvent etre utilisées directement puisqu'il correspond la colonne 'date' de la table importée)

    Je voudrais demander votre conseils, s’il vous plait !
    Merci d’avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Cafeine a un tuto qui traite de ce suivi.


    http://cafeine.developpez.com/access/tutoriel/update/

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    merci, mais ce n'est pas pour les donnes importées...

    en fait je n'ai que besoin de comparer chaques 2 tableux successives(importées à 2 dates) et enregistrer les differences

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    c'est avec DAO qu'il faut faire ça je pense...

    voir le tuto DAO :
    http://warin.developpez.com/access/dao/

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    je suis perdue...

    pour suivre les updates, j'aimerais créer une table avec les colonnes suivantes:
    ID(clé unique existante), nom de champ, la date, le contenu avant update, le contenu apres update
    cette table est pour enregistrer les cellules qui sont differentes que ceux de la table importée la semaine précédente.

    j'ai bp du mal à utiliser DAO

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par helenafr
    j'ai bp du mal à utiliser DAO
    alors commence à faire simple, sans te préoccuper dans un premier temps du problème des différences entre les tables.

    arrive tu déjà à parcourir une seule table?

    et insérer des données dans une table?

    ensuite (et peut-être même avant...) il faut (à mon avis) réfléchir à l'algorithme sur papier avant de le coder

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    en fait l'algorithme est simple, mais je suis presque nule en DAO alors je sais pas comment le traduis en DAO...

    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
    17
    18
    19
    20
    21
    22
     
    ' 1. la comparaison:
     
    'comparer deux celules, i est l'index de lingne, j est l'index de colonne
    for (i=0; i<length_line; i++)
       for(j=0; j< length_column; j++)
    { if table_org (i,j) =! table_updated (i,j)   
     
    ' 2. si différent, ajoute une ligne dans la table "update_info"
      oRst=oDb.OpenRecordset("update_info",dbOpenTable)
      oRst.AddNew
      'Affecte les différents champs
     
      oRst.Fields("ID").Value= i
      oRst.Fields("colomn").Value= j
      oRst.Fields("org_info").Value= table_org (i,j)
      oRst.Fields("updated_info").Value= table_updated (i,j)
      oRst.Fields("date").Value= table_updated (i,"date")
      ' les dates de update existent déjà dans la colone "date " de table_updated
     
      oRst.Update
    }
    c'est l'étape 1 qui me bloque
    merci bp bp de m'aider

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    oulah c'est quoi tout ça?

    je ne comprend plus tout, tu as tes données déjà dans des variables tableaux ou c'est l'algorithme??
    (ça ressemble plus à du php ton truc)

    t'as quoi exactement en entrée? deux tables? et une troisième pour stocker les différences?

    je pensais à un recordset pour chacune des deux tables à comparer et un troisième recordset pour la table des différences

    mais tu parles de lignes et de colonnes c'est bizarre, pour des tables on raisonne en enregistrement et en champs.

    dernière question : y a t-il systématiquement correspondance entre la ligne i de la nouvelle table et la ligne i de l'ancienne table? (autrement dit pas de suppression ou de rejout de ligne)

    (je sais pas si c'est moi mais en ce moment j'ai dû mal à comprendre...)

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Salut Arkham46 !

    Je suis désolée d’avoir trop compliqué les choses…
    En fait l’objet est de suivre la mise à jour d’une table importée, qui enregistre les demandes de client et les actions de notre service, elle comprend les colonnes : customer ID, customer name , date, customer demand, actions (de notre Service), project name, manager
    Cette table renouvelle chaque semaine, avec les nouvelles info des clients existants et aussi des nouveaux clients.
    Donc pour suivre les updates, j’ai pensé d’importer dans Access 2 tables ---- la table la plus récente la table plus ancienne, soit table A et B , A est la version ‘updated’ de B. il suffit de comparer ces 2 tables et enregistrer les différences dans une autre table nommée UPDATE.
    Chaque semaine, j’ import la nouvelle table et garde l’ancienne, compare les 2 et enregistre les différences dans le table UPDATE, qui comprend 6 colonnes :
    1 customer ID; 2 customer name ; 3 date; 4 the column modified; 5 the ancient content of the cell; 6 the last content of the cell
    ici la colonne 5 correspond les cellules qui vont etre modifiée de la table B, 6 correspond les cellules déjà modifiée dans A, les colonnes 1,2,3 est la même pour A et B, et colonne 4 correspond le nom de colonne de la cellule modifiée.

    Le problème est que je sais pas comment trouver les cellules ‘updated’ avec leur index , et leur enregistrer…

    J’espère qu’il est claire cette fois

  10. #10
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    salut

    un peu plus clair oui
    donc c'est des tables!

    la méthode pour lire les données est à déterminée :
    - soit tu parcours les tables enregistrements par enregistrements avec un classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Rs.MoveFirst
    While not rs.EOF
      ...
      Rs.MoveNext
    Wend
    - soit tu utilises la méthode DAO GetRows pour lire un une seule fois les données des deux tables et les stocker dans deux tableaux.

    Faut voir en fonction de la volumétrie des données peut-être.
    Est-ce que tu vides la table UPDATE à chaque nouveau chargement?

    Et envisager aussi l'algorithme à faire évoluer, j'ai l'impression qu'il peut y avoir des lignes insérées ou supprimées, ce qui n'est géré par ton alogrithme.

    Désolé j'ai pas plus précis, y a encore des zones de flous pour moi.

  11. #11
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    tiens j'ai retrouvé un truc :

    si tu as un Id unique tu peux créer une requête union et group by pour ne conserver dans la requête que les lignes différentes entre les deux tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Max(ReqUnion.NomTable) AS MaxDeNomTable, ReqUnion.champ1, ReqUnion.champ2, ReqUnion.champ3
    FROM [SELECT "Table1" as NomTable,Table1.* FROM Table1
    Union
    SELECT "Table2" as NomTable, Table2.* FROM  Table2]. AS ReqUnion
    GROUP BY ReqUnion.champ1, ReqUnion.champ2, ReqUnion.champ3
    HAVING (((Count(*))=1))
    ORDER BY ReqUnion.champ1;
    si tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Table1:
    10  tata
    20  titi
    30  toto
     
    Table2 :
    10 tutu
    20 titi
    40 tete
    la requête renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MaxDeNomTable    champ1 champ2
    Table1            10      tata
    Table2            10      tutu
    Table1            30      toto
    Table2            40      tete
    après c'est déjà plus simple de faire une seule boucle avec DAO sur cette requête où il n'y a que les différences

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    merci

    pour :SELECT Max(ReqUnion.NomTable) AS MaxDeNomTable,
    pourquoi on prend "Max" ici?

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    on met Max parce qu'il faut mettre une opération pour satisfaire le group by

    comme le champ NomTable est une constante on peut prendre n'importe laquelle : Max,Min,First ou Last donne le même résultat

Discussions similaires

  1. LinqToSql insert suivi d'un update
    Par tortuegenie dans le forum Linq
    Réponses: 0
    Dernier message: 13/09/2010, 16h29
  2. problème avec un alter table suivi d'un update immédiat
    Par jmclej dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 11/06/2010, 21h44
  3. [MySQL] UPDATE suivi d'un SELECT, mauvais synchronisme ?
    Par FrankOVD dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/09/2008, 22h43
  4. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

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