FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Obtener Texto plano de un campo blob
Hola amigos del foro, tengo una pequeña consulta, como yo puedo traspasar el contenido de un campo blob, a una variable de memoria tipo string, traspasando solamente el texto plano no su formato como en el ejemplo de más abajo si lo traspaso así, el valor del la variable queda como el ejemlo:
texto := dm.tTablaCampoBlob.value: el contenido de la variable texto: {\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fcharset1 MS Sans Serif;}{\f3\fswiss\fcharset1 MS Sans Serif;}} {\colortbl\red0\green0\blue0;} \deflang2058\pard\plain\f3\fs16 Entrevista con apoderada para informar sobre rendimiento de su hija. \par } valor esperado para la variable texto: "Entrevista con apoderada para informar sobre rendimiento de su hija" de antemano muchas gracias.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. |
#2
|
||||
|
||||
Parece que lo que tienes en el campo BLOB es un texto en formato RTF. De ser así quizá te sirva traspasar el BLOB a un control RichEdit. La propiedad Lines.Text del RichEdit dará entonces el texto plano.
No es una solución muy elegante pero funciona. // Saludos |
#3
|
||||
|
||||
Cita:
RichEdit1.Lines.Text := TAnotacionesANOTACION.Value; texto := RichEdit1.Lines.Text; pero sigue cargandose la variable texto con esto: ','{\rtf1\ansi\deff0\deftab720{\fonttbl{\ f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fcharset1 MS Sans Serif;}{\f3\fswiss\fcharset1 MS Sans Serif;}} {\colortbl\red0\green0\blue0;} \deflang2058\pard\plain\f3\fs16 Entrevista con apoderada para informar sobre rendimiento de su hija. \par } ?????, no se que pasará
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. |
#4
|
||||
|
||||
Hay dos cosas: en primer lugar el texto antes de la llave '{' de apertura sobra, aunque parece ser que se te pasó al pegar aquí el texto.
Por otro lado, parece que no puedes asignar directamente el texto a Lines.Text sino que debes hacerlo a través de un stream. Yo lo hice así:
donde Blob sería una variable string con el contenido del campo blob. Con esto debe cargarse correctamente el texto (con todo y formato) en el RichEdit y ahora sí, RichEdit1.Lines.Text debe contener el texto plano. Otra cosa, aunque no sé en específico el caso de Interbase, las componentes TBlobField tienen el método SaveToStream con lo que podrías pasar directamente del campo al StringStream. // Saludos |
#5
|
|||
|
|||
Existe una UDF que puedes instalarla en BD. La funcion se llama
F_BlobAsPchar(campo_memo). No recuerdo el link, pero buscalo en los foros. salu2. |
#6
|
||||
|
||||
Creo que esta udf, al estar almacenado el texto en la BD como texto enriquecido, no te servirá de nada. No es que la conozca personalmente, pero el nombre F_BlobAsPchar no indica ningún tipo de interpretación del rtf.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
||||
|
||||
Cita:
Stream := TStringStream.Create(TAnotacionesANOTACION.Value); try Stream.Seek(0, soFromBeginning); RichEdit1.Lines.LoadFromStream(Stream); finally Stream.Free; end; texto := RichEdit1.Lines.Text; Donde TAnotacionesANOTACION.Value es el campo con el campo blob pero se sigue cargando como rtf, seguramente debería funcionar así, pero por algun motivo sigue así, gracias por la ayuda una vez más.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC. |
#8
|
||||
|
||||
Caso contrario
hola Manuel mira yo tengo el mismo problema que tu pero al reves yo no puedo obtener el texto enriquecido y me devuelvce texto plano asi que podriamos intercambiar trozos de codigo para que cadaquien tenga lo contrario no
|
#9
|
|||
|
|||
Mirar la propiedad 'PlainText' del RichEdit.
Saludos |
#10
|
|||
|
|||
cheeee
Por favor cuando hagan referencia a componentes especifiquen en que paleta se encuentran los mismos, ya que si bien hay muchos que resultan muy conocidos, hay otros que no tanto grax
|
#11
|
||||
|
||||
Ok, lo tendremos en cuenta.
// Saludos |
#12
|
||||
|
||||
Recordar también que si se cuenta con bds 4.0 o Turbo Delphi, en la nueva paleta de componentes basta dar un clic en el boton "Filter or unfilter the current items" y escribir unas cuantas letras del inicio del nombre del componente para que esta aplique un filtro mostrando solamente aquellos que coincidan con el criterio de búsqueda!.
¡Realmente muy cómodo!, pues resulta imposible recordar en que paleta se encuentra cada componente. Sobre todo después de instalarse las jedi, las indy y otro par de bibliotecas extensas... Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#13
|
||||
|
||||
Y en versiones anteriores puede uno ir a las propiedades de la paleta (menú contextual de la paleta), en la lista de pestañas escoger [All] al final de la lista, dar click en la columna Name del listview de componentes para ordenarlas por nombre, recorrer las componentes hasta encontrar la deseada (ordenadas por nombre es fácil) y mirar la columna Page a ver qué dice.
// Saludos |
|
|
|