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 UNION - limitation des champs à 255 caractères


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Requête UNION - limitation des champs à 255 caractères
    Bonjour,

    Je travaille avec un ACCESS 2002. J'ai bien lu dans la FAQ que les champs Memo ou Texte long étaient réduits à 255 caractères après passage par une requête UNION de plusieurs tables. Ceci est gênant car justement, j'aurais besoin que mes champs "extrait" des mes tables extrait1, extrait2 et extrait3, importés de plusieurs bases de données remplies séparément, restent "texte long" comme d'origine, c'est à dire avec 60000 caractères possibles. Le but final est de fusionner des tables "extraits" remplies par différents utilisateurs. Est-ce possible ? Comment ?
    Je pourrais vous donner plus d'informations sur les tables et champs en question si nécessaire.

    Merci d'avance


    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Oui, je confirme quand on utilise une requête de regroupement sur des champs mémos, ils sont coupés à 255 caractères.

    Si tu as besoin d'identifier les "originiaux", je te suggères cela :

    Faire une requête qui tri tes champs mémos en ordre croissant.
    Faire du code VBA qui va "regarder" séquentiellement tes données et identifier les "originaux".

    Cela ressemble à :

    tblDonnees
    Clef
    ChampMemo
    EstOrginal (oui/non, valeur par défaut : Faux)

    reqDonnees
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [tblDonnees].[ChampMemo], [tblDonnees[].[EstOriginal] from [tblDonnees] order by [tblDonnees].[ChampMemo]

    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
    dim ref as string
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset : set r=db.openrecordset("reqDonnees", dbOpenDynaset)
     
    do while not r.eof
     
       if ref<>r![ChampMemo] then
         r.edit
         r![EstOriginal]=true
         r.update
         ref=r![ChampMemo]
       end if
     
       r.movenext   
    loop
     
    r.close:set db=nothing
    db.close:set db=nothing
    sinon on peut utiliser un DCount

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("Clef"; "tblDonnees"; "[Clef]<=" & [tblDonnees].[Clef] & " and [ChampMemo]=""" & [tblDonnees].[ChampMemo] & """")

    ceux où le DCount donne 1 sont les "originaux".

    Je pense que le DCount sera moins rapide que le VBA.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci !

    Je vais essayer ce WE et reviens vers vous plus que probablement, ne fut-ce que pour une explication de l'explication...

    Bonne journée

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Heu ... désolé ma réponse ne correspond à ta question ... j'ai répondu au problème de GROUP BY.

    Si c'est pour une union je ne vois que la création d'une table temporaire et le traitement par code des ajouts après vérification que l'élément n'existe pas déjà.
    Et on peut pas mettre d'index sur champ mémo non plus. Éventuellement tu peux calculer un hachage ("hash" en anglais) de la valeur pour trouver un identifiant unique mais cela peut être complexe et imparfait.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci quand même.

    Lorsque vous dites "traitement par code" des ajouts, comment pourrais-je procéder plus précisément ? Vous comprenez que je suis novice.

    Pour info, voici la composition d'une table "extrait" :
    Num repondant (type numérique)
    Num thematique (type numérique)
    Num extrait (type Memo/texte long)

    J'aurai donc 10 tables extraits de 10 utilisateurs différents qui travaillent tous sur une base de donnée identique (mais pas unique vu la difficulté du multiutilisateur avec ACCESS). Il y aura peut-être 1000 enregistrements par table "extrait" à fusionner. Autre indication, le champs Num repondant a été prédéfini dans chaque table pour qu'il soit continu après fusion des tables. Cela donne : utilisateur 1 = repondant 1 à 10 : n.extrait par répondant ; Utilisateur 2 = repondant 11 à 20 : n.extrait par répondant etc.

    Je ne suis pas sûr d'être compréhensible. En tout cas, merci d'avance. Bonne soirée

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Pas de problème.

    Je vais décrire pour une table source, la multiplication ne devrait pas être trop difficile mais n'hésite pas à poser des questions.

    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
     
    dim db as dao.database:set db=currentdb
    dim rDonnees as dao.recordset:set rDonnees=db.openRecordset("NomTaTableSource")
    dim rResultat as dao.recordset:set rDonnees=db.openRecordset("NomTaTableFusion")
     
    dim critere as string
     
    do while not rDonnees.eof
       critere="[TonTexte]=""" & replace(rDonnees![TonTexte], """", """""") & """" 'Défini le texte à chercher et double les " pour le cas où il y en aurai dans le texte.
     
       call rResultat.findfisrt(critere)
     
       if rResultat.nomatch then
           'Nouveau texte, l'ajouter
           rResultat.addnew
           rResultat![TonTexte]=rDonnees![TonTexte]
           rResultat.edit
       end if
     
       rDonnees.movenext
    loop
     
    rResultat.close: set rDonnees=nothing
    rDonnees.close: set rDonnees=nothing
    db.close:set db=nothing
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. export requête avec choix des champs à exporter
    Par NATOU2 dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/12/2008, 18h18
  2. [ACCESS 97] Requête Union, Ajout de champ
    Par AGR26 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/09/2007, 08h55
  3. Cohabitation des requêtes UNION et des ORDER BY ?
    Par guidav dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/12/2006, 15h12
  4. Réponses: 4
    Dernier message: 27/01/2006, 16h38

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