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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


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 MySQL

v_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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2