Guardar archivo PDF en tabla firebird
#1
Escrito 30 junio 2013 - 05:01
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
#2
Escrito 30 junio 2013 - 08:06
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:
procedure TForm2.Button7Click(Sender: TObject); var D: TDataset; begin D := TU_Dataset; if OpenDialog1.Execute then begin D.Edit; // o D.Append o D.Insert TBlobField(D.FieldByName('Tu_Campo')).LoadFromFile(OpenDialog1.FileName); D.Post; end; end;
Esto te sirve para guardar cualquier tipo de archivo.
Saludos
#3
Escrito 30 junio 2013 - 01:17
Lo probare a ver como resulta.....
Saludos
#4
Escrito 30 junio 2013 - 02:13
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
#5
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:
procedure TForm1.Button1Click(Sender: TObject); var D: TDataset; Archivo: string; begin D := TuDataset; D.Open; if SaveDialog1.Execute then begin Archivo := SaveDialog1.FileName; TBlobField(D.FieldByName('Tu_Campo')).SaveToFile(Archivo); ShellExecute(Handle, 'open',PWideChar(Archivo), nil, nil, SW_SHOWNORMAL);//Abre el archivo con la aplicación por defecto //PWideChar podría ser remplazado por PCHar en veriones anteriores a Delphi 2009 end; 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.
#6
Escrito 30 junio 2013 - 02:59
Efectivamente la idea es visualizar desde delphi el pdf mediante un componente que me permite visualizar el pdf directamente..
Saludos
#7
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.
procedure TForm1.Button1Click(Sender: TObject); var D: TDataset; stream: TStream; begin D := TuDataset; D.Open; stream := TStream.Create; try TBlobField(D.FieldByName('Tu_Campo')).SaveToStream(stream); TUComponente.LoadFromStream(stream); finally stream.Free; end; end;
Saludos
#8
Escrito 05 julio 2013 - 03:08
Saludos