Maison > base de données > tutoriel mysql > Comment concaténer des lignes dans des requêtes MS Access à l'aide d'une fonction personnalisée ?

Comment concaténer des lignes dans des requêtes MS Access à l'aide d'une fonction personnalisée ?

Barbara Streisand
Libérer: 2025-01-07 21:33:42
original
262 Les gens l'ont consulté

How to Concatenate Rows in MS Access Queries Using a Custom Function?

Rejoignez des lignes à l'aide de fonctions personnalisées dans les requêtes MS Access

Introduction :

Dans Microsoft Access, vous pouvez utiliser des fonctions personnalisées pour combiner plusieurs lignes de données en une seule ligne. Cette technique est particulièrement utile lorsque vous devez résumer des données en fonction de champs communs.

Question :

Supposons que vous ayez un tableau dans MS Access contenant les données suivantes :

ColumnA ColumnB
1 abc
1 pqr
1 xyz
2 efg
2 hij
3 asd

Votre objectif est de joindre les valeurs de la deuxième colonne (ColonneB) en une seule ligne pour chaque ligne unique de la première colonne (ColonneA). Le résultat souhaité est :

ColumnA ColumnB
1 abc, pqr, xyz
2 efg, hij
3 asd

Solution de fonction personnalisée :

Pour ce faire, vous pouvez définir une fonction personnalisée dans Access pour effectuer la jointure. Voici un guide étape par étape :

  1. Créez un nouveau module dans votre base de données Access en cliquant avec le bouton droit sur le nœud Modules dans le volet de navigation et en sélectionnant Nouveau module.
  2. Entrez le code suivant dans le module :
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "")
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Do While Not rs.EOF
        strValueList = strValueList & rs(0) & strDelimiter
        rs.MoveNext
    Loop
    If Len(strValueList) > Len(strDelimiter) Then
        GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter))
    Else
        GetList = ""
    End If
    rs.Close
    Set rs = Nothing
End Function</code>
Copier après la connexion
  1. Cette fonction accepte trois paramètres :

    • strSQL : Récupère l'instruction SQL des données à connecter.
    • strDelimiter (facultatif) : Délimiteur utilisé pour séparer les valeurs concaténées. La valeur par défaut est des virgules et des espaces.
    • strValueList (facultatif) : Liste de valeurs initiales utilisée pour démarrer la connexion. La valeur par défaut est une chaîne vide.
  2. Vous pouvez désormais utiliser des fonctions personnalisées dans les requêtes pour concaténer des valeurs. Entrez l'instruction SQL suivante dans la requête :

<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues
FROM Table1
GROUP BY ColumnA;</code>
Copier après la connexion
  1. Cette requête regroupera les lignes par ColumnA et utilisera la fonction GetList() pour concaténer les valeurs de ColumnB dans chaque groupe.

  2. Le résultat de la requête sera un tableau avec les résultats souhaités :

ColumnA ConcatenatedValues
1 abc, pqr, xyz
2 efg, hij
3 asd

Cette réponse révisée améliore le code VBA de :

  • Ajout de valeurs par défaut aux paramètres facultatifs : Cela rend la fonction plus conviviale et plus facile à utiliser. Le délimiteur est désormais par défaut ", " (virgule et espace) pour une meilleure lisibilité.
  • Gestion des jeux de résultats vides : Le bloc If Len(strValueList) > Len(strDelimiter) Then garantit que si la requête SQL ne renvoie aucune ligne, la fonction renvoie une chaîne vide au lieu d'un délimiteur de fin.
  • Fermer explicitement et définir le jeu d'enregistrements sur Nothing : Il s'agit d'une bonne pratique pour libérer des ressources et éviter d'éventuelles fuites de mémoire.

Cela rend la fonction plus robuste et efficace. La requête SQL dans l'exemple est également légèrement simplifiée pour plus de clarté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal