|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Bonjour,
voilà, j'essaie d'enregistrer dans une base SQLite, un texte mis en forme saisi dans un RichMemo. J'utilise les composants ZeosLib (7.0.3), et Lazarus 1.0.4. Je n'arrive pas à enregistrer correctement les textes et encore moins à les récupérer. Quelqu'un a déjà fait cela ? Merci d'avance JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 807 ![]() |
Bonjour,
C'est la mise en forme que vous n'arrivez pas à enregistrer ? A restituer dans un (autre) RichMemo après enregistrement et relecture dans la base ? ou cela concerne uniquement le texte contenu dans le RichMemo ? Parce qu'en réalité, il y a 2 problèmes. Si vous voulez afficher votre RichMemo dans une dbGrid (ou une StringGrid), évidemment le texte brut suffit. Mais si après lecture dans la base, vous voulez également l'afficher à nouveau dans un Richmemo, là, il faut enregistrer en plus les attributs du texte ce qui implique l'enregistrement dans de 2 champs différents de votre table. Il faudrait utiliser pour le 2ème champ les fonctions Load/SaveRichText. J'ai lu mais pas testé (je ne les utilise plus) que les RichMemo avaient (eu) des problèmes avec l'UTF8 et sous Nux... A regarder de près, même si je suppose que cela a été réglé depuis le temps : http://bugs.freepascal.org/view.php?id=19624 Cordialement. Gilles |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Tout d'abord merci d'avoir répondu, ensuite mon problème est assez bizarre.
Après plusieurs recherche il s'avère en fait que c'est l'utilisation des "MemoryStream" qui pose problème. Je m'explique. Afin d'enregistrer et lire du texte mis en forme dans une base SQLite j'utilise les possibilités des champs blob et du composant RichMemo de lire et ecrire dans des stream. Afin de ne pas solliciter le disque dur, je suis passé par des MemoryStream. Le problème est que ça ne fonctionne pas. Si je passe par des FileStream, tout roule. Mais, dans ce cas, je dois écrire sur le disque le filestream depuis le champsblob ou depuis le RichMemo pour le lire à nouveau et le mettre soit dans le RichMemo ou dans le champ blob. En gros, j'ai les schémas suivants : ChampBlob --> fichier temporaire --> RichMemo et RichMemo --> fichier temporaire --> ChampBlob Ça fonctionne, mais ce n'est pas très optimisé au niveau du disque dur. Du coup, je me demandais s'il ne serait pas plus simple de faire comme je fais déjà pour les blob images, que je stocke sur le disque dur (dans un dossier spécifique) et dont seul le nom est stocké dans la base... JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#4 |
![]() ![]() Yves LemaireBiologiste ; Progr(amateur) Inscription : mars 2005 Messages : 1 680 ![]() |
Pardon pour cette question, mais as-tu essayé avec des MemoryStream dont tu avais remis la Position à 0 avant de les passer pour lecture ?
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
A priori, je dirais... non ? Mais plus réellement, ce serait
! Bref, que veux-tu dire exactement ? Je ne suis pas du tout, mais alors pas du tout, familiarisé avec les stream...
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() André Langlet Inscription : avril 2010 Messages : 45 ![]() |
Bonsoir,
Les TMemoryStream utilisent un "curseur" qui permet de lire ou d'écrire à partir d'une certaine position identifiée par la propriété MS.position. Souvent après une écriture (WriteToStream par exemple) le curseur est situé en fin du flux. Si on veut lire le flux depuis le début, certaines fonctions nécessitent de repositionner ce curseur au début par MS.position:=0 ou par MS.seek(0,soFromBeginning) sinon le curseur se trouvant à la fin, rien ne sera lu. André |
|
|
10
|
|
|
#7 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Ah ... Okay !
Ceci explique peut-être cela alors... Je vais refaire des essaies, fort de ces nouvelles informations. Merci beaucoup pour ces compléments. JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Cool, ça fonctionne parfaitement.
![]() Merci à vous tous. Vous êtes mes Maîtres... ![]() JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#9 | ||||
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 807 ![]() |
Bonjour,
j'avais commencé par quelque chose d'équivalent mais cela ne me parait pas aussi simple que cela. Win et Nux n'utilisent pas toujours les mêmes encodages dans les flux. Donc la portabilité est à vérifier de très près d'autant que si j'ai bien compris la chaine issue du flux est enregistrée dans une table. Mon idée serait de "forcer" vers une ansistring. Code :
Sinon en code plus minimaliste, ce code de transfert d'un RichMemo1 à un RichMemo2 par l'intermédiaire de la string sRTF fonctionne : Code :
|
||||
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Gilles,
mon code est le suivant Code :
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
||
|
|
00
|
|
|
#11 |
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 807 ![]() |
Je suis à mon lycée cet après-midi. Je testerai les codes à mon retour sur Nux (64) et Win 7 64 en fin d'après-midi.
Bonne fin de journée. Gilles PS : avez-vous terminé vos boutons images ? J'y ai incorporé mes codes (le mode 9 images à la Windev). Mais j'ai un problème de transparence sous Linux avec l'image "du-dessus" si cette dernière est en au format png ou gif avec gestion interne (à l'image) de la transparence. Autrement dit, si une image png ou gif est réalisée en utilisant le "mauve" comme couleur de transparence (canal alpha), le mauve apparaît dans le bouton. Par contre, si j'utilise la bmp qui m'a servi de modèle et que je déclare la couleur mauve comme transparente alors le mauve est bien transparent. Le jour où je trouve une bib. graphique "complète" mais pas trop lourde et stable... et documentée... et qui gère pareillement tous ces prob en Win et Nux, je l'étudie. |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Citation:
J'ai réalisé un "truc" qui me satisfait pour le moment (bien qu'avec quelques soucis sur la transparence en grisé). Je peux vous envoyer mon "code brouillon" si ça vous dis, pour que vous regardiez. Ça marche sous Seven 32bits.
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
|
00
|
|
|
#13 | ||||||
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 807 ![]() |
Bon alors j'ai commencé les premiers tests.
Il est nécessaire sous GTK2 d'utiliser le patch suivant pour installer le TRichMemo Code :
Pour l'instant, les tests ont l'air plutôt négatifs :la string reste désespérément vide quels que soient nos codes... mais ce qui me semble le plus inquiétant c'est que sans passer par la string, donc en restant avec le Stream, cela ne passe pas non plus. Code :
Code :
Cela ne fonctionne pas mieux fonctionner en Win7 64 bits. L'appel RichMemo1.SaveRichText(ms1) renvoie une erreur RichEditWndProc RunError(216). La méthode incriminée semble être la ligne 373 SendMessage(RichEditWnd, EM_STREAMOUT, SF_RTF, LPARAM(@cbs) ); dans class function TRichEditManager.SaveRichText(RichEditWnd: Handle; ADst: TStream): Boolean; du fichier Win32RichMemoProc... Je m'y prends peut-être mal. Il va falloir prendre contact avec le forum de Lazarus... avec mon "broken english" Cordialement. Gilles |
||||||
|
|
00
|
|
|
#14 | |||
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 149 ![]() |
Citation:
Citation:
Citation:
![]() Fort maille innegliche, no problaime. Ail canne rouiatte ouate you tell (guillaume), inn heu parfaicte innegliche.
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com