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 :

Mise à Jour Table


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Mise à Jour Table
    Bonsoir !

    J'ai 2 tables : AGENTS et ENFANTS
    Pour 1 enreg AGENTS on a n enregs ENFANTS, avec une clé commune (Id_Agent).

    Je dois constituer une table AGENTS_ENFANTS, dans laquelle je dois mettre par enregistrement les coordonnées AGENTS ainsi que les noms / Prénoms et date de naissance des enfants (au maximum 3 enfants) : je sais, c'est pas logique mais l'organisme demandeur exige ce format !

    Au final je dois avoir pour 1 enreg de AGENTS_ENFANTS les champs suivants :
    Id_Agent * Id_Agents_... (autres infos) * Id_Enf_Nom1 * Id_Enf_Prenom1 * Id_Enf_Dat_Nais1 * Id_Enf_Nom2 * Id_Enf_Prenom2 * Id_Enf_Dat_Nais2 * Id_Enf_Nom3 * Id_Enf_Prenom3 * Id_Enf_Dat_Nais3.

    Quelqu'un a une idée, parceque vraiment je ne trouve pas ! Mais je suppose qu'il va falloir passer par du code ...
    Merci d'avance pour votre aide.

  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
    On doit surement pouvoir le faire par SQL mais en code c'est relativement simple. C'ets juste deux boucles imbriquées

    1) Crée la table de destination

    2) Copie ce code dans un module. Attention c'est du 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    private sub CreerTable()
       dim db as database:set db=currentdDb
       dim rAgent as recordset
       dim rEnfant as recordset
       dim rResult as recordset
       dim cptEnfant as integer
     
       set rAgent=db.openRecordset("TableAgent", dbOpenDynaset)
       set rEnfant=db.openRecordset("TableEnfant", dbOpenDynaset)
       set rResult=db.openRecordset("TableResult", dbOpenDynaset)
     
       do while not rAgent.eof()
          cptEnfant=0
          rEnfant.findfirst("[IdAgent]=" & rAgent![IdAgent])
          do while not rEnfant.nomatch()
     
              cptEnfant=cptEnfant+1
     
              if cptEnfant=1 then
                  rResult.addnew
                  rResult![IdAgent]=rAgent![IdAgent]
              end if
     
              if cptEnfant=4 then
                  'Plus de 3 enfant
                  'Enreistre l'enr courrant, crée un nouvel enr resultat.
                  rResult.update
     
                  cptEnfant=1
                  rResult.addnew
                  rResult![IdAgent]=rAgent![IdAgent]
              end if
     
              select case cptEnfant
                  case 1
                     rResult![IdEnfant1]=rEnfant![IdEnfant]
                     'Mettre ici les champs dont tu as besoin
     
                  case 2
                     rResult![IdEnfant2]=rEnfant![IdEnfant]
                     'Mettre ici les champs dont tu as besoin
     
                  case 3
                     rResult![IdEnfant3]=rEnfant![IdEnfant]
                     'Mettre ici les champs dont tu as besoin
     
                  case else
                     error 5
               end select
     
              rEnfant.findnext("[IdAgent]=" & rAgent![IdAgent])
          loop
     
          if cptEnfant<=3 then
             'Traite le cas ou il y a moins de 3 enfants et donc l'enr result n'a pas été écrit
             rResult.update
          end if
     
          rAgent.movenext
       loop
     
       rAgent.close:set rAgent=nothing
       db.close:set db=nothing
    end sub
    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
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Franchement, ça me parait répondre à 200 % à mon problème !

    Quand tu spécifies que c'est du DAO, ça veut dire quoi en terme de contrainte ? Est-ce que je peux l'exécuter dans un module via une fonction ?

    En tous les cas, je te remercie infiniment d'avoir pris du temps pour réfléchir à mon pb et d'y avoir répondu. C'est très sympa.

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Mise à Jour Table - Erreur de compile
    Bon, il y avait un piège, et je suis tombée dedans : la faute au DAO je parie !

    Pas de problème pour la mise en place, mais maintenant j'ai un message "Erreur de compilation : membre de méthode ou de données introuvable" sur l'occurence où il y a le Findfirst.

    J'ai l'impression qu'il me manque l'activation de certaines options : peut-être dans Outils / Références ?

    Quelqu'un(e) aurait une idée ?
    Merci d'avance !

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé : j'ai remplacé les déclarations Recordset par DAO.recordset.
    ça va beaucoup mieux !

    A bientôt ...

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

Discussions similaires

  1. Liste déroulante éditable et mise à jour table
    Par Nean dans le forum Bases de données
    Réponses: 11
    Dernier message: 02/12/2007, 23h03
  2. Débutant - Pb de mise à jour table
    Par Michel Hubert dans le forum Access
    Réponses: 4
    Dernier message: 20/04/2006, 13h53
  3. Mise à jour table liée à à sous formulaire
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 15/04/2006, 16h26
  4. Relation et mise à jour table
    Par Zbbfrom39 dans le forum Access
    Réponses: 2
    Dernier message: 04/11/2005, 07h22
  5. [TQuery][DBGRID] pb de mise à jour: table en lecture seule
    Par Chrystèle Carré dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/11/2003, 09h36

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