|
stocker un champ RTF dans une base (MySQL ou HF) |
|
Stagiaire WDF
Inscrit: 10/08/2007 12:38
Post(s): 32
|
Bonjour, Je voudrais savoir comment stocker une chaine de caractère RTF dans une base de données MySQL ou HF ? on m'a dit que sous MySQL c'était impossible car les chaines RTF sont des chaines binaires (et du coup comme y a pas de champ binaires dans Mysql .... ca parait logique) et qu'il fallait que j'utilise HyperFile ce que je ... question : que dois-je définir comme champ dans mon fichier HF ? j'ai essayer les champ textes avec l'option RTF ... rien les champs binaire avec l'option sous-type à chaine binaire et à autre mémo binaire idem ... y a t'il une astuce qui me serait inconue pour enregistrer la valeur dans la table ? Pour info je débute un peu dans les base de données HF (j'ai l'habitude de MySQL et de PHP ou C++ donc pas evident la gym pour les requetes...)
D'avance merci...
Guillaume
Contribution le : 28/01/2008 19:54
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Utilisateur WDF
Inscrit: 15/09/2006 17:34
Post(s): 77
|
Citation : Guizmo a écrit: Bonjour, Je voudrais savoir comment stocker une chaine de caractère RTF dans une base de données MySQL ou HF ? on m'a dit que sous MySQL c'était impossible car les chaines RTF sont des chaines binaires (et du coup comme y a pas de champ binaires dans Mysql .... ca parait logique) et qu'il fallait que j'utilise HyperFile ce que je ...
Le "on" vous a dit n'importe quoi. Vous pouvez stocker une chaine RTF dans un champs de type texte. De plus sur Mysql les champs pour stocker du binaire existe, et il s'agit des champs blob.
Contribution le : 28/01/2008 21:53
Edité par drcharly93 sur 28/1/2008 23:05:38
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Developpeur WDF
Inscrit: 18/06/2006 13:54
Post(s): 106
|
Le site developpez.com est vraiment très bien pour appréhender le code SQL et les bases associées. Je le consulte très souvent et j'ai pu apprendre le SQL avec l'aide de ce site. http://mysql.developpez.com/http://sql.developpez.com/Le SQL n'est vraiment pas un langage difficle et il peux vraiment faire gagner de précieuses secondes de traitements dans l'interrogation d'une base de données (SQL ou HyperFile). Bon courage :)
Contribution le : 29/01/2008 15:12
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Stagiaire WDF
Inscrit: 10/08/2007 12:38
Post(s): 32
|
oui en théorie ca devrai marché (du moins je le pensais) seulement apres essait quant je charge ma réponse je me retrouve avec : {colortbl ; ed128green0lue128;} {*generator Msftedit 5.41.15.1507;}viewkind4uc1pardcf1f0fs20 titicf0par }
dans mon champ RTF et nom "ed" en vert :'(
j'ai essayer en faisant : SQLExec("SELECT `rtf1` , `rtf2` FROM `table` WHERE `Id`='1' ","SQL_RQ") SQLPremier("SQL_RQ") teste est une chaîne = SQLCol("SQL_RQ",1) RTFInsère(RTF1,teste,1) // ou alors direct ca RTF1 = teste
mais dans les 2 cas tjs la meme chose
pour info mon remplissage de base : SQLExec("UPDATE `base`.`table` SET `rtf1` = '"+fen1.ONG_Onglet1.SCRTF3.SaisieTexte+"' WHERE `Id`='1'","SQL_RQ") // ou fen1.ONG_Onglet1.SCRTF3.SaisieTexte est mon champ RTF
Voyez vous une grossiere erreure qui m'aurait échapé ? ou astuce que je ne connais pas ?
Pour info les BLOB sont pratiques pour stocker des images (et encore ...) mais pas top pour du binaire pur (vidéo, exe mp3 ou autre) en tout cas en PHP (ca m'a rendue fou plus d'une fois à la difference des champ binaire d'oracle mais bon est ce comparable ...)
d'avance merci ...
Contribution le : 29/01/2008 20:32
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Utilisateur WDF
Inscrit: 15/09/2006 17:34
Post(s): 77
|
C'est simplement qu'il faut remplacer certains caractères dans la chaine. Voici une exemple de code extrait de c_mysql4wd
v_textstring est une chaîne = la valeur RTF de la chaine
IF (Position(textString, "\") > 0) THEN v_textstring = Replace(v_textstring, "\", "\\") IF (Position(textString, Charact(0)) > 0) THEN v_textstring = Replace(v_textstring, Charact(0), "\0") IF (Position(textString, TAB) > 0) THEN v_textstring = Replace(v_textstring, TAB, "\t") IF (Position(textString, Charact(10)) > 0) THEN v_textstring = Replace(v_textstring, Charact(10), "\n") IF (Position(textString, Charact(13)) > 0) THEN v_textstring = Replace(v_textstring, Charact(13), "\r") IF (Position(textString, "'") > 0) THEN v_textstring = Replace(v_textstring, "'", "\'")
v_textstring = "'" + v_textstring + "'"
Contribution le : 29/01/2008 23:48
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Stagiaire WDF
Inscrit: 10/08/2007 12:38
Post(s): 32
|
ok, juste une précision, c'est pour stocker dans mysql ou dans le fichier HF ? autres question à l'extraction dans le champ rtf le fait de modifier les chaines, ca va pas le rendre fou ?( pas encore tester, je parle sans savoir comme d'hab, je vais tester)
merci pour tout deja ;)
Guillaume
Contribution le : 30/01/2008 11:08
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Utilisateur WDF
Inscrit: 15/09/2006 17:34
Post(s): 77
|
Pour MySQL.
Contribution le : 30/01/2008 11:32
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Stagiaire WDF
Inscrit: 10/08/2007 12:38
Post(s): 32
|
Bon, après recherches, (et longue recherches même)il est pas possible de stocker du RTF brute dans une base MySQL (sauf en virants les caractères d'échappement mais lors de la relecture je vous dit pas le massacre). Donc j'ai utiliser une base HF secondaire qui me permet de stocker ces données propres à mon utilisateur sur une clef USB par exemple qu'il peut embarquer avec lui. Peut être dans les futures évolution de MySQL cette option sera possible mais en attendant ..... Une solution serait peut etre envisageable mais relativement complexe et longue à mettre en oeuvre : on a un RTF dans un champ -> on en fait un fichier temporaire texte.rtf -> on le zip -> on stock le fichier zip dans un champ binaire (les caractères d'échappements sont en principe modifiés (selon mes différents essaies)) ce devrait être thechniquement possible, pas forcement facile a gérer mais bon ... si j'ai un moment je ferais une classe qui fera ca de manière automatique (d'ici 1 ou 2 ans qu'en j'aurais un moment) et je vous la donnerai pour vous remercier de toute l'aide que vous pouvez m'apporter pour mes question tordues ....
Merci
(On peux fermer le ticket je pense non ?)
Contribution le : 17/02/2008 17:04
|
|
|
Re: stocker un champ RTF dans une base (MySQL ou HF) |
|
Utilisateur WDF
Inscrit: 15/09/2006 17:34
Post(s): 77
|
Il n'y a aucun problème pour stocker du RTF sous MySQL et ceci dès les premières versions de MySQL. Le type de champ est "text". Il suffit de prendre le code que je vous ai donné uniquement pour l'écriture. En lecture un simple "select" est suffisant.Dans votre cas il suffisait de faire POUR ECRIRE LE RTF dans la base MySQLv_chaine_ok est une chaîne = mySQLEscapeString(fen1.ONG_Onglet1.SCRTF3.SaisieTexte)
// pas besoin de quoter la chaine car fait par la fonction mySQLEscapeString
SQLExec("UPDATE `base`.`table` SET `rtf1` = "+v_chaine_ok+" WHERE `Id`='1'","SQL_RQ")
Le fonction ci-dessous est à utiliser uniquement en écriture FONCTION mySQLEscapeString(textString is string)
// Fonction vient de mysql4wd
v_textstring est une chaîne = textString
IF (Position(textString, "\") > 0) THEN v_textstring = Replace(v_textstring, "\", "\\")
IF (Position(textString, Charact(0)) > 0) THEN v_textstring = Replace(v_textstring, Charact(0), "\0")
IF (Position(textString, TAB) > 0) THEN v_textstring = Replace(v_textstring, TAB, "\t")
IF (Position(textString, Charact(10)) > 0) THEN v_textstring = Replace(v_textstring, Charact(10), "\n")
IF (Position(textString, Charact(13)) > 0) THEN v_textstring = Replace(v_textstring, Charact(13), "\r")
IF (Position(textString, "'") > 0) THEN v_textstring = Replace(v_textstring, "'", "\'")
v_textstring = "'" + v_textstring + "'"
RESULT (v_textstring)
Contribution le : 17/02/2008 19:18
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|