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

Bases de données Delphi Discussion :

[D7] Comment enregistrer le RTF d'un RichEdit dans une BDD


Sujet :

Bases de données Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut [D7] Comment enregistrer le RTF d'un RichEdit dans une BDD
    Dans une fenêtre, j'ai un RichEdit dans lequel l'utilisateur peut écrire et mettre en forme du texte.
    Quand l'utilisateur sauvegarde, j'insert ou update dans une table (Oracle).
    Le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    Query.SQL.Add('update NOTE');
    Query.SQL.Add('set MESSAGE = ' + QuotedStr(FormNote.RichEdit.Lines.Text) + ',');
    ...
    De cette manière, je perd le formatage du texte.

    Comment faire pour le conserver dans Oracle ?
    J'ai essayé de jouer avec PlainText, mais sans résultat.

    Une idée ... ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Il suffit de sauver les lignes du richedit dans un stream.
    Mais aussi, comment par la suite le recharger sans passer par un fichier text...
    A méditer...

  3. #3
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Une solution serait de recharger le stream dans un composant non visuel du style StrHolder(RXLib) ou StingContainer(JVCL), et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.SQL.Add('set MESSAGE = ' + QuotedStr(FormNote.StrHolder1.String.Text) + ',');
    C'est un peut barbare mais je pense que ca va marcher...
    A+

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par petitprince
    Une solution serait de recharger le stream dans un composant non visuel du style StrHolder(RXLib) ou StingContainer(JVCL), et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.SQL.Add('set MESSAGE = ' + QuotedStr(FormNote.StrHolder1.String.Text) + ',');
    C'est un peut barbare mais je pense que ca va marcher...
    L'ennuis, c'est que les composants type JVCL ne me sont pas autorisés ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Et RXLib aussi?
    Sinon, je vois pas d'autre solution, sauf recharger dans un mémo invisible, mais là, c'est plus barbare, c'est ..... la solution du pauvre comme on dit

    Sinon as-tu pensé à te faire une fonction pour gérer tous çà?

  6. #6
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Sinon y a :
    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
    function TForm1.RTFtoText(rtf:string):string; 
    var 
      temp_richedit: TRichedit; 
      temp_str: string; 
      ss: TStringStream; 
    begin 
      ss := TStringStream.Create(rtf); 
      temp_richedit := TRichEdit.Create(nil); 
      try 
      temp_richedit.Lines.LoadFromStream(ss); 
      result := temp_richedit.Lines.Text; 
      finally 
       ss.free; 
       temp_richedit.Free; 
    end; 
    end;
    Ca vient de la FAQ, mais ca marche pas chez moi....

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    'Soir !

    Une form, un richedit, un memo, un button :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var st: TMemoryStream;
    begin
      st := TMemoryStream.Create;
      richedit1.Lines.SaveToStream(st);
      st.Position := 0;
      memo1.Clear;
      memo1.Lines.LoadFromStream(st);
      st.Free;
    end;
    Te reste plus qu'à enregistrer memo1.Lines dans ta base.
    Mes 2 cts,
    --
    jp
    Rappel : un fichier rtf, c'est un fichier texte avec des infos de formattage, un peu comme du chteumeuleu, koi !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Avec 1 TMemoryStream et cette future QR, tu devrais pouvoir enregistrer facilement un document dans la base de données.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Bon, la piste du Stream me semble bonne.
    J'arrive à enregistrer mon RTF dans Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringStream := TStringStream.Create('');
    try
       FormNote.RichEdit.Lines.SaveToStream(StringStream);
    ...
       Query.SQL.Add('update NOTE');
       Query.SQL.Add('set MESSAGE = ''' + FormatMessage(StringStream.DataString) + ''',');
    ...
    finally
       StringStream.Free;
    end;
    Quand je prend ce que j'obtiens dans Oracle et que je mets ça dans un fichier *.rtf, ça s'affiche avec le fomatage.
    Donc, jusque là, c'est bon.

    Là où ça se gâte, c'est quand j'essai de recharger le contenu de mon champ Oracle dans un RichEdit. J'obtiens l'erreur :
    Erreur d'insertion de ligne RichEdit
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Victoire !! Ca marche !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          StringStream := TStringStream.Create('');
          try
             StringStream.WriteString(Query.FieldByName('MESSAGE').AsString);
             StringStream.Position := 0;
             FormNote.RichEdit.Lines.LoadFromStream(StringStream);
          finally
             StringStream.Free;
          end;
    En fait, je m'y prenais très mal.

    Merci pour votre aide.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/10/2009, 18h58
  2. Réponses: 6
    Dernier message: 01/04/2009, 09h49
  3. [SQL] comment enregistrer un fichier doc ou pdf dans une BD
    Par adilassadi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/05/2007, 17h17
  4. Comment d'afficher automatiquement les macro présentes dans une BDD?
    Par Stéphane Olivier BERNARD dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2006, 14h49
  5. Enregistrer un texte formaté RTF d'un RichEdit dans un Blob
    Par dem dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/01/2005, 10h05

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