[Access] Concaténer dans un champ

Concaténer dans un champ [Access] - SQL/NoSQL - Programmation

Marsh Posté le 31-05-2012 à 15:44:59    

Bonjour,
 
Que ce soir sur google ou sur le forum je n'arrive pas à trouver mon bonheur. Je suis tombé sur ça mais je ne sais pas si je peux l'adapter à ma situation.
 
Voici ce que j'ai :
 
Champ1 Champ2 Champ3 Champ4
1          2          3          a
1          2          3          b
1          2          3          c
1          2          3          d
4          5          6          z
4          5          6          x
 
et je voudrais
 
Champ1 Champ2 Champ3 Champ4
1          2          3          a,b,c,d
4          5          6          z,x
 
Est-ce possible de faire ça en choisissant le délimiteur?
Merci

Reply

Marsh Posté le 31-05-2012 à 15:44:59   

Reply

Marsh Posté le 14-06-2012 à 10:36:19    

nobody?

Reply

Marsh Posté le 19-06-2012 à 15:30:26    

même pas une p'tite idée?

Reply

Marsh Posté le 13-07-2012 à 14:38:08    

up :(

Reply

Marsh Posté le 13-07-2012 à 14:53:34    

Bonjour,
peut-être en passant par une requête récursive si access le permet ??
MSQuery les accepte donc je pense qu'access aussi.
 
Voir un super tuto ici


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 13-07-2012 à 20:31:19    

J'ai finalement résolu mon problème en créant une fonction en vba.
Je poste le code lundi si je n'oublie pas, ça pourrait en aider...

Reply

Marsh Posté le 17-07-2012 à 11:20:53    

Donc mes recherches ont abouties à : ça existe en mysql, en oracle 11+ mais pas en access. Il faut donc passer par du code VBA, mais ce que j'ai trouvé est très lourd et la requête qui doit calculer 90.000 champs à concaténer prend plus de 30mn à s'exécuter, alors qu'elle n'en prend que quelques secondes si on affiche avec les doublons (plusieurs lignes au lieu de regrouper)
 
J'ai trouvé ça sur un autre site :
http://access.developpez.com/sources/?page=Requete
 
que j'ai adapté à ma sauce :
Public Function concatListe(champ As String, table As String, nomPK As String, primaryKey As Integer) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT " & champ & " FROM " & table & " WHERE " & nomPK & "=" & primaryKey
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    concatListe = concatListe & res.Fields(0).Value & " / "
    res.MoveNext
    Wend
    'Enleve les derniers caractères
    If Len(concatListe) > 2 Then
        concatListe = Left(concatListe, Len(concatListe) - 3)
    End If
    'libere la mémoire
    Set res = Nothing
End Function
 
Si ça peut aider d'autres personnes...
Et si vous voyez une façon plus simple ou plus efficace de faire ça sous Access, merci de me le dire :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed