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

C++Builder Discussion :

Afficher champs RTF dans un TDBMemo dans un TDBCrtlGrid


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut Afficher champs RTF dans un TDBMemo dans un TDBCrtlGrid
    Bonjour,

    j'ai une table oracle avec un champs clob comprenant un texte RTF.
    J'aimerais afficher (pas éditer) cette valeur dans un TDBCtrlGrid.
    Le composant TDBRichEdit ne peut être placé dans un TDBCtrlGrid.
    Je peux y placer un TDBMemo, mais le champs est illisible.

    Y a-t'il moyen d'afficher le texte non formatté dans le TDBMemo?
    Comment?

    Merci,
    Alain

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    Suggestions:
    - un champ calculé sur ton TQuery + un TDBRichEdit masqué sur le TForm: sur l'événement OnCalcFields du TQuery, tu récupères le contenu du TDBRichEdit et tu l'affectes à ton champ calculé. Le TDBMemo affiche le contenu du champ calculé.
    - Si tu as définis les champs sur ton TQuery, travailles sur le OnGetText du champ correspondant à ton RTF (en utilisant un TDBRichEdit ou un TRichEdit bidons ou n'importe quoi qui te renverras le texte sous une forme "présentable")

  3. #3
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut Info supplémentaires
    "Si tu as définis les champs sur ton TQuery, travailles sur le OnGetText du champ correspondant à ton RTF".
    J'ai essayé, l'évènement OnGetText n'est même pas déclenché (bcb 2010).

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    J'ai essayé, l'évènement OnGetText n'est même pas déclenché (bcb 2010).
    Le TDBMemo et le TxxxField pointent sur le même champ ?
    Est-ce qu'il y'a au moins un OnGetText qui fonctionne (j'imagine que tu as d'autres champs affichés dans ton TDBCtrlGrid) ?

  5. #5
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut OnGetText not triggered for readonly fields
    En effet, le OnGetText est bien déclenché pour les autres champs.
    Pour mon memo (qui est ReadOnly), il n'est pas déclenché.

    J'ai essayé ceci dans le OnGetText d'un autre champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TRichEdit * toto=new TRichEdit(this);
    TStringStream *x=new TStringStream(SQLevDetORDERCOMMENT->AsString);
    toto->Parent=this;
    toto->Lines->LoadFromStream(x);
    toto->PlainText=true;
    DBMemo2->Text=toto->Lines->Text;
    delete x;
    delete toto;
    mais j'ai un run-time error:
    Field 'ORDERCOMMENT' cannot be modified.
    sur la ligne DBMemo2->Text=toto->Lines->Text;

    Donc, ca ne marche pas. Et je ne veux pas non plus que le champs soit modifié sans formattage, je veux juste l'afficher.

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello

    Tu as encore la possibilité d'utiliser un champ calculé affiché dans un TDBMemo. La difficulté sera alors de récupérer le RTF sans son formatage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm4::Query1CalcFields(TDataSet *DataSet)
    {
      // ChampTest: champ calculé de type String
      Query1ChampTest->AsString = /**/Query1Notes->AsString;/**/ 
    }
    Si tu n'affiches qu'un seul panneau dans ton TDBCtrlGrid, tu peux encore dériver un composant de TDBRichEdit, et dans son constructeur mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __fastcall TDBRichEditEx::TDBRichEditEx(TComponent* Owner)
    : TDBRichEdit(Owner)
    {
      ControlStyle = ControlStyle << csReplicatable;
    }
    Cela aura au moins le mérite d'afficher le contenu du RichEdit pour l'enregistrement courant.

  7. #7
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut marche pas
    je pense que je vais devoir abandonner. J'ai créé un champs Computed, Size=4000.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TRichEdit * toto=new TRichEdit(this);
    TStringStream *x=new TStringStream(SQLevDetORDERCOMMENT->AsString);
    toto->Parent=this;
    toto->Lines->LoadFromStream(x);
    toto->PlainText=true;
    SQLevDetComputed->AsString=toto->Lines->Text.SubString(1,4000);
    delete x;
    delete toto;
    et au run-time j'ai
    Field is not BLOB.

    Qu'est-ce que c'est compliqué pour afficher (même pas updater) une bête zone dans une grille. Vive access et les dlookup!

  8. #8
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    et au run-time j'ai
    Field is not BLOB.
    Sur quelle ligne ? le SQLevDetORDERCOMMENT->AsString ?
    Pour info, la technique que tu utilises m'a permis d'afficher un rtf stocké dans un champ MEMO (bon ok, c'est pas un CLOB issu d'une base Oracle, mais la pauvre base Paradox fournie en exemple avec Builder...)
    Images attachées Images attachées  

  9. #9
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    sur la ligne SQLevDetComputed->AsString=toto->Lines->Text.SubString(1,4000);

    La db: en test: oracle xe.
    Le champs n'existe pas (computed).
    type de query: ODAC (composants spécifiques oracle)

    Le type: j'ai essayé ftMemo=> Il ne veut pas du champs calculé (en design-time avec la query open)
    J'ai essayé ftWideString : pas d'erreur en design-time mais bien en run-time.

    Le champs source est de type clob (4000).

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Citation Envoyé par AlainBourgeois Voir le message
    Le champs source est de type clob (4000).
    Et pourquoi pas un VARCHAR2(4000) ?

  11. #11
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut rtf: 4000 bytes=trop peu
    Parce qu'en prod c'est un clob, longueur illimitée. (le rtf peut être long!)

Discussions similaires

  1. Une image dans un Jpanel dans un Jpanel dans un Jframe
    Par ThomasH dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 09/12/2009, 20h23
  2. Réponses: 3
    Dernier message: 24/06/2009, 19h34
  3. Réponses: 3
    Dernier message: 04/06/2009, 14h08
  4. Réponses: 7
    Dernier message: 07/03/2009, 22h17
  5. afficher les champs null de deux tables dans un select
    Par poil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/09/2005, 15h05

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