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

Requêtes et SQL. Discussion :

Requête avec concaténation de données -> champ tronqué [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de guenfood
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2004
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2004
    Messages : 254
    Points : 126
    Points
    126
    Par défaut Requête avec concaténation de données -> champ tronqué
    Bonjour à toutes et tous,

    J'exploite un fichier excel via Access qui me permet de constituer tous les membres appartenant à un groupe.

    Pour se faire, j'ai une requête de création de table qui s'appuie sur la fonction ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    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 Database
    Dim rst As 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 = Nz(.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
    La requête quant à elle, est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sys_user_grmember.groupes, ConcatForQuery("groupes",[groupes],"useremail","sys_user_grmember","; ") AS useremail INTO T_users
    FROM sys_user_grmember
    GROUP BY sys_user_grmember.groupes, sys_user_grmember.useremail
    HAVING (((sys_user_grmember.useremail) Is Not Null));
    Le hic, c'est que bien que le champ useremail de ma table sys_user_grmember soit bien au format texte long, la requête avec concaténation me crée une table où le champ useremail est au format texte court et est tronqué à partir du 255ème caractère.

    Y a t'il une solution pour remédier à ça et empêcher le troncage du champ ?

    Merci par avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 672
    Points : 14 663
    Points
    14 663
    Par défaut
    bonjour,
    le problème vient de du fait qu'une requête avec group by tronque systématiquement les champs de type texte long ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre habitué Avatar de guenfood
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2004
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2004
    Messages : 254
    Points : 126
    Points
    126
    Par défaut
    Merci pour ton retour. Il n'existe aucune solution de contournement pour éviter ça ?

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 672
    Points : 14 663
    Points
    14 663
    Par défaut
    un autre souci est que la requête de type création de table pose aussi problème car elle tronque également ( ...)
    il faut donc créer la table à la main, ou modifier la taille du champ useremail en mode création de la table existante,
    la vider avant chaque insertion:
    et utiliser une sous-requête pour éviter le regroupement (ou DISTINCT) dans la requête finale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert INTO T_users SELECT T1.groupes, ConcatForQuery("groupes",T1.[groupes],"useremail","sys_user_grmember","; ") AS useremail 
    FROM (SELECT DISTINCT groupes
            FROM sys_user_grmember
           WHERE (useremail Is Not Null)
         )  AS T1
    ;
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre habitué Avatar de guenfood
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2004
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2004
    Messages : 254
    Points : 126
    Points
    126
    Par défaut
    Super. Ca fonctionne nickel comme ça.
    Un grand merci à toi pour ton aide.

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

Discussions similaires

  1. Requête de concaténation de données avec ID
    Par Kheolia dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/10/2012, 19h55
  2. Requêt avec sum ne donne pas le bon résultat§
    Par _cece dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/11/2008, 18h53
  3. [MySQL] concaténation plusieurs données même champs d'une table MYSQL
    Par creative69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/07/2008, 17h58
  4. requête avec vérification des données
    Par dieudo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2008, 11h25
  5. Une requête avec un Max sur 2 champs
    Par Bils dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/09/2007, 14h04

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