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

Macros et VBA Excel Discussion :

Union de bases de données ou recordset [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut Union de bases de données ou recordset
    Bonjour,
    Je travaille sur des statistiques venant de plusieurs bases de données identiques au format .mdb
    J'aimerais unir plusieurs bases de données et y appliquer un seul recordset.
    Je précise que je n'ai pas ACCESS et que mes bases de données contiennent plusieurs tables (donc UNION en SQL n'est pour moi pas utilisable)
    Principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set base(1) = DBEngine.OpenDatabase(chemin_bd(1))
    Set base(2) = DBEngine.OpenDatabase(chemin_bd(2))
    .
    .
    .
     
    Set base(n) = DBEngine.OpenDatabase(chemin_bd(n))
    Set base_ppl = base(1) + base(2) + ... + base(n)
     
    Set enr = base_ppl.OpenRecordset("SELECT * FROM uneTable", dbOpenDynaset)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    With creatobject("Adodb.Connection")
    .open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myrep\base1.mdb;"
     
    Sql ="select * from table1 "
    Sql=sql & " union all"
    Sql=sql & " select * from table2 in ('c:\myrep\base2.mdb')"
    Set rs=.execute(sql)
    Rs.close
    Set rs=nothing
    .close
    End with
    End sub

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Merci pour la réponse rapide. Je vais tester.
    Mais comme je suis jeune dans le SQL et les bases de données, j'ai donc quelques questions peut-être idiotes :
    1) quel type de variable est creatobject car j'ai une erreur "block with non défini" ?
    2) je travail sur mon recordSet après le code suivant ?Je comprends vite mais faut m'expliquer longtemps

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé, mais si je me fait appeler dysorthographie c'est pas pour rien

    CreateObject

    https://msdn.microsoft.com/fr-fr/vba...bject-function

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    (Désolé, je l'avais pris pour une variable)

    Test infructueux : Erreur dans la requête.

    Dans mon code la table a le même nom comme ici table1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sql ="select * from table1"
    Sql=sql & " union all"
    Sql=sql & " select * from table1 in ('c:\myrep\base2.mdb')"
    Le soucis vient je pense de "IN". Pour moi, il n'est utilisé que avec "WHERE"
    Ou peut-être me trompe-je?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le in indique qu'il s'agit d'une jointure externe vers une autre base Access et n'a rien à voir avec le where!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sql ="select * from table1 "
    Slq=sql & " where champs1='toto' "
    Sql=sql & " union all"
    Sql=sql & " select * from table1  in ('c:\myrep\base2.mdb')"
    Sql=sql & " where  champs1='titi'"
    b

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Merci pour le IN
    J'ai toujours une erreur mais je pense savoir pourquoi. Au début, il y avait une erreur sur ce code J'ai donc déclaré rs mais sans doute que ce n'était pas le bon type de variable

  8. #8
    Invité
    Invité(e)
    Dernière modification par Invité ; 05/10/2018 à 00h56.

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Ca se décante :
    Par contre j'ai toujours mon erreur de syntaxe dans la clause From.
    J'ai isolé certains éléments de la requête SQL et le problème vient de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sql=sql & " union all"
    Sql=sql & " select * from table1  in ('c:\myrep\base2.mdb')"
    Alors j'ai peut-être un indice : mon répertoire contient des espaces exple :Ca peut venir de là?

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    J'ai testé, toujours pareil avec des répertoire sans "espace" et un fichier de base de données moins long mais c'est toujours pareil…

    Donc ce n'est pas un soucis de longueur de caractères ou "d'espace" de la chaine du répertoire de la base de données. Ca vient de la requête SQL.

    J'ai donc testé cette requête avec la méthode que j'employais avant avec des openRecordset et dataBase et c'est la même chose.

    "IN" n'est pas pris en compte pour moi dans mon script. Il doit me manquer autre chose comme une option ou un truc comme ça. Je suis sur que c'est un truc tout bête.

  11. #11

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Je n'ai pas Acces

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je sais mais ça te montre que ça marche

    Tu as u message d'erreur ? Si oui fais un imprimer écran.

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Désolé pour le temps, j'ai fait une petite pause :
    Nom : erreur.png
Affichages : 349
Taille : 23,3 Ko
    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
    Private Sub CommandButton1_Click()
        Dim sql As String
        Dim rs As Object
     
        With CreateObject("Adodb.Connection")
            .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\my rep\mabase1.MDB;"
     
            sql = "select * from table1"
    '        sql = sql & " where champ1='toto'"
            sql = sql & " union all"
            sql = sql & " select * from table1 in (FILENAME='C:\my rep\mabase2.MDB')"
    '        sql = sql & " where table1='toto'"
            Set rs = .Execute(sql)
            rs.Close
            Set rs = Nothing
            .Close
        End With
     
    End Sub

  15. #15
    Invité
    Invité(e)
    Par défaut
    onsoir,
    Déjà c'est in ('C:\my rep\mabase2.MDB')"
    Ta table s'appel table1?

    Édite: Effectivement erreur de syntaxes !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test()
    With CreateObject("Adodb.Connection")
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ThisWorkbook.Path & "\Database1.accdb;"
    Sql = "select * from table1 "
    Sql = Sql & " union all"
    Sql = Sql & " select * from table1 in '" & ThisWorkbook.Path & "\Database2.accdb'"
     
    ActiveCell.CopyFromRecordset .Execute(Sql)
    .Close
    End With
    End Sub
    Dernière modification par Invité ; 17/08/2018 à 00h21.

  16. #16
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    J'avais fait tellement de tests que je n'avais pas remis en ordre. En rectifiant, je retrouve avec exactement la même erreur

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En fait le problème est le in ()

    in 'C:\my rep\mabase2.MDB'

  18. #18
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Je crois que j'ai déjà tester sans les parenthèses mais je vais recommencer.
    Je vois ça demain avec un spécialiste des requêtes SQL et java. Peut-être pourra-t-il m'ouvrir les portes du SQL. Il m'a déjà signalé qu'il y avait un langage SQL plus complexe. Peut-être que c'est celui-ci qui prend en compte le "In ()"

  19. #19
    Invité
    Invité(e)
    Par défaut
    J'ai testé avec l'exemple précédent et ça à fonctionné.

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 15
    Par défaut
    Merci pour la patience dont tu fais preuve.

    Il ne manquerait pas quelque chose ici ?
    Nom : Sans titre.png
Affichages : 334
Taille : 17,3 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/11/2013, 10h52
  2. Recordset.Delete et base de données
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/03/2009, 12h22
  3. Réponses: 2
    Dernier message: 27/02/2008, 13h19
  4. Réponses: 13
    Dernier message: 20/04/2006, 16h37
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 17h16

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