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 :

Regrouper des enregistrements dans un seul champ [AC-2007]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Regrouper des enregistrements dans un seul champ
    Bonjour,
    J’ai besoin d’aide car je suis bloqué sur un truc qui me prend la tête depuis hier :

    J’ai une Table nommée « TableTG »
    Celle-ci se compose de 2 champs :
    - « EQQL » qui est un champ texte contenant les références de mes commerciaux
    - « Voie » qui est un champ mémo contenant les noms de rue
    Voici un exemple de ma table :
    EQQL Voie
    0110 RUE D AVEJAN
    0221 RUE BEAUTEVILLE
    0110 PASSAGE CHAMPEYRACHE
    0221 PLACE DU GENERAL LECLERC
    0110 RUE PASTEUR


    J’ai besoin en sortie d’avoir en sortie sur une nouvelle table :
    EQQL Voies
    0110 RUE D AVEJAN / PASSAGE CHAMPEYRACHE / RUE PASTEUR
    0221 RUE BEAUTEVILLE / PLACE DU GENERAL LECLERC

    Donc d’avoir dans un même champ regroupé sur EQQL, l’intégralité des enregistrements pour le champ « Voie ».

    D’avance merci de votre aide…

    Ludo

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir CyberLudo,


    Vite fait sur le gaz :

    Je vous propose une fonction en VBA, nommée Concatener. Pour la tester, j’ai utilisé un petit formulaire qui ne sert qu’à ça.

    Le résultat de l’opération appliquée à la table TableTG se trouve dans une table nommée Concatenation (remise à zéro au chargement du formulaire, pour éviter les doublons au cours des tests).

    Je joins le fichier .mdb correspondant.

    A vous d’aménager selon vos besoins...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Génial merci...
    Super tu me sauves la vie ! Merci encore et vive toi !

    Ludo

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut Suite Regrouper des enregistrements dans un seul champ
    Super je cherchais également à réaliser chose semblable
    mais je me suis aperçu que si la phrase contenait le caractère ' il y avait une erreur

    1) voici l'exemple :

    Bonsoir je teste le
    caratère ' et çà bloque

    -> Erreur 3075. Erreur de syntaxe (opérateur absent) dans l’expression ‘Bonsoir je teste le /caractère 'et çà bloque);

    Comme solution j'ai remplacé le ' par " -> mais c'est pas joli, existe-t-il une solution ?

    2) Serait-il possible d'avoir cela dans une macro et pas dans un formulaire ?

    D'avance Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Pour info je suis en access 2010
    merci

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Pdg6704,


    Citation Envoyé par Pdg6704
    Erreur 3075. Erreur de syntaxe (opérateur absent)
    Il est un fait que SQL interprète « ' » comme caractère de fin de chaîne et donc attend un opérateur à la suite... Je pense pouvoir régler ça dès que.


    Je vous tiens au courant.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Voilà, c’est fait. Depuis toujours, SQL demande que l’on double les caractères de fin de chaîne (apostrophes) qui se promènent dans les chaînes de caractères, j‘ai donc utilisé la fonction REPLACE pour remédier :

    x = REPLACE(w, "'", "''")


    Les apostrophes sont préservées dans le résultat (table Concatenation).

    Je joins le fichier .mdb correspondant.


    Merci de me tenir au courant.

    François
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Merci François, c'est très bien et cela fonctionne.

    J'ai fait l'implémentation dans ma base, il y a plus des 10000 lignes pour le test ensuite 1250000 lignes

    J'ai quelques différences avec la toute première demande, en effet

    1)chez moi le champ voie peut contenir des blancs : le ficher est comme cela au départ (j'aurais juste un espace en plus dans le champs voies ou alors tester le champs voie et si c'est vide et ne pas en tenir compte, ce serait plus propre)
    2) Il faudrait en plus tenir compte du champs Type, le champs Type à 4 valeurs , T,C,M et Blanc -> il faudrait prendre les EQQL qui sont du type T uniquement

    3) le champ voies doit être du type mémo car le texte est parfois >255 caratères et quand on a fini de concatéter et il manque donc du texte

    Je n'ai pas compris pourquoi il y avait 2 clés primaires dans ta TablesTG-> je les ai supprimées pour pouvoir intégrer les cases blanches et mis les champs sur chaine vide autorisé
    j'ai aussi modifié la ligne
    w = Left(theChaine, Len(theChaine) - 1) avant c'était -3 est cela coupait certaine partie de phrase (y avait-il une raison de mettre 3 )
    j'ai remplacé le " / " par " " car dans mon cas ce n'est pas necessaire.

    Voilà peux-tu analyser ma demande ?

    Merci
    Thierry

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Ave Thierry,


    On fait dans le sur mesure

    Je m'en occupe.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Thierry,


    Citation Envoyé par Pdg6704
    le champ Voie peut contenir des blancs
    J’interprète cela comme une ligne pout laquelle l’attribut Voie ne contient que du « blanc » Dans ces conditions, je commencerai par faire un TRIM de chaque chaîne lue. Si au résultat la longueur est égale à zéro, je ne créerai pas de ligne dans la table Concatenation.



    Citation Envoyé par Pdg6704
    il faudrait prendre les EQQL qui sont du type T uniquement
    Autrement dit, vous souhaitez mettre en œuvre un attribut TypeEQQL : soit.



    Citation Envoyé par Pdg6704
    le champ Voie doit être du type mémo car le texte est parfois >255 caractères
    D’accord. Mais lors de la lecture de la colonne, ce c... d’ACCESS tronque à 255 caractères, sauf si on lit bestialement (OpenRecordset("TableTG", dbOpenDynaset)). C’est plus lourd et plus lent. Vous me direz si vos performances en souffrent...



    Citation Envoyé par Pdg6704
    Je n'ai pas compris pourquoi il y avait 2 clés primaires dans ta TablesTG-> je les ai supprimées pour pouvoir intégrer les cases blanches et mis les champs sur chaine vide autorisé
    Par définition, une table n’a qu’une clé primaire. En l’occurrence, il s’agit de la paire {EQQL, Voie}. Supprimons la clé primaire, mais alors TablesTG n’est plus une table au sens relationnel, elle dégénère en « sac », c'est-à-dire une chose où l’on peut avoir des lignes en double, et où l'on ne se soucie pas de la présence du bonhomme Null. Un sac n’est pas manipulable par l’algèbre relationnelle. Mais c’est vous qui voyez...



    Citation Envoyé par Pdg6704
    y avait-il une raison de mettre 3
    Oui, car Ludo souhaitait séparer par « / » les éléments concaténés (espace, slash, espace). Donc on retrouvait inutilement ce trio en fin de chaîne, d’où son élimination.


    Et n’oubliez pas de voter pour les réponses qui ont pu vous être utiles...


    Ci-joint la dernière mouture.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  11. #11
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Thierry,


    Citation Envoyé par Pdg6704
    Lors de la lecture de la colonne, ce c... d’ACCESS tronque à 255 caractères, sauf si on lit bestialement (OpenRecordset("TableTG", dbOpenDynaset)). C’est plus lourd et plus lent. Vous me direz si vos performances en souffrent...
    Bon, finalement, en partant de scratch, j’arrive à utiliser un recordset filtrant, sans troncature à 255 caractères, donc les performances devraient être meilleures avec le fichier .mdb que je joins ici. Sinon, mystère, je n’ai toujours pas compris pourquoi Access tronquait, alors que le code est identique à un poil près...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Bonjour François merci pour ton travail

    J'ai testé les deux possibilités "Voiecontact A et Voiecontact V, effectivement cela prend du temps tu as raison (pour 120000 données il faut plus d'une heure.
    Pour l'instant je teste ta dernière solution (version du 16/08) çà vient de se terminer en 35min

    Une petite remarque concernant l'interprétation des lignes blanches

    >>>Envoyé par Pdg6704
    >>>le champ Voie peut contenir des blancs
    -> J’interprète cela comme une ligne pour laquelle l’attribut Voie ne contient que du « blanc » Dans ces conditions, je commencerai par faire un TRIM de chaque chaîne lue. Si au résultat la longueur est égale à zéro, je ne créerai pas de ligne dans la table Concatenation.
    >>>>Envoyé par Pdg6704
    il faudrait prendre les EQQL qui sont du type T uniquement
    Autrement dit, vous souhaitez mettre en œuvre un attribut TypeEQQL : soit.

    Je me suis sans doute mal exprimé -> Il faut prendre tous les enregistrements EQQL qui on le type "T" ça c'est juste et les mettre dans concaténation même s'il y a des valeurs dans le champ voie qui sont à blanc. C’est pour éviter Texte 1 / / / texte x et n’avoir que Texte 1 / texte x
    Parce qu'après je dois savoir combien il y a "de réponses" dans le cas ci-dessous j'aurai 2 réponses sur 3 soit 66,66%
    exemple
    0200 T Bonjour
    0200 T
    0200 M 1254687
    0200 T François
    0210 T
    0300 T Merci
    0301 C possible
    0301 T Bien

    cela devrait donner dans concatenation
    0200 Bonjour / François
    0210
    0300 Merci / Bien

    Encore super pour le développement avec moitié de temps..

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Thierry,


    Citation Envoyé par Pdg6704
    même s'il y a des valeurs dans le champ voie qui sont à blanc

    D’accord. Côté SQL c’est moins filtrant, par conséquent la durée du traitement risque de s’allonger... A propos des performances, il faut veiller à ce que la colonne EQQL de la table soit indexée, sinon la durée est considérablement accrue.

    Les résultats avec le nouveau fichier . mdb que je joins sont-ils corrects ? Que deviennent les perfs ? Pour exécuter : cliquer sur le formulaire.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Bonjour François,
    j'ai fait le test avec cette version, en gardant la colonne EQQL indexée. Pour traiter les 120000 lignes, il faut +/-6min (une fois en 369sec et une fois 349).
    Pour moi c'est vraiment parfait, et cela me convient bien comme cela.

    je vais poursuivre en intégrant complètement ton module dans mabase.

    Encore un grand merci pour tes réalisations, cela va m'aider énormement

    Bien à toi
    Thierry

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonne route Thierry ! S'il y a un problème, tu connais la maison
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

Discussions similaires

  1. [AC-2007] Concaténer des enregistrements dans une seule colonne
    Par germchou dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 03/07/2018, 16h00
  2. Regrouper des rapports dans un seul rapport
    Par safine dans le forum Jasper
    Réponses: 6
    Dernier message: 15/07/2013, 09h17
  3. regrouper des enregistrements dans un timestamp
    Par grimat dans le forum Débuter
    Réponses: 4
    Dernier message: 27/02/2009, 08h05
  4. SQL : Regrouper des lignes dans une seule colonne
    Par manoir62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2009, 18h06
  5. regrouper des informations dans une seule ligne
    Par rozow dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/04/2006, 16h03

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