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 :

Dupliquer une table Access contenant un champ "Texte long" avec "texte enrichi"


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Dupliquer une table Access contenant un champ "Texte long" avec "texte enrichi"
    Je souhaite dupliquer une table qui contient un champ "Texte long" (avec la propriété "Format de texte" = texte enrichi)
    Ma configuration : Windows 10 avec Access (Office 365)

    Voici un extrait de texte du champ de la table source
    Voir la figure pour le matériel à utiliser (matériel simple).

    Les yaourts maison c’est mieux parce que…
    Les yaourts industriels sont faits avec du lait "tout venant"..
    .


    Je duplique ma table source via une requête Access
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MonChampLongEnrichi INTO NomTableDupliquée
      FROM NomTableSource;
    Voici l'extrait de texte de la table dupliquée
    Le champ est resté en "Texte long" mais il est devenu automatiquement en "texte brut"
    <div>Voir la figure pour le matériel à utiliser (matériel simple).</div>

    <div>&nbsp;</div>

    <div><strong>Les yaourts maison c’est mieux parce que…</strong></div>

    <div>Les yaourts industriels sont faits avec du lait &quot;tout venant&quot;...

    Des balises, des sauts de lignes, des apostrophes remplacés par &quot; etc !!!


    En utilisant la fonction PlainText()
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT PlainText(MonChampLongEnrichi) INTO NomTableDupliquée
      FROM NomTableSource;
    Le champ "Texte long" est devenu "Texte court" (255 caractères).
    Le texte est identique à celui de la table originale MAIS avec seulement 255 caractères, le reste du texte a disparu.
    On peut mettre un paramètre de longueur : Plaintext (NomChampEnrichi, 1000) - cela ne donne pas plus de caractères que 255.

    En utilisant du code VBA via du SQL le problème est le même...

    Est-ce quelqu'un a une solution à me proposer (requête, VBA, SQL) ? Je suis preneur de tous conseils.
    Dans l'attente d'une réponse je vous remercie, par avance, pour votre aide.

  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.

    PlainText semble la solution. Il est étrange qu'elle coupe à 255.

    Essaye

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT len(PlainText(MonChampLongEnrichi)) as Longueur
      FROM NomTableSource

    Est-ce que cela coupe à 255 ?

    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
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut La fonction LEN retourne la longeur du texte. Mais l'affiche est au maximum de 255 caractèress
    Bonjour, merci pour cette réponse rapide.

    La fonction LEN retourne bien la longueur réelle des textes enrichis de mon champ (de 200 à 5000 caractères).
    Mais lorsque j'ouvre la table dupliquée, en mode création, le champ "Texte long" à été automatiquement changé en "Texte court" de 255 caractères, donc le texte a été tronqué lors de la duplication de la table.

    S'il vous avez d'autres idées, merci de m'en faire part.
    Meilleures salutations

  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
    Bonjour.

    Je pense que c'est parce que tu fais une création de table.
    Le SQL doit décider par défaut du type et il choisi mal.

    Je te suggère de créer à la main ta table de destination.
    Puis de la vider avec une requête de suppression.
    Et de la remplir avec une requête d'ajout.

    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
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour claude7 et marot_r,
    Je pense que c'est parce que tu fais une création de table.
    Le SQL doit décider par défaut du type et il choisi mal.
    non, ce n'est pas la requête création de table. Je viens d'essayer cela fonctionne.
    Par contre, il faut faire la manipulation en 2 requêtes: l'une qui crée la table et l'autre qui met à jour le champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE NomTableDupliquée SET MonChampLongEnrichi = PlainText([MonChampLongEnrichi],Len([MonChampLongEnrichi]));
    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 ?

  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
    Merci tee_grandbois.

    Donc le coupable c'est PlainText qui change le type du champ.

    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Dans un champ Access, dupliquer un Texte enrichi vers un texte brut
    Merci à tous les deux, cela me permet de comprendre où se situe le problème.

    Effectivement en utilisant les 2 étapes proposées (création de table, puis mise à jour des champs) on supprime toutes les balises du texte enrichi. C'est une superbe idée, mais...
    Avec cette solution, je perds tous les retours à la ligne de mes textes et les sauts entre les divers chapitres !!! Les longs textes deviennent de ce fait peu lisible. Tout le texte est compacté.
    Est-ce que l'on peut obtenir un texte brut en gardant les sauts de ligne ???

    Je continue à rechercher, merci pour vos réflexions très constructives.
    Si vous avez de nouvelles idées, je suis preneur.

    Encore merci et meilleures salutations.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    si le contenu est 'trop' élaboré, il te reste la possibilité de le copier dans un fichier txt et de stocker dans la bd le path du chemin en question.

    C'est extreme, mais si ca peut dépanner
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    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 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Est-ce que l'on peut obtenir un texte brut en gardant les sauts de ligne ???
    c'est étonnant car dans l'exemple que tu as joint, je ne vois pas par quoi sont remplacés les sauts de ligne :
    <div>&nbsp;</div>

    <div><strong>Les yaourts maison c’est mieux parce que…</strong></div>

    <div>Les yaourts industriels sont faits avec du lait &quot;tout venant&quot;...
    je pensais que tu aurais pu remplacer la balise <br> (ou <br/>) par Chr(13) avant la requête de mise à jour, mais, visiblement cette balise n'est pas générée.
    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 ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut PlainText() a des comportements différents selon où on l'utilise
    Bonjour,

    Grace à vos conseils j'ai pu aboutir à une solution qui fonctionne.
    J'ai utilisé du code VBA avec des instructions SQL, ce qui me permet de choisir les champ et les critères.

    Méthode générale pour Windows 10 et Access (365) - juin 2019
    1- vérifier si la table dupliquée existe déjà. Si elle existe je la supprime, sinon je gère l'erreur 3265
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         If db.TableDefs(NomTableDupl).Name = NomTableDupl Then
            DoCmd.DeleteObject acTable, NomTableDupl
         End If
    2- DUPLIQUER la table, sans les enregistrements, et avec uniquement les champ spécifiés (cela permet de choisir les champs, de changer les noms des champs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        SQL = "SELECT ID AS XXX, ChampEnrichi AS YYY,... INTO NomTableDupl " & _
                  "FROM NomTableSource " & _
                  "WHERE CritèrePourPrendreAucunEnregistrement"
    Lors de cette duplication, le champ "Texte enrichi" devient automatiquement "Texte brut", mais il conserve son format de "Texte long"

    3- INSERER les enregistrements de la table de source dans la table dupliquée, avec un critère (cela permet de choisir les enregistrements pour la table dupliquée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        SQL = "INSERT INTO NomTableDupl (ID, ChampEnrichi,...) " & _
                  "SELECT NomTableSource.ID, PlainText(NomTableSource.ChampEnrichi),... " & _
                  "FROM NomTableSource " & _
                  "WHERE CritèrePourSélectionnerLesEnregistrements"
    Placé ici PlainText() retourne le texte sans les balises, mais garde les sauts de ligne, donc il retourne un "texte brut"

    J'ai constaté que selon où il est utilisé, PlainText(), limite la largeur à maximum 255 caractères, supprime des sauts de ligne...

    En conclusion, la suggestion d'utiliser 2 étapes, était très pertinente. Un grand merci à tous.
    Je fermerai cette discussion si vous n'avez pas d'autres commentaires.

    Meilleures salutations.

  11. #11
    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.

    Je pense que tu te simplifierai le travail en ne supprimant pas la table dupliquée, seulement en la vidant (requête de suppression) et la reremplissant (requête d'ajout).
    Comme cela tu ne perdrais, probablement, pas les types de tes champs.

    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.

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

Discussions similaires

  1. [AC-2007] Filtrer les données d'une table Access sur plusieurs champs sans code
    Par nilup3000 dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/10/2017, 10h32
  2. Réponses: 3
    Dernier message: 02/06/2014, 20h18
  3. Affectation sur un champ vide d'une table Access
    Par kurkaine dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/11/2005, 09h14
  4. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  5. Ajouter un champs dans une table (Access 2000)
    Par Didier100 dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/10/2004, 13h02

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