Ver Mensaje Individual
  #4  
Antiguo 13-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Reputación: 21
santiago14 Va por buen camino
Wink

Para resolver mi problema, hice lo siguiente:

Código Delphi [-]
//.....
type
  TAviso = record
    nro_op:Integer;
    aviso:TStream;
    observaciones_aviso,
    estado_aviso:string;
  end;

//.....

uses
  DB;

//.....


procedure nuevo_aviso(r_aviso:TAviso; qAvisos:TMDOQuery);
begin
  with r_aviso, qAvisos do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Insert into avisos (nro_op, texto_aviso, ');
    SQL.add('observaciones_aviso, estado_aviso) ');
    SQL.Add('Select :nro_op, :texto, :observaciones, :estado ');
    SQL.Add('From rdb$database ');
    ParamByName('nro_op').AsInteger:=nro_op;
    ParamByName('texto').LoadFromStream(aviso, ftBlob);
    ParamByName('observaciones').AsString:=observaciones_aviso;
    ParamByName('estado').AsString:=estado_aviso;
    try
      ExecSQL;
    except
      raise;
    end;
  end;
end;

end.

Código Delphi [-]
//.....

procedure TfrmPrincipal.btnRegistroAvisoClick(Sender: TObject);
var
  stream:TStream;
  r_aviso:TAviso;
begin
  stream:=TMemoryStream.Create;
//Guardamos el contenido como un flujo en stream
  Editor.Lines.SaveToStream(stream);
  with r_aviso do
  begin
    nro_op:=StrToInt(txtNroOP.Text);
    aviso:=stream;
    observaciones_aviso:='';
    estado_aviso:='NO_PUBLICADO';
  end;
  with DataModule1 do
  begin
    terminarTransaccion;
    try
      transaccion.StartTransaction;
      nuevo_aviso(r_aviso, qAvisos);
      transaccion.Commit;
      MessageBox('Registro terminado.', PChar(lblAvisos.Caption),
        MB_OK + MB_ICONINFORMATION);
    except
      on e:Exception do
      begin
        terminarTransaccion;
        mErrores(e, 'Sin registro de aviso digitalizado.', lblAvisos.Caption);
      end;
    end;                
  end;
end;

//......

Del lado de la BD la cosa es así:
Código SQL [-]
CREATE TABLE AVISOS (
    NRO_OP               INTEGER NOT NULL,
    TEXTO_AVISO          BLOB SUB_TYPE 0 SEGMENT SIZE 100,
    OBSERVACIONES_AVISO  VARCHAR(1000),
    ESTADO_AVISO         VARCHAR(50)
);

ALTER TABLE AVISOS ADD CONSTRAINT PK_AVISOS PRIMARY KEY (NRO_OP);

Lo he probado poniendo un archivo .rtf con imágenes y texto, negrita, hipervínculos, cursiva, etc., etc. etc. y me lo pasó de 10.
No hubo necesidad de guardar el .rtf a disco, que por supuesto si el usuario desea hacerlo tiene disponible el botón "guardar" para luego levantarlo a su antojo.
Firebird 2.1, conexión: IBX, Delphi 7

Bueno, gracias nuevamente por el aporte de todos.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por ecfisa fecha: 18-08-2020 a las 15:41:22. Razón: quitar emoticón del código
Responder Con Cita