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 :

[Importer une table] de base access vers une autre base access


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut [Importer une table] de base access vers une autre base access
    Bonjour tout le monde,
    J'ai eu beau faire pas mal de recherche mais je n'ai rien trouvé quand a mon probleme.

    Dans l'idée, je dispose de bases Access BC.mdb et Travail.mdb.
    Dans ces 2 bases je dispose de deux tables de structure identique.
    L'idée c'est que j'arrive depuis Travail.mdb importer dans ma table les info qu'il y a dans BC.mdb :

    Voici le code de ma fonction :
    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
     
    Public Function SynchroBC_TITIA()
     
        Dim ConnexionBDD As DAO.Database
        Dim rsListingBC As DAO.Recordset
        Dim sStrSql As String
        Dim sSQLUpdate As String
     
        sStrSql = "DELETE * FROM [#T_Extraction_Mvts]"
     
        CurrentDb.Execute sStrSql
        'jusqu'ici tout se passe bien, je purge ma table dans TRAVAIL.mdb avant l'import
     
        Set ConnexionBDD = DBEngine.OpenDatabase(CheminBaseCreance) 'Ici je me connecte à BC.mdb
        sStrSql = "SELECT * FROM [#T_Extraction_Mvts_BC]" 'Hop je recupere toutes les valeurs de la table voulu dans BC.mdb
     
        Set rsListingBC = ConnexionBDD.OpenRecordset(sStrSql, dbOpenForwardOnly, dbReadOnly) 'ouverture du recordset
     
        While Not rsListingBC.EOF
            sSQLUpdate = "INSERT INTO [#T_Extraction_Mvts] (NumFacture, CCD, Ref, Montant, Date_Fact, SeuilRapprochement, RefSeq, Segment, ValiderExtraction)"
            sSQLUpdate = sSQLUpdate & " VALUES ( " & rsListingBC("NumFacture") & ", " & """" & rsListingBC("CCD") & """" & ", " & """" & rsListingBC("Ref") & """" & ", " & """" & rsListingBC("Montant") & """" & ", " & """" & rsListingBC("Date_Fact") & """" & ", " & """" & rsListingBC("SeuilRapprochement") & """" & ", " & """" & rsListingBC("RefSeq") & """" & ", " & """" & rsListingBC("Segment") & """" & ", " & """" & rsListingBC("ValiderExtraction") & """"
            sSQLUpdate = sSQLUpdate & ")"
     
            Form_Formulaire_Acceuil.TextBox_DebugUpdate.Value = sSQLUpdate
     
            CurrentDb.Execute sSQLUpdate 'voila j'ai l'impression que c'est la que ca peche un peu
            rsListingBC.MoveNext
        Wend
     
        ConnexionBDD.Close
     
    End Function
    Bon, comme vous pouvez le voir, le code est tout ce qu'il y a de plus scolaire, je pense que lorsque je fais le CurrendDB.execute sSQLUpdate, le compilo prend la base de donnée ouvert (et donc BC.mdb) et pas celle depuis laquelle ce module de synchro est executé (à savoir Travail.mdb).

    J'ai bien tenté d'utilisé un second DAO.database avec comme chemin de base, la base Travail.MDB, mais je me fais jeté à l'execution (ca doit etre car Travail.MDB est ouvert par le programme justement).

    J'avoue que je tourne un peu en rond ....
    Si quelqu'un pouvez m'aider ....

    ps : je tiens à preciser que la requete créé (donc sQLUpdate) fonctionne parfaitement lorsque je la copie colle depuis ma textbox vers l'editeur de requete de Travail.mdb.

    Merci d'avance,
    userB.
    Si tu ne sais pas m'expliquer pourquoi ca ne marche pas, alors tu ne sauras pas m'expliquer pourquoi ca marche.. -Un illustre chef de projet-

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Pourquoi ne pas faire plus simple.

    Un attachement de la table distante.
    Une requête (ou plusieurs) pour la mise à jour (update et Insert).
    Un suppression de la table précédemment attachée.

    Vu le niveau du code fourni je pense que tu n'aura pas de mal à le mettre en oeuvre.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut
    Bonjour et .... desolé pour ma reponse (tres) tardive.

    En fait, la solution que tu evoques loufab est l'utilisation actuelle de mon fichier (à quelques differences pret).

    Actuellement je dispose d'un lien vers BC.mdb et j'ai quelques sous formulaires qui ont pour tables d'entré la table lié.

    Cependant, depuis que cette mesure a ete implementé je n'arrive plus a compacter Travail.mdb et ainsi mes indice auto incrementé ne s'initialise plus!

    J'ai peur de tres vite explosé la taille maximun du type des indices auto increment et de ne plus pouvoir utilisé cette application (qui créé des bases de travail quotidiennement).

    Le compactage m'est interdit car j'ai un message disant que j'ai encore des clients connecté à ma base de donnée, a part BC.mdb lié pour recuperé la table je ne vois pas qui d'autre :/

    Voila pourquoi je cherche à m'affranchir au maximun de cette derniere en faisant une synchronisation des tables, puis mon compactage.

    Merci d'avance pour vos reponses.
    Si tu ne sais pas m'expliquer pourquoi ca ne marche pas, alors tu ne sauras pas m'expliquer pourquoi ca marche.. -Un illustre chef de projet-

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Le problème du compactage est ailleurs, en effet une base contenant des tables liées n'empêche jamais le compactage. Par contre une base étant la source de tables liées et si celles-ci sont ouverte (par des utilisateurs) le compactage ne peux fonctionner.

    1. deconnecte tous les postes clients
    2. supprime le (ou les) fichier(s) .ldb dans le cas ou l'un d'entre refuse de se supprimer c'est qu'il reste un utilisateur connecté.
    3. fait un compactage.

    Si il échoue encore.
    1. essaye le programme jetcomp.exe disponible chez Microsoft.
    2. Si le problème persiste ouvre un base vierge puis importe tous tes objets.


    Coté réinitialisation du Numéro Auto c'est rédibitoire en effet par contre un compteur Numéro Auto est un entier Long donc plus de 2 milliards de possibilité... avant de tomber en panne tu as le temps.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AC-2010] insert into pour envoyer les donnees d'une table Access vers une table Mysql
    Par jj4822 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 01/12/2014, 11h12
  2. [AC-2003] Export d'une table Access vers une table Excel
    Par lechtinico dans le forum VBA Access
    Réponses: 13
    Dernier message: 13/04/2010, 19h31
  3. Réponses: 3
    Dernier message: 15/10/2008, 09h24
  4. Probleme d'update d'une table dans un DataGridView vers une bd
    Par Faladin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/05/2008, 20h12
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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