Ir al contenido


Foto

TRichEdit, TStringStream: Toma dos...


  • Por favor identifícate para responder
21 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 09:35

mmmm pues no, el post anterior sobre el TStringStream no funciona y mejor dejarlo por la paz...

Intento otro enfoque, más local, ya que la función del post anterior residía en otro Form que no era el principal.

Ahora, el problema que tengo esencialmente es que no reconoce el SaveStream ni desde FieldValues ni FieldByName..., ¿alguien tiene alguna idea de cómo resolver el problemita?

Mi código:


delphi
  1. procedure TfrmContenedor.DespliegaResumenEventos(sFecha,sHora,sCtrlPac : string);
  2. var
  3.   strStream : TStringStream;
  4. begin
  5.   with TADOQuery.Create(Self) do
  6.   begin
  7.       Connection := qryControl.Connection;
  8.       with SQL do
  9.       begin
  10.         Add('SELECT EAPC_FECHA_EVENTO,EAPC_HORA_EVENTO,EAPC_LOGIN_USER,EAPC_EVENTO');
  11.         Add('FROM EAPC_EVENTOS ');
  12.         Add(DevolverWhereSQL(1));
  13.       end;
  14.       Open;
  15.       while not Eof do
  16.       begin
  17.         strStream := TStringStream.Create(EmptyStr);
  18.         FieldByName('EAPC_EVENTO').SaveToStream(strStream); //<<--¡¡Ésta línea!!
  19.         redtResumenEventos.Lines.Add(FormatDateTime('dd-mm-yyyy', FieldValues['EAPC_FECHA_EVENTO'])+
  20.                                                     ' '+MinutsToStr(FieldValues['EAPC_HORA_EVENTO'])+
  21.                                                     '  ('+Trim(FieldValues['EAPC_LOGIN_USER'])+
  22.                                                     ') - ');
  23.         redtResumenEventos.Lines.LoadFromStream(strStream);
  24.         strStream.Free;
  25.         Next;
  26.       end;
  27.   end;
  28. end;


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 09:41

Inténtalo así:



delphi
  1. TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);



Saludox ! :)


  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 10:02

Inténtalo así:



delphi
  1. TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);



Saludox ! :)


Intentado y el resultado es que strStream queda vacía, al hacerle LoadFromStream elimina el texto que ya estaba...

Sigo igual...  : : : : : :
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 10:23

Y el valor en el campo está correctamente almacenado ???

Esa línea yo la uso para cargar un TStringList tal cual la pongo, sin mayor problema... te pongo mi código igual te ayuda en algo:



delphi
  1. var
  2.   sTexto: TStringStream;
  3.   ListaTexto: TStringList;
  4. begin
  5.  
  6.     sTexto := TStringStream.Create(EmptyStr);
  7.     ListaTexto := TStringList.Create(Self);
  8.  
  9.     qryTexto.Close;
  10.     qryTexto.SQL.Text:= 'SELECT TXT_DOCUM FROM CTRAO_DOCS WHERE ID_TIPO = '+sTipo+
  11.                         ' AND CONS_DOCUM = '''+sNumero+'''';
  12.     qryTexto.Open;
  13.  
  14.     TBlobField(qryTexto.FieldByName('TXT_DOCUM')).SaveToStream(sTexto);
  15.  
  16.     ListaTexto.Text := sTexto.DataString;
  17.  
  18.     // Más código
  19.  
  20. end;



Saludox ! :)




  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 14 mayo 2012 - 10:34

Hola

[Delphi]

    TBlobField(qryTexto.FieldByName('TXT_DOCUM')).SaveToStream(sTexto);
    sTexto.seek(0,0);
    ListaTexto.Text := sTexto.DataString;

[/code]

Saludos
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 10:35

Y el valor en el campo está correctamente almacenado ???...

Totalmente bien. Es el contenido de un TRichEdit, el cual contiene algunos códigos de formateo. La intención es tomar el contenido del campo CON TODO Y FORMATOS, insertar unos textos y el contenido del campo respetando los formatos.

Por eso intenté hacerlo con tu código anterior (usando la ADOTable, ¿recuerdas?) pero no funcionó (post anterior) y ahora intenté hacerlo vía un TADOQuery y el TStringStream, pero no le hallo cómo.
  • 0

#7 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 10:46

Muy raro, porque yo hago eso exactamente... en un editor manipulo texto con todo y formatos (fuente, negritas, tamaños, colores, etc) y lo guardo con TODO el formato... después lo recupero para mostrar ese texto en un QuickReport y poder imprimirlo... sin mayores problemas...

Veo que dices que:


Inténtalo así:



delphi
  1. TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);



Saludox ! :)


Intentado y el resultado es que strStream queda vacía, al hacerle LoadFromStream elimina el texto que ya estaba...
....


No sé si ando mal pero me parece lógico... el LoadFromStream creo que no respeta lo que ya había, me parece que hace algo como un clear y después carga la información que le indicas, es por eso que "pierdes" lo que ya había... creo que por aquí es el problema...

Habría que pensar a lo mejor en primero cargar con LoadFromStream y después agregar el resto... creo  ^o|

Saludox ! :)
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 14 mayo 2012 - 10:47

Ejem, ejem :p


  • 0

#9 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 10:48

Vamos progresando...  (y) (y)

Con éste código ya inserta UN dato (se esperan tres o más), pero arroja la excepción que se muestra en la imagen...



delphi
  1. procedure TfrmContenedor.DespliegaResumenEventos;
  2. var
  3.   strStream : TStringStream;
  4.   slTexto : TStringList;
  5. begin
  6.   with TADOQuery.Create(Self) do
  7.   begin
  8.       Connection := qryControl.Connection;
  9.       with SQL do
  10.       begin
  11.         Add('SELECT EAPC_FECHA_EVENTO, EAPC_HORA_EVENTO, EAPC_LOGIN_USER, EAPC_EVENTO');
  12.         Add('FROM EAPC_EVENTOS ');
  13.         Add(DevolverWhereSQL(1));
  14.       end;
  15.       Open;
  16.       while not Eof do
  17.       begin
  18.         strStream := TStringStream.Create(EmptyStr);
  19.         slTexto := TStringList.Create;
  20.         TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);
  21.         slTexto.Text := strStream.DataString;
  22.         with redtResumenEventos.Lines do
  23.         begin
  24.             Add(FormatDateTime('dd-mm-yyyy', FieldValues['EAPC_FECHA_EVENTO'])+
  25.                               ' '+MinutsToStr(FieldValues['EAPC_HORA_EVENTO'])+
  26.                               '  ('+Trim(FieldValues['EAPC_LOGIN_USER'])+') - '{+
  27.                               RTF2Txt(FieldValues['EAPC_EVENTO'])});
  28.             Add(slTexto.Text);
  29.             Add(CRLF);
  30.         end;
  31.         strStream.Free;
  32.         slTexto.Free;
  33.         Next;
  34.       end;
  35.   end;
  36. end;

Archivos adjuntos


  • 0

#10 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 11:00

Mil perdones, se me olvidó comentar que la excepción "brinca" en ésta línea...



delphi
  1. .
  2. .
  3. .
  4.             Add(slTexto.Text);
  5. .
  6. .
  7. .


  • 0

#11 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 11:39

Otra cosa que se me ocurre es algo asi:



delphi
  1.     procedure TfrmContenedor.DespliegaResumenEventos;
  2.     var
  3.       strStream : TStringStream;
  4.       slTexto : TStringList;
  5.     begin
  6.       with TADOQuery.Create(Self) do
  7.       begin
  8.           Connection := qryControl.Connection;
  9.           with SQL do
  10.           begin
  11.             Add('SELECT EAPC_FECHA_EVENTO, EAPC_HORA_EVENTO, EAPC_LOGIN_USER, EAPC_EVENTO');
  12.             Add('FROM EAPC_EVENTOS ');
  13.             Add(DevolverWhereSQL(1));
  14.           end;
  15.           Open;
  16.           while not Eof do
  17.           begin
  18.             strStream := TStringStream.Create(EmptyStr);
  19.             slTexto := TStringList.Create;
  20.             TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);
  21.            
  22.             slTexto.Add((FormatDateTime('dd-mm-yyyy', FieldValues['EAPC_FECHA_EVENTO'])+
  23.                                   ' '+MinutsToStr(FieldValues['EAPC_HORA_EVENTO'])+
  24.                                   '  ('+Trim(FieldValues['EAPC_LOGIN_USER'])+') - '{+
  25.                                   RTF2Txt(FieldValues['EAPC_EVENTO'])});
  26.             slTexto.Add(strStream.DataString);
  27.            
  28.             redtResumenEventos.Text := slTexto.Text;
  29.          
  30.             strStream.Free;
  31.             slTexto.Free;
  32.             Next;
  33.           end;
  34.       end;
  35.     end;



Podría ser...  ^o|

Saludox ! :)


  • 0

#12 luisgutierrezb

luisgutierrezb

    Advanced Member

  • Miembros
  • PipPipPip
  • 92 mensajes
  • LocationMéxico

Escrito 14 mayo 2012 - 11:55

y su usas el metodo del StringList, AddStrings en lugar del Add, se supone que es para añadir listas a las listas, espero que sirva, saludos!
  • 0

#13 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 11:59

...Podría ser...  ^o|...


Pues CASI es...  *-) *-) :D

Excepto por que no me presenta el texto del RichEdit formateado, sino "en crudo". O sea, enseña los calzones, es decir, se ven los formatos como código...
  • 0

#14 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 12:14

Y así ????  ^o|



delphi
  1. procedure TfrmContenedor.DespliegaResumenEventos;
  2.     var
  3.       strStream, strFormato : TStringStream;
  4.       slTexto : TStringList;
  5.     begin
  6.       with TADOQuery.Create(Self) do
  7.       begin
  8.           Connection := qryControl.Connection;
  9.           with SQL do
  10.           begin
  11.             Add('SELECT EAPC_FECHA_EVENTO, EAPC_HORA_EVENTO, EAPC_LOGIN_USER, EAPC_EVENTO');
  12.             Add('FROM EAPC_EVENTOS ');
  13.             Add(DevolverWhereSQL(1));
  14.           end;
  15.           Open;
  16.           while not Eof do
  17.           begin
  18.             strStream := TStringStream.Create(EmptyStr);
  19.             slTexto := TStringList.Create;
  20.             TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);
  21.            
  22.             slTexto.Add((FormatDateTime('dd-mm-yyyy', FieldValues['EAPC_FECHA_EVENTO'])+
  23.                                   ' '+MinutsToStr(FieldValues['EAPC_HORA_EVENTO'])+
  24.                                   '  ('+Trim(FieldValues['EAPC_LOGIN_USER'])+') - '{+
  25.                                   RTF2Txt(FieldValues['EAPC_EVENTO'])});
  26.             slTexto.Add(strStream.DataString);
  27.          
  28.             strFormato := TStringStream.Create(slTexto.Text);
  29.             redtResumenEventos.Lines.LoadFromStream(strFormato);
  30.             strFormato .Free;
  31.        
  32.             strStream.Free;
  33.             slTexto.Free;
  34.             Next;
  35.           end;
  36.       end;
  37.     end;



Saludox ! :)
  • 0

#15 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 12:30

Y así ????  ^o|...

Nope..., sólo guarda el último registro leído y sin formato...

Quiero pegarme un tiro, o pensándolo bien, mejor tirarme un pegue...  : : : :
  • 0

#16 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 12:52

Porqué no nos mandas el contenido del TStringList antes de tratar de cargarlo al TRichEdit a ver si le vemos algo extraño...

Saludox ! :)
  • 0

#17 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 02:12

...de cargarlo al TRichEdit a ver si le vemos algo extraño...


Corrida 1/3
slTexto.Text := '28-11-2011 10:46  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente present\'f3 un episodio de p\'e9rdida de consciencia de alrededor de 2 minutos.\f1 '#$D#$A'\par }'#$D#$A#$D#$A

redtResumenEventos.Text := '28-11-2011 10:46  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente present\'f3 un episodio de p\'e9rdida de consciencia de alrededor de 2 minutos.\f1 '#$D#$A'\par }'#$D#$A#$D#$A

Hasta aquí, todo bien, es el primer registro.
Corrida 2/3
slTexto.Text := '28-11-2011 12:49  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente se encuentra \b estabilizado\b0  y \b consciente\b0 .\f1 '#$D#$A'\par }'#$D#$A#$D#$A

redtResumenEventos.Text := '28-11-2011 10:46  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente present\'f3 un episodio de p\'e9rdida de consciencia de alrededor de 2 minutos.\f1 '#$D#$A'\par }'#$D#$A#$D#$A#$D#$A#$D#$A'28-11-2011 12:49  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente se encuentra \b estabilizado\b0  y \b consciente\b0 .\f1 '#$D#$A'\par }'#$D#$A#$D#$A#$D#$A#$D#$A


Corrida 3/3:

slTexto.Text := '28-11-2011 13:23  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 Se realiza el siguiente evento para probar \b la inserci\'f3n a la tabla\b0 , incorporando algunos \i formatos\i0  tendientes a testear la \ul capacidad \ulnone de la aplicaci\'f3n.\f1 '#$D#$A'\par '#$D#$A'\par }'#$D#$A#$D#$A

redtResumenEventos.Text := '28-11-2011 10:46  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente present\'f3 un episodio de p\'e9rdida de consciencia de alrededor de 2 minutos.\f1 '#$D#$A'\par }'#$D#$A#$D#$A#$D#$A#$D#$A'28-11-2011 12:49  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 El paciente se encuentra \b estabilizado\b0  y \b consciente\b0 .\f1 '#$D#$A'\par }'#$D#$A#$D#$A#$D#$A#$D#$A'28-11-2011 13:23  (FORTIZ) - '#$D#$A'{\rtf1\ansi\ansicpg1252\deff0\deflang2058{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}'#$D#$A'\viewkind4\uc1\pard\f0\fs16 Se realiza el siguiente evento para probar \b la inserci\'f3n a la tabla\b0 , incorporando algunos \i formatos\i0  tendientes a testear la \ul capacidad \ulnone de la aplicaci\'f3n.\f1 '#$D#$A'\par '#$D#$A'\par }'#$D#$A#$D#$A#$D#$A#$D#$A

Y el resultado, en la imagen.

Archivos adjuntos


  • 0

#18 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 03:06

Ya vi el problema... la situación es que al momento de detectar una cadena antes de comenzar los caracteres del control del formato, como que ya no lo toma en cuenta... es decir, si mandaras al TRichEdit la información que viene directamente de tu campo blob te lo presenta con el formato correspondiente, pero como se agrega la línea con la fecha/hora y el nombre, entonces lo pierde...

Lo bueno: ya sabemos de dónde viene el problema...  (y)
Lo malo: cómo se soluciona ???...  *-)

Saludox ! :)
  • 0

#19 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 14 mayo 2012 - 03:08

...Lo malo: cómo se soluciona ???...  *-)

He estado batallando con ésa pregunta desde el jueves...  (li) : (li) : (li)
  • 0

#20 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 14 mayo 2012 - 03:26

Intenta así:



delphi
  1. procedure TfrmContenedor.DespliegaResumenEventos;
  2.     var
  3.       strStream, strFormato : TStringStream;
  4.       slTexto : TStringList;
  5.     begin
  6.       with TADOQuery.Create(Self) do
  7.       begin
  8.           Connection := qryControl.Connection;
  9.           with SQL do
  10.           begin
  11.             Add('SELECT EAPC_FECHA_EVENTO, EAPC_HORA_EVENTO, EAPC_LOGIN_USER, EAPC_EVENTO');
  12.             Add('FROM EAPC_EVENTOS ');
  13.             Add(DevolverWhereSQL(1));
  14.           end;
  15.           Open;
  16.           while not Eof do
  17.           begin
  18.             strStream := TStringStream.Create(EmptyStr);
  19.             slTexto := TStringList.Create;
  20.             TBlobField(FieldByName('EAPC_EVENTO')).SaveToStream(strStream);
  21.            
  22.             slTexto.Add(strStream.DataString);
  23.          
  24.             strFormato := TStringStream.Create(slTexto.Text);
  25.             redtResumenEventos.Lines.LoadFromStream(strFormato);
  26.  
  27.             redtResumenEventos.SelText :=  (FormatDateTime('dd-mm-yyyy', FieldValues['EAPC_FECHA_EVENTO'])+
  28.                                   ' '+MinutsToStr(FieldValues['EAPC_HORA_EVENTO'])+
  29.                                   '  ('+Trim(FieldValues['EAPC_LOGIN_USER'])+') - '{+
  30.                                   RTF2Txt(FieldValues['EAPC_EVENTO'])};       
  31.  
  32.             strFormato .Free;
  33.        
  34.             strStream.Free;
  35.             slTexto.Free;
  36.             Next;
  37.           end;
  38.       end;
  39.     end;



Saludox ! :)


  • 0




IP.Board spam blocked by CleanTalk.