Ir al contenido


Foto

Guardar archivo PDF en tabla firebird


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

#1 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 30 junio 2013 - 05:01

Buenas tardes:

He estado mirando por el foro y no acabo de dar con  la tecla para guardar un archivo PDF dentro de una tabla de firebird. La idea es guardar unos documentos escaneados en PDF en la BD (Firebird 2.1 y D2010)

Cualquier ayudita sera agradecida

  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 junio 2013 - 08:06

Lo primero que debes hacer es crear un campo BLOB de tipo binario en una tabla de tu base de datos:


TU_CAMPO        BLOB SUB_TYPE 0 SEGMENT SIZE 16384;


Luego dependiendo de como estés  insertando o actualizando los datos desde Delphi, hay varias opciones para hacerlo. Si tienes un dataset e insertas o actualizas directamente con el método Post, podrías hacer así, utilizando un TOpenDialog de la paleta Dialogs:



delphi
  1. procedure TForm2.Button7Click(Sender: TObject);
  2. var
  3.   D: TDataset;
  4. begin
  5.   D := TU_Dataset;
  6.   if OpenDialog1.Execute then
  7.   begin
  8.     D.Edit; // o D.Append o D.Insert
  9.     TBlobField(D.FieldByName('Tu_Campo')).LoadFromFile(OpenDialog1.FileName);
  10.     D.Post;
  11.   end;
  12. end;



Esto te sirve para guardar cualquier tipo de archivo.

Saludos
  • 0

#3 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 30 junio 2013 - 01:17

Gracias Wilson por tu pronta respuesta.

Lo probare a ver como resulta.....


Saludos
  • 0

#4 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 30 junio 2013 - 02:13

Buenas de nuevo:

Con tu ayuda consigo guardar sin problemas el archivo, en este caso un pdf dentro de la tabla....

La cuestion ahora es.... como leo el archivo almacenado si estoy haciendo por ejemplo un scroll a la tabla


Saludos
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 junio 2013 - 02:56

Buenas de nuevo:

Con tu ayuda consigo guardar sin problemas el archivo, en este caso un pdf dentro de la tabla....

La cuestion ahora es.... como leo el archivo almacenado si estoy haciendo por ejemplo un scroll a la tabla


Esto es algo discutible, ya que el archivo (cualquiera que sea su extensión)  debería ser abierto por otra aplicación excepto que cuentes con alguna librería para visualizarlo directamente desde Delphi (solo en ese caso  tendría sentido lo de el scroll a la tabla), en todo caso, una forma de acceder al archivo del registro actual de la tabla, es la siguiente:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   D: TDataset;
  4.   Archivo: string;
  5. begin
  6.   D := TuDataset;
  7.   D.Open;
  8.   if SaveDialog1.Execute then
  9.   begin
  10.     Archivo := SaveDialog1.FileName;
  11.     TBlobField(D.FieldByName('Tu_Campo')).SaveToFile(Archivo);
  12.     ShellExecute(Handle, 'open',PWideChar(Archivo), nil, nil, SW_SHOWNORMAL);//Abre el archivo con la aplicación por defecto
  13.     //PWideChar  podría ser remplazado por PCHar en veriones anteriores a Delphi 2009
  14.   end;
  15. end;



Con la idea anterior podrías interceptar el evento OnScroll del dataset, crear un directorio temporal, un nombre de archivo fijo, y organizar la rutina  para ir visualizando el archivo de cada registro.

Saludos.
  • 0

#6 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 30 junio 2013 - 02:59

Gracias Wilson de nuevo:

Efectivamente la idea es visualizar desde delphi el pdf mediante un componente que me permite visualizar el pdf directamente..


Saludos
  • 0

#7 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 junio 2013 - 03:07

Gracias Wilson de nuevo:

Efectivamente la idea es visualizar desde delphi el pdf mediante un componente que me permite visualizar el pdf directamente..


En ese caso, lo más seguro es que tu componente soporte la carga del contenido desde un stream.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   D: TDataset;
  4.   stream: TStream;
  5. begin
  6.   D := TuDataset;
  7.   D.Open;
  8.   stream := TStream.Create;
  9.   try
  10.     TBlobField(D.FieldByName('Tu_Campo')).SaveToStream(stream);
  11.     TUComponente.LoadFromStream(stream);
  12.   finally
  13.     stream.Free;
  14.   end;
  15. end;



Saludos
  • 0

#8 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 05 julio 2013 - 03:08

Muchas Gracias Wilson y perdon por la tardanza en responder, he estado unos dias un poco atareado


Saludos
  • 0




IP.Board spam blocked by CleanTalk.