Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como grabar un TRichEdit y conserve sus propiedades (https://www.clubdelphi.com/foros/showthread.php?t=27788)

gcaffe 30-11-2005 19:13:36

Como grabar un TRichEdit y conserve sus propiedades
 
Hola:

Anteriormente hice una consulta sobre un TRichEdit, gracias por la respuesta que recibí. Ahora lo que pregunto es, como hacer para grabar un campo TRichEdit, que está formateado, es decir con Negritas, Italicas, etc., en un campo nText de una base de datos SQL Server 2000, de tal froma que conserve sus atributos y que al volver a abrir el campo nText me muestro el TRichEdit formateado.

Muchas gracias

delphi.com.ar 30-11-2005 19:16:51

Guardalo utilizando el método SaveToStream del TRichEdit, y LoadFromStream de tu campo/parámetro si es que este es un TBlobField.

http://www.clubdelphi.com/foros/show...13&postcount=2

Saludos!

gcaffe 01-12-2005 12:52:48

Hola:
Gracias por tu sugerencia Delphi.com.ar, esto es lo que he realizado:

1) He modificado el código delphi que ejecuta el TADOStoreProcedure que actualiza la Tabla, quedando así:

Código Delphi [-]
 procedure TfrmInformes.frmBtnsbtnPostClick(Sender: TObject);
 var
   AStream: TStream;
 begin
   with DM.SProc do begin
      Active := False;
      ProcedureName := 'InformesMOD;1';
      Parameters.Refresh;
      Parameters.FindParam('@IDInforme').Value := DM.InformesVERIDInforme.Value;
 
      AStream := TMemoryStream.Create;
      try
         edRMemo.Lines.SaveToStream(AStream);
        Parameters.FindParam('@Texto').LoadFromStream(AStream, ftBlob); //    .Value := edRMemo.Lines;
      finally
         AStream.Free;
      end;
      if not Prepared then Prepared := True;
      ExecProc;
   end;
 end;

Nota: He eliminado lineas para que sea mas claro

2) Tambien he modificado el procedimento del MS SQL Server 2000, según las sugerencias técnicas para la Administración de datos nText, Text e Image, quedando finalmente así:

Código SQL [-]
 CREATE PROCEDURE InformesMOD
             @IDInforme    int,
             @Letrado    Char(4),
             @Resumen    nChar(80),
             @Adjuntos    Char(200),
             @FEnvio    SmallDateTime,
             @Texto     ntext,
             @Proxima    smalldatetime,
             @ARealizar    nChar(100)
                 
 AS
 
 BEGIN TRAN
 DECLARE    @PtrVal binary(16)
 
     UPDATE Informes
     SET     Letrado = @Letrado,
         Resumen = @Resumen,
                 Adjuntos = @Adjuntos,
                 FechaEnvio = @FEnvio,    
                ProximaAccion = @Proxima,
         Texto = @Texto,
         ParaHacer = @ARealizar
     WHERE IDInforme = @IDInforme
 
     EXECUTE sp_dboption 'Informes', 'select into/bulkcopy', 'TRUE'
 
     SELECT @PtrVal = TEXTPTR(Texto)
     FROM Informes
     WHERE IDInforme = @IDInforme
     UPDATETEXT Informes.Texto @PtrVal 0 NULL @Texto
 
     EXECUTE sp_dboption 'Informes', 'select into/bulkcopy', 'FALSE'
 
 IF @@ERROR = 0
     COMMIT TRAN
 ELSE
     ROLLBACK TRAN
 GO

Nota: Este procedimiento está completo, se pasan todos los parámetros.

3) Al ejecutarlo me da el siguiente error:

"Espacio de almacenamiento insuficiente para completar la operación"

Y hasta aquí he llegado y no sé como seguir, agradecería cualquier sugerencia.

Muchas gracias.

delphi.com.ar 01-12-2005 13:05:52

¿Es tan grande el texto como para que de ese error? (Mas de 1.073.741.823 bytes)
El tipo image es del doble de tamaño del nText.

Saludos!


La franja horaria es GMT +2. Ahora son las 01:52:08.

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