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

VBA Access Discussion :

MAJ table dans une autre Database


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut MAJ table dans une autre Database
    Bonjour,

    j'ai des tables de même structure dans plusieurs Database. Je voudrais copier ces enregistrements dans une table unique dans une database unique. Lorsque j'utilise clic droit sur les tables source et que je renseigne la table cible, Access ne me permet que de remplacer la table cible et pas de la mettre à jour. Résultat similaire en utilisant du code VBA et la commande DoCmd.CopyObject.

    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
    Alors j'aimerais essayer ce code :
     
    Private Sub Cmd_Export_Access_Data_Click()
     
    Dim db_source As DAO.Database
    Dim db_cible As DAO.Database
     
    set db_source = Currentdb
     
    Set db_cible = ???????
     
    strTbl_source = "Ma_Petite_Table"
    strTbl_cible = "Ma_Grande_Table"
     
    Set strTbl_source = db_source.TableDefs(strTbl_source)  'Ouverture de la table source
    Set strTbl_cible = db_cible.TableDefs(strTbl_cible)  'Ouverture de la table cible
     
     
        Set rst_source = db_source.OpenRecordset("Ma_Petite_Table")
        Set rst_cible = db_cible.OpenRecordset("Ma_Grande_Table")
     
        rst_source.MoveFirst
        While rst_source.EOF = False
                rst_cible.Edit
                rst_cible("champ 1") = rst_source("champ 1")
                rst_cible("champ 2") = rst_source("champ 2")
                rst_cible("champ 3") = rst_source("champ 3")
                etc ...
     
                rst_cible.Update
     
                rst_source.MoveNext
                rst_cible.MoveNext
        Wend
     
        rst_source.Close
        rst_cible.Close
        Set rst_cible = Nothing
        Set rst_source = Nothing
    Mais je ne sais pas comment déclarer ma base cible :
    Set db_cible = ???????
    j'ai toujours utilisé set db = currentdb mais là ce n'est plus le cas !

    mes connaissances en VBA s'arrete là

    Merci si vous avez une solution

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Peux-tu utiliser des tables liées ? C'est à dire qu'à partir de ta base d'aglomération tu vas pointer sur tes tables sources.

    Si oui, après tu n'as plus qu'a faire une requête Ajout (append) qui prend ta table liée et qui ajoute ses enr à la table d'aglomération.

    Tu n'as ainsi aucune ligne de code à écrire.

    Si tu as besoin de détail, demande.

    A+
    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
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    Merci pour ta réponse.

    Effectivement, un ami m'avait aussi suggérer d'utiliser une requête mise à jour.

    Mais je ne suis pas très calé en requête et cela n'implique t'il pas de créer autant de requête que j'ai de tables source ?
    Si oui, autant copier-coller les enregistrements à la main non ?

    En fait j'aurais aimé créer un controle dans un de mes formulaire dans une des database source qui permette de faire cela. Puis de copier ce formulaire dans toute les database source (car ce formulaire déjà modifié doit de toute façon être copier dans toutes mes database source).

    Je ne sais pas si c'est clair mais bon, si tu veux bien me détailler la solution de la requête ajout , car je n'ai jamais utilisé de requête !

    Merci et bonne soirée

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Citation Envoyé par pchasser Voir le message
    Mais je ne suis pas très calé en requête et cela n'implique t'il pas de créer autant de requête que j'ai de tables source ?
    Oui mais comme il s'agit de requête AJOUT pas Miase à jour, si tes champs portent le même nom dans ta table Access gère automatiquement l'assignation cela va donc très vite à créer.

    Si oui, autant copier-coller les enregistrements à la main non ?
    En théorie, oui mais en pratique non car il es beaucoup plus facile d'exécuter une requête que de faire le copier collé à la main. La requête ne manque JAMAIS aucun enregistrement.

    En fait j'aurais aimé créer un controle dans un de mes formulaire dans une des database source qui permette de faire cela. Puis de copier ce formulaire dans toute les database source (car ce formulaire déjà modifié doit de toute façon être copier dans toutes mes database source).

    Je ne sais pas si c'est clair mais bon, si tu veux bien me détailler la solution de la requête ajout , car je n'ai jamais utilisé de requête !
    Non ce n'est pas vraiment clair pour moi.

    Ceci devra-t-il être fait plusieurs fois ?

    Les bases sources doivent-elles connaître la base fédératrice.

    Une solution relativement simple serait que tu lie chacune des bases source à ta table dans la base fédératrice.

    C'est exactement l'inverse de ce que tu fais actuellement mais cela à les avantages suivant :

    1) Seulement une table à ajouter aux bases sources
    1.5) Dans toutes les bases source tu peux utiliser la même requête ou le même code pour alimenter la base fédératrice.
    2) Ta base fédératrice n'a pas besoin de connaître les bases sources.


    Pour executer une requête par code tu peux faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim db as dao.database:set db=currentdb :'une fois par procédure
    db.querydefs("NomDeTaRequete").execute :'une fois par requête à utiliser
    db.close:set db=nothing :'Une fois par procédure
    Tu peux aussi le faire par VBA pur mais c'est généralement plus lent plus long à programmer.

    A+
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    Merci Marot ,c'est exactement ce que je voulais faire: travailler dans les bases sources plutôt que dans la base cible. Mais peut on lier la table cible aux tables sources même si elle ne sont pas dans le même database ? Ou bien n'ai je pas bien compris la manip.
    Merci encore

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Le principe d'une table liée c'est jsutement qu'elle n'est pas dans la même base que celle où on la lie.

    En réalité tu ajoutes simplemnet un pointeur (une référence) vers cette table qui reste dans sa BD d'origine et qui devient visible dans la base qui se lie à elle.

    C'est le méchanisme qu'on utilise quand on fait une application avec une base Front-End qui contient les formulaires et les requêtes et une base Back-End qui contient seulement les tables.

    Si ce n'est toujour pas clair, n'hésite pas à demander d'autres explications.

    A+
    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.

Discussions similaires

  1. [AC-2010] Afficher la date de MAJ des tables dans une autre table
    Par freeman3869 dans le forum Access
    Réponses: 12
    Dernier message: 28/04/2015, 11h07
  2. Insérer tout les id d'une table dans une autre
    Par MaitrePylos dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/09/2006, 16h19
  3. recopi des données d'une table dans une autre
    Par moicats dans le forum Access
    Réponses: 5
    Dernier message: 06/04/2006, 21h12
  4. copier une table dans une autre
    Par Dionisos dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/07/2005, 11h24
  5. concatenation des données d'une table dans une autre
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/10/2004, 11h38

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