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 :

Champ mémo tronqué à 255 caractères, lors d'une concaténation d'enregistrements


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de sendme
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 82
    Points
    82
    Par défaut Champ mémo tronqué à 255 caractères, lors d'une concaténation d'enregistrements
    Bonjour,

    j'ai une table se nommant EV_CLIENTS contenant de nombreux évenements liés à un ID client (1 ID par client).

    Je souhaite concatener ces evenements pour que chaque ID n'est en face qu'un seul champ mémo.

    Pour celà je suis d'abord passé par une requête de selection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT EV_CLIENTS.IDClientEv, EV_CLIENTS.TypeEv, EV_CLIENTS.DateEv, [TypeEv] & " - " & [DateEv] & Chr(10) & plaintext([CommentairesEV]) & Chr(10) & Chr(10) AS Evenements, EV_CLIENTS.ClotureEv
    FROM EV_CLIENTS
    WHERE (((EV_CLIENTS.ClotureEv)=False))
    ORDER BY EV_CLIENTS.TypeEv, EV_CLIENTS.DateEv;
    Ensuite, après quelques recherches, j'ai trouvé le code me permettant de concatener les différents champs mémo nommés "Evenements" :
    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
    Public Function FusionEv(IDClientEv As String) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT Evenements FROM Select_Ev WHERE Select_Ev.IDClientEv=" & IDClientEv
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    FusionEv = FusionEv & res.Fields(0).Value & " "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    FusionEv = Left(FusionEv, Len(FusionEv) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Enfin j'ai crée une requête ajout, basée sur cette fonction, déversant dans la table finale avant export les évènements concaténés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO Ev_Fusion ( IDClientEv, FusionEvenements ) IN 'C:\Program Files\GestADV\GestADV-Client\temp\GestADV-temp.accdb'
    SELECT DISTINCT Select_Ev.IDClientEv, FusionEv(IDClientEv) AS FusionEvenements
    FROM Select_Ev;
    Malheureusement seuls les 255 premiers caractères passent alors que les tables d'origine et de destination ont bien des champs "mémo".

    Comment contourner ce PB svp, je devient fou

  2. #2
    Membre régulier Avatar de sendme
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 82
    Points
    82
    Par défaut
    Pour concatener j'ai suivi ce Tuto :
    http://access.developpez.com/sources...QLLigneColonne

    j'appelle donc le grand Tofalu pour me sauver ! (ou qq d'autre svp )

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour,

    Un group by ou un Distinct tronque à 255 caractères. La solution la plus simple serait de placer une nouvelle indexation sur la table de destination afin d'éviter les doublons (l'index multi-colonne sera de type indexé sans doublons) et lancer l'insert de toutes les lignes. Les lignes en erreur seront rejetées, les doublons seront donc éliminés.

    edit : attention aussi au IN '...'. Il se peut que lui aussi soit à l'origine de la limitation à 255 caractères. Privilégiez la liaision de la table.

  4. #4
    Membre régulier Avatar de sendme
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 82
    Points
    82
    Par défaut
    Merci pour ta réponse Tofalu
    Malheureusement ça ne fonctionne pas...

    j'ai bien indexé sans doublons "IDClientEv"
    et enlevé le "In" (liaison directe)

    par contre c'est bizarre les champs ne sont plus tronqués à 255car car certains contiennent jusqu'à 329car , mais ils sont tjrs tronqués.

    Au secours....!

  5. #5
    Membre régulier Avatar de sendme
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 82
    Points
    82
    Par défaut
    Le seul point commun que j'ai trouvé ce sont des caractères spéciaux, à l'endroit où le texte est tronqué :
    ⓐ
    ou
    ढ

    Pourtant dans les champs d'origine ils n'y sont pas...

Discussions similaires

  1. [AC-2003] Champs text supérieur à 255 caractères
    Par smutmutant2003 dans le forum Modélisation
    Réponses: 2
    Dernier message: 22/01/2010, 15h14
  2. [D5] Colonne varchar tronquée à 255 caractères
    Par PlayerOne dans le forum Bases de données
    Réponses: 5
    Dernier message: 16/10/2009, 14h32
  3. Réponses: 0
    Dernier message: 12/10/2009, 15h58
  4. Réponses: 6
    Dernier message: 31/07/2009, 14h45
  5. [Publipostage]texte tronqué à 255 caractères
    Par Eruil dans le forum Excel
    Réponses: 2
    Dernier message: 20/12/2007, 14h30

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