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

Requêtes et SQL. Discussion :

[VBA + SQL] Concaténation et jointure à partir de 2 tables


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut [VBA + SQL] Concaténation et jointure à partir de 2 tables
    Salut,

    j'ai :
    - une table HEXACLE avec les champs Matricule_Voie et Adresse
    - une table HEXAVIA avec le champs Matricule_Voie en tant qu'identifiant unique.

    Dans HEXACLE il y a un ligne par adresse, donc le champ Matricule_Voie peut se retrouver de 1 à n fois dans cette table.

    Ce que je souhaite faire - après avoir créé un champ Adresse dans HEXAVIA - c'est concaténer toutes les Adresse de HEXACLE sur chaque enregistrement Matricule_Voie correspondant de HEXAVIA.

    J'ai donc regardé du côté de la source : http://access.developpez.com/sources...QLLigneColonne pour la concaténation dans une seule table.

    Donc j'imagine que tout en gardant le même code VBA il suffit peut-être d'adapter la requête à lancer de façon à mettre à jour directement la table HEXAVIA. Mais là je m'embrouille un peu les pinceaux avec les jointures et l'appel à la fonction RecupAdresse qui pour le moment est dans l'état simple de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT HEXACLE.Matricule_Voie, RecupAdresse(Matricule_Voie) AS LesAdresses
    FROM HEXACLE;
    Un petit coup de main ?

  2. #2
    Membre éclairé
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Par défaut
    Bonjour,

    Que veux-tu faire exactement ?

    J'avoue que je ne comprends pas trop...

  3. #3
    Membre éclairé
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Par défaut
    qu'as-tu et que veux tu afficher ?

    Si tu ne le dis pas clairement, je ne peux pas t'aider !

    Cordialement,

    Steph

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut
    Salut,

    alors voilà j'ai :

    Table HEXACLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Matricule_Voirie | Adresse
    0001                  2
    0002                  2
    0002                  3
    0002                  4
    0003                  1
    0003                  2
    0004
    Table HEXAVIA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Matricule_Voirie | Libelle_Voie | Adresse
    0001                Rue machin
    0002                Rue Truc
    0003                Rue Chose
    0004                Rue Dutruc
    et dans cette dernière table j'aimerais concaténer toutes les adresses correspondants provenant de HEXACLE pour obtenir :

    Table HEXAVIA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Matricule_Voirie | Libelle_Voie | Adresse
    0001                Rue machin     2
    0002                Rue Truc       2;3;4
    0003                Rue Chose      1;2
    0004                Rue Dutruc
    La liaison se faisant avec le champ Matricule_Voie.
    Est-ce que mon explication semble plus claire ?
    Je sais que cela doit être assez simple mais là je nage...

  5. #5
    Membre éclairé Avatar de samuelsiffert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Par défaut
    Bonjour,

    Voici le code a mettre dans un module :

    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 Function Adresse(strMatricule As String) As String
     
        Dim rst As Recordset
        Dim strRequete As String
     
        strRequete = "SELECT adresse FROM HEXACLE WHERE Matricule_Voirie='" & strMatricule & "'"
        Set rst = CurrentDb.OpenRecordset(strRequete)
     
        While Not rst.EOF
            Adresse = Adresse & rst.Fields(0).Value & ";"
            rst.MoveNext
        Wend
        rst.Close
        Set rst = Nothing
     
        Adresse = Left(Adresse, Len(Adresse) - 1)
     
    End Function
    et la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE HEXAVIA SET HEXAVIA.Adresse = RecupAdresse([HEXAVIA].[Matricule_Voirie]);
    Merci de penser à marquer cette discussion résolue si c'est le cas.

    @+

    Sam

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 43
    Par défaut
    Super,

    Pour la requête c'est exactement ce qu'il me fallait !

    pour le code VB c'est ce que j'avais effectivement collé dans un module en ajoutant toutefois un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Adresse <> "" Then
        Adresse = LEFT(Adresse, Len(Adresse) - 1)
    Endif
    pour éviter un message d'erreur lorsque la requête retourne un résultat vide.

    Une dernière question : la table HEXACLE contient environ 18 millions d'enregistrements, y a-t-il un moyen pour accélerer le process sans passser par un autre outil que Access ?

    En tout les cas, grand merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Jointure ADO avec VBA Sql
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2011, 10h03
  2. (VBA SQL) insertion d'un count dans une table
    Par tieumss dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/01/2009, 10h24
  3. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13
  4. [PL/SQL] update avec jointure
    Par Fox_magic dans le forum Oracle
    Réponses: 6
    Dernier message: 09/12/2004, 12h19
  5. [Transact SQL] concaténer jour+heure
    Par tiboleo dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 02/12/2004, 13h12

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