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 :

Déconcaténer en plusieurs lignes


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Déconcaténer en plusieurs lignes
    Bonjour,

    je bloque sur un problème.

    Voici ce que je souhaite faire.
    Passer de la table suivante (comportant 2 colonnes, site et code):

    site|codes
    ----------
    A|c,e,g,t
    B|a,r,f
    C|p,zh


    Au résultat suivant à l'aide d'une requête:

    site|codes
    ----------
    A|c
    A|e
    A|g
    A|t
    B|a
    B|r
    B|f
    C|p
    C|zh


    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Avec 2 fonctions dans un module indépendant pour éclater la chaine et connaître le nombre d'éléments de la chaine :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function Element(c As String, s As String, i As Long) As String
     
    Element = Split(c, s)(i)
     
    End Function
     
    Public Function IndiceMax(c As String, s As String) As Long
     
    IndiceMax = UBound(Split(c, s))
     
    End Function
    Ensuite, une table "T_indice" contenant la liste des indices possibles associés aux éléments de la chaîne :

    T_Indice (Indice)

    (0,1,2,3...25...)

    Enfin la requêtes basée sur la table1 d'origine et la table d'indice et utilisant les 2 fonctions précédentes :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Table1.site, Element([Table1].[codes],",",[indice]) AS codes
    FROM Table1, T_Indice
    WHERE (((T_Indice.Indice)<=IndiceMax([Table1].[Codes],",")))
    ORDER BY Table1.site, Element([Table1].[codes],",",[indice]);

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    merci beaucoup pour le tuyau.

    La fonction que vous avez écrite est adaptée pour une liste de codes numériques. Or, ma liste de codes est alphanumérique.
    J'ai finalement trouvé dans Postgres une fonction toute faite regexp_split_to_table(). Je vais passer par cet outil pour faire la conversion.

    Bien cordialement

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par kamaxime Voir le message
    Bonjour,

    merci beaucoup pour le tuyau.

    La fonction que vous avez écrite est adaptée pour une liste de codes numériques. Or, ma liste de codes est alphanumérique.
    J'ai finalement trouvé dans Postgres une fonction toute faite regexp_split_to_table(). Je vais passer par cet outil pour faire la conversion.

    Bien cordialement
    Non, je ne crois pas.

    La fonction split marche aussi pour les codes alphanumériques.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    L'exécution de la requête me génère une erreur: "Type de données incompatible dans l'expression du critère"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT BasiasIDF.identifiant, Element([BasiasIDF].code,",",[CodeBasiasChoixLudo].[CodeMin]) AS codes
    FROM BasiasIDF, CodeBasiasChoixLudo
    WHERE ((([CodeBasiasChoixLudo].[CodeMin])<=IndiceMax([BasiasIDF].code,",")))

    Je n'ai pas creusé davantage

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Que contient codemin ?

    peux-tu donner des exemples ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

Discussions similaires

  1. [langage] mettre plusieurs lignes en commentaire
    Par perlaud dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2004, 15h32
  2. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  3. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  4. Réponses: 14
    Dernier message: 09/04/2004, 13h44
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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