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 :

Importation de données d'une base à une autre


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut Importation de données d'une base à une autre
    Bonjour,
    J'ai créé une base constitué d'une partie frontale et dorsale que nous appellerons Base1.
    La partie frontale est enregistrée dans mes documents et la partie dorsale est enregistrée sur un espace réseau qui n'est accessible que lorsque je suis au travail ou à distance dès que mon PC peut se connecter à internet.
    J'aimerai pouvoir utiliser cette base hors connexion et pensais créer une autre base (que je nommerai Base2) que j'utiliserai uniquement en déplacement que je créerai en important le contenu de la base frontale et dorsale mais par la suite pour que les données soient actualisées avant de partir en déplacement il faudrait que je puisse récupérer ou mettre à jour le contenu des données de la base dorsale et aussi vis-versa pouvoir mettre à jour les données de la Base2 dans la partie dorsale de la Base1

    Est-ce que quelqu'un aurait une idée de comment procéder ?

    Merci 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
    Bonjour.

    Est-ce que quelqu'un aurait une idée de comment procéder ?
    Oui et cela n'a rien de simple.

    1. La solution la plus facile est de copier localement ta base dorsale, y travailler et la recopier quand tu as fini.
      Si tu es le seul utilisateur ne cherche pas plus loin, il n'y a pas de meilleure solution.
      Note qu'on peut facilement changer la connexion via VBA en quelques lignes code.
    2. Si tu n'es pas le seul, là seconde méthode la plus simple est la compartimentation des données.
      C'est un truc du genre M. X ne travaille que sur les données Y et les autres n'y touchent pas.
      Donc on fait du code qui supprime les données de Y et qui remet les nouvelles données de Y à la place ou un peu plus compliqué du code qui modifie, ajoute ou supprime les données existantes avec les nouvelles données.
    3. Si tu ne peux pas compartimenter tes données alors tu as besoin d'un mécanisme qui modifie, ajoute ou supprime les données existantes avec les nouvelles données ET qui en plus gères les conflits de modifications.
      Du genre M. X a modifié la donnée de Y mais Mme Z à aussi modifié la même donnée de Y. Qui a raison ? M. X ou Mme Y, le dernier qui a modifié, le premier, ... ?
      Note que si tu as des numéro automatiques cela complique un peu plus le problème pour ce qui est des créations.


    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 régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Bonjour,
    Merci pour tes propositions.

    Il n'y a aucun risque de conflit sur les enregistrements car chaque enregistrement créé est personnalisé en fonction de l'utilisateur connecté et seul la personne qui a créé le compte-rendu (par exemple) peut le modifier, il sera en lecture seul pour les autres utilisateurs.

    Existe-il une fonction qui permettrait de supprimer les tables, requêtes, formulaires et états de la Base2 et d'importer ces mêmes objets de Base1 vers la Base2 au moyen d'une macro déclencher volontairement via un bouton ?

    Par contre depuis la base1 j'aimerai pouvoir importer tous les nouveaux enregistrements créés dans la Base2

    Je viens de trouver cet exemple de code pour importer un ETAT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferDatabase acImport, "Microsoft Access", "C:\CheminDeLaBase\NomDeLaBase.mdb", acReport, "NomDeL'ETAT", "NomDeL'ETAT"
    Mais comment transposer ce code pour importer tous les ETATS, tables, requêtes et formulaires ?

    Merci pour ton aide

  4. #4
    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
    Bonjour.

    L'idée est de n'importer (s'occuper) QUE les données.
    C'est déjà assez compliqué comme cela.

    Pourquoi souhaites-tu importer des objets de ta dorsale ?

    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 régulier
    Homme Profil pro
    Responsable qualité
    Inscrit en
    Mars 2012
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 341
    Points : 111
    Points
    111
    Par défaut
    Je pensais mettre en place cette fonction pour pouvoir diffuser les mises à jour des formulaires, requête, Etats mais c'est exact il est préférable de se concentrer uniquement sur les données.

    Aurais-tu une solution à me proposer pour importer les données des tables de Base1 vers Base2 et vis-versa ?

  6. #6
    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
    Pour répondre à ta question, oui on peut importer des objets d'une base à une autre mais si tu adoptes l'architecture :

    BaseFrontale : Le code, les requêtes, les rapports, les formulaires
    BaseDorsale : Les tables, les relations.

    Tu as juste à remplacer BaseFrontale par une nouvelle version.
    C'est BEAUCOUP plus simple comme cela.

    Pour en revenir à ton problème d'itinérance.

    Le plus simple est d'avoir :

    BaseFrontale : Le code, les requêtes, les rapports, les formulaires
    BaseDorsale_Connecte : Les tables, les relations.
    BaseDorsale_NonConnecte : Les tables, les relations.

    Dans ta base frontale, il faut avoir 2 fois toutes les tables liées.
    Tes tables liées comme actuellement sur ta base réseau.
    Et tes tables liées une seconde fois sur ta base réseau (je et suggères de d'ajoute _Reseau à la fin du nom).
    En mode réseau, tes tables liées sont branchées sur ta base réseau BaseDorsale_Connecte
    En mode déconnecté, tes table liées sont branchées sur ta base NonConnecte.

    Quand tu quittes ton bureau, tu recopies BaseDorsale_Connecte en lieu et place de BaseDorsale_NonConnecte.
    Cela évite d'avoir à gérer la mise à jour dans ce sens là.
    Et il va falloir faire un peu de code pour "rebrancher" l'appli sur BaseDorsale_NonConnecte au lieu de BaseDorsale_Connecte.
    (Pour les détails je te reviens plus tard).

    Quand tu reviens à ton bureau, là il va falloir faire la mise à jour.
    La méthode la plus brutale consiste à supprimer dans toutes les tables, les données de l'utilisateur.
    Puis ensuite de rajouter toutes les données de l'utilisateur.
    Attention il y a un ordre à respecter pour les suppressions et pour les ajouts.
    Une fois les transferts fait, tu rebranches l'appli sur BaseDorsale_Connecte.
    (Pour les détails je te reviens plus tard).

    Je prévois un bouton "Deconnexion" et un bouton "Connexion" qui feront les étapes nécessaires.
    Je pense qu'il est plus prudent de laisser l'opérateur décider mais il est peut-être possible de détecter qu'il faut faire la reconnexion de manière automatique. Il faut toute fois y penser un peu.

    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.

  7. #7
    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
    Exemple de code pour "rebrancher" tes tables :

    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
    public sub rebrancher(prmRepertoireNomBD as string)
       dim db as dao.database:set db=currentdb
     
       for each t in db.tabledefs
          if t.connect<>"" then
             'C'est une table liée
     
             if not t.name like "*_Reseau" then
                'C'est une des tables qui doit être rebranchée
                t.connect=";DATABASE=" & prmRepertoireNomBD 
             end if
     
          end if
     
       next t
     
       db.close:set db=nothing
    end sub
    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.

  8. #8
    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
    Pour la suppression/rajout.

    Il faut supprimer les enfants avant les parents dans la BD connectée.
    Il faut ajouter les parents avant les enfants dans la BD connectée.

    Attention si dans les enfants tu as une référence au parent via un numéro auto, cela va être un peu délicat.
    pour l'ajout, il faut faire quelque chose comme :

    pour chaque parent dans la BD Non Connectée
    créer le parent dans la BD Connectée
    récupérer le numéro du parent "connecté"
    pour tous les enfants du parent dans la BD non connctée
    créer l'enfant dans la BD Connectée en lui attribuant le numéro du parent connecté.
    Fin pour enfant
    Fin pour parent

    Et attention, je ne suis pas capable d'automatiser la suppression / recréation donc si tu fais un changement dans ta hiérarchie, il faudra modifier ton code.

    A+
    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. Rechercher dans une base une base sqlserver avec Control REGEX
    Par souhail72 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/09/2016, 14h28
  2. [SQL]Importer les données d'un base à un autres
    Par Msysteme dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2009, 16h21
  3. Importer données d'une table d'une base à une autre
    Par kat40 dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/02/2008, 14h57
  4. Réponses: 5
    Dernier message: 24/03/2007, 15h00
  5. Réponses: 3
    Dernier message: 22/12/2006, 17h10

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