MVP Office Access 2003, 2004, 2005 et 2006
Base de données Base de données Administrateur Administrateur Table Table Requête Requête Formulaire Formulaire Dates & Heures Dates & Heures Nombre Nombre Math Math Fichier Fichier Commandes externes Commandes externes Automation Automation Equivalence Equivalence
Base de données Base de données
|
Requête - Concaténation par regroupement
| | Cette fonction permet de concaténer les valeur d'un champ dans un champ unique en fonction du regroupement établi sur un autre champ. | | | | | | | |
| | ConcatForQuery (strRegroup, fldRegroup, strConcat,strTable [, strSep]) La synthaxe de la fonction ConcatForQuery comprend les éléments suivants : Eléments | Description | strRegroup | Expression de chaîne correspondant au nom du champ qui déterminera le regroupement. | fldRegroup | Données du champ qui servira au regroupement. | strConcat | Expression de chaîne correspondant au nom du champ que l'on souhaite concaténer. | strTable | Expression de chaîne correspondant au nom de la table source. | strSep | Facultatif. Expression de chaîne correspondant séparateur entre les données concaténées, la valeur par défaut est "/". |
| | | | | | | |
| | Une table "MaTable" avec les champs fldNom et fldPrénom. fldNom | fldPrénom | Dupont | Pascal | Martin | Nathalie | Martin | Michel | Martin | Pascal | Dupont | Gérard | Durand | Simon | Durand | Bernard | Durand | Robert | Dupuis | Albert |
La fonction vous permettra donc d'obtenir tous les prénoms possible pour un même nom, pour se faire il suffira d'écrire une requête du style : SELECT fldNom, ConcatForQuery("fldNom",[fldNom],"fldPrénom","MaTable"," - ") AS Résultat FROM MaTable GROUP BY fldNom;
Le résultat de la requête sera le suivant : fldNom | Résultat | Dupont | Pascal - Gérard | Martin | Nathalie - Michel - Pascal | Durand | Simon - Bernard - Robert | Dupuis | Albert |
| | | | | | | |
| |
Function ConcatForQuery(strRegroup As String, fldRegroup As String, _ strConcat As String, strTable As String, _ Optional strSep As String = "/") As String '** Regroupement de donnée sur le champ fldRegroup '** et concaténation sur le champ strConcat Dim db As DAO.Database Dim rst As DAO.Recordset Dim strResult As String Dim strRst As String
Set db = CurrentDb() strRst = "Select * From [" & strTable & "] " _ & "Where [" & strRegroup & "] = """ & fldRegroup & """;"
Set rst = db.OpenRecordset(strRst, dbOpenDynaset) With rst If Not .BOF Then .MoveFirst Do Until .EOF If strResult = "" Then strResult = .Fields(strConcat) Else strResult = strResult & strSep & .Fields(strConcat) End If .MoveNext Loop End If End With rst.Close: Set rst = Nothing db.Close: Set db = Nothing ConcatForQuery = strResult
End Function | | |
Date de création : 22/09/2006 @ 00:05
Dernière modification : 26/04/2007 @ 22:15
Catégorie : Requête
Page lue 6940 fois
Prévisualiser la page
Imprimer la page
Réaction n°2 |
par roro le 05/04/2013 @ 08:52
Bonjour, Ce code fonctionne presque parfaitement pour mon utilisation. Mon problème est que, bien que le champ de la table destination où ajouter le résultat de la concaténation soit de type 'mémo', il n'est ajouté que les 255 premiers caractères. Quelle solution pour pallier à ce pb? Merci d'une réponse |
Réaction n°1 |
par JJ29
le 31/01/2010 @ 18:06
Merci pour votre article J'utilise Access 2002 - J'ai donc recopié fidèlement votre code pour mieux le comprendre 1 J'ai eu un message d'erreur Car Acces ne reconnait pas fields(concat) avec le message ' Elément non trouvé dans la sélection - Je l'ai remplacé par fields (2) 2 Par ailleurs , il m'a fallu gérer le cas ou il n'y a pas de prénom Qu'en pensez- vous ? JJ |
|
79 Membres
les 10 derniers :
Membre en ligne :
( personne ) Anonymes en ligne : 8
Total visites : 174499
Affluence record: 102
le 17/06/2007 @ 07:36
|