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 12-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 22
santiago14 Va por buen camino
Question Guardar "cualquier cosa" en un campo blob

Buenas de nuevo, resulta que tengo que guardar en mi BD (Firebird 2.1), en un campo blob, "cualquier cosa", explico:

Es el resultado de que mi cliente va haciendo "copiar, pegar" de cosas que le interesan, de ahí que en algunos casos solo será texto, en otro caso será texto e imágenes, solo imágenes...

Para ello he dispuesto un TJvRichEdit desde donde él puede sacar y poner lo que se le antoje. El problema surge a la hora de guardar ese contenido en mi BD.
Recuerdo que este componente, si tuviéramos que guardar en disco, lo haría en formato *.rtf (formato enriquecido). Pero yo no quiero levantarlo hacia mi Base de datos desde un archivo guardado en disco si puedo hacerlo directamente desde la aplicación donde está el RichEdit con el contenido en pantalla y meterlo a mi BD. ¿Me explico?

¿Cómo lo hago? Espero haber sido claro. Gracias.

Uso Delphi 7, Firebird 2.1, IBX como conector.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 13-06-2013
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 20
celades1 Va por buen camino
hola


Código SQL [-]
CREATE DOMAIN T_BLOB_BINARY AS 
BLOB SUB_TYPE 0 SEGMENT SIZE 100
yo ahi meto de todo, exes etc

Saludos

Última edición por ecfisa fecha: 13-06-2013 a las 09:35:59. Razón: Corregir problema etiquetas en modo WYSIWYG
Responder Con Cita
  #3  
Antiguo 13-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Entonces nunca leerás nada del disco, sólo de la memoria?
Responder Con Cita
  #4  
Antiguo 13-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 22
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 16:41:22. Razón: quitar emoticón del código
Responder Con Cita
  #5  
Antiguo 17-08-2020
CarlosLischetti CarlosLischetti is offline
Registrado
 
Registrado: ago 2018
Posts: 1
Poder: 0
CarlosLischetti Va por buen camino
Tenia el mismo problema

Muchas gracias, tu solución me vino perfecta !
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Qué significa el mensage "BLOB has been modified" en una tabla Paradox? Alcolea Tablas planas 1 06-10-2012 18:23:54
Porque me sale cada rato un Warning "ibase_fetch_assoc()" al Guardar ???? AGAG4 PHP 6 10-09-2008 00:40:25
Error Invalid blob handle in record buffer??? sin usar "Blobs to cache" varuhs Conexión con bases de datos 4 22-01-2007 22:19:53
Campo "Blob" en SQLServer RaulChemical MS SQL Server 0 27-06-2006 13:24:08
¿Como Guardar un "RECORD" en un campo BLOB? sitrico Conexión con bases de datos 5 29-06-2004 18:32:01


La franja horaria es GMT +2. Ahora son las 02:09:04.


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