Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2004
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 26-08-2004
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Cita:
Empezado por roman
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
Gracias Roman por responder mi consulta, realice lo que me dijiste:

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.
Responder Con Cita
  #4  
Antiguo 26-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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í:

Código Delphi [-]
var
  Stream: TStringStream;

begin
  Stream := TStringStream.Create(Blob);
  try
    Stream.Seek(0, soFromBeginning);
    RichEdit1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

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
Responder Con Cita
  #5  
Antiguo 26-08-2004
JulioGO JulioGO is offline
Miembro
 
Registrado: ago 2004
Posts: 94
Poder: 20
JulioGO Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 26-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 26-08-2004
Avatar de Manuel
Manuel Manuel is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz/Chile
Posts: 324
Poder: 21
Manuel Va por buen camino
Cita:
Empezado por roman
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í:

Código Delphi [-]
var
  Stream: TStringStream;

begin
  Stream := TStringStream.Create(Blob);
  try
    Stream.Seek(0, soFromBeginning);
    RichEdit1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

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
Gracias una vez más roman: realice lo que me dijiste así:

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.
Responder Con Cita
  #8  
Antiguo 17-01-2005
Avatar de geovany
geovany geovany is offline
Miembro
 
Registrado: sep 2004
Ubicación: El Fuerte Sinaloa
Posts: 165
Poder: 20
geovany Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 18-01-2005
EduardRC EduardRC is offline
Registrado
 
Registrado: ene 2005
Posts: 2
Poder: 0
EduardRC Va por buen camino
Mirar la propiedad 'PlainText' del RichEdit.

Saludos
Responder Con Cita
  #10  
Antiguo 05-10-2006
srneo srneo is offline
Registrado
 
Registrado: may 2006
Posts: 5
Poder: 0
srneo Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 05-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ok, lo tendremos en cuenta.

// Saludos
Responder Con Cita
  #12  
Antiguo 05-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 06-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:48:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi