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 :

Transfert d'une table interne sur une table Access depuis VB


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut Transfert d'une table interne sur une table Access depuis VB
    Bonjour à tous, je ne savais pas trop ou placer ce sujet car il concerne du code VB mais egalement un peu d'access.

    Voici le problème :
    je dois transférer une dixaine de tables (dcéalrées comme tables appartenant a un objet myfunc.tables) de quelques 20000 enregistrements vers des tables Access.

    J'ai opté pour deux solutions : la premier en recordset qui s'execute cellule par cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Set rsMyRS = dbMyDB.OpenRecordset("Matable", dbOpenDynaset)
       For Each Matable In Matable.Rows
              rsMyRS.AddNew
               For i = 0 To 3 '3 etant le nombre de colonnes
               rsMyRS.Fields(i) = Matable(i + 1)
               Next
               rsMyRS.Update
      Next
    La deuxieme par insertion SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      For Each matable In matable.Rows 
           dbMyDB.Execute "insert into matable(colonne1) values ('" & matable(1) & "');"   
     Next
    Ces deux méthodes fonctionnent bien mais sont malheureusement très lentes ... et je ne peux pas me permettre de telles performances.

    Ma question est donc y a t'il des méthodes plus performantes ? Mes tables source et origine ont exactement la même structure, peut etre existe t-il un copietable ou quelque chose comme ça ?

    Merci d'avance de vos réponse.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    je partirais sur un rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "INSERT INTO NouvelleTable (...) SELECT (...) FROM MaTable"

    les (...) représentant les différents champs.

    Si jamais tu ne sais pas à l'avance leur nom, tu peux passer en amont par une variable string du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim ListeChamps as String
    Dim tmpTable As TableDef
    Dim i as Integer
    ListeChamps = ""
    Set tmpTable = CurrentDb.TableDefs("MaTable")
    For i = 1 to tmpTable.Fields.Count
    ListeChamps = ListeChamps  & "[" & tmpTable.Fields(i).Name & "]," 
    Next i
    'on supprime la virgule en trop à droite
    ListeChamps =left(ListeChamps,Len(ListeChamps)-1)
    CurrentDb.Execute "INSERT INTO NouvelleTable " & ListeChamps & " SELECT " & ListeChamps & " FROM MaTable"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    merci pour ta réponse très rapide !
    dans ta requète insert, je ne dois pas utiliser de for each pour parcourir toutes les lignes ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    ce n''set pas nécessaire, dans la mesure où tu insères le contenu d'une requête, pas un seul enregistrement
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    tu es vraiment très rapide, merci encore !
    je test ça et te tient au courant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    J'ai donc testé cette méthode mais j'ai un dernier soucis au niveau de la requète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentDB.Execute "INSERT INTO nouvelletable " & ListeChamps & " SELECT " & ListeChamps & " FROM " & matable & "
    car en fait matable (la table ou je vais chercher les données) est une table déclarée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim MyFunc As Object
    Set matable = MyFunc.Tables("w_matable")
    Mais il me dit bad index j'ai peut être oublié quelque chose ?

Discussions similaires

  1. Imprimer sur une page web sur une imprimante spécifique
    Par bleuerouge dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/12/2009, 09h51
  2. Pb sur une requête DELETE sur une chaine
    Par astrolane dans le forum Sybase
    Réponses: 4
    Dernier message: 16/02/2009, 09h11
  3. Réponses: 3
    Dernier message: 25/10/2007, 11h47
  4. Réponses: 2
    Dernier message: 10/07/2007, 10h04
  5. Réponses: 7
    Dernier message: 17/03/2007, 13h52

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