Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   guardar archivos en un campo blob (https://www.clubdelphi.com/foros/showthread.php?t=53778)

a_f_g 29-02-2008 12:54:49

guardar archivos en un campo blob
 
Hola a todos, quiero guardar archivos(*xls, *.doc, *.jpg) en un campo blob, me gustaria saber como hacerlos, utilizo firebird con fibplus, algun componente para realizar esta operacion, o codigos que pueda iluminarme


desde luego les agradesco por su ayuda

Lepe 29-02-2008 14:05:46

Debes hacerlo mediante Streams. Los Streams son flujos de datos (un buffer, vamos) bastante potentes.

Código Delphi [-]
var ms :TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.loadfromfile('fichero word');
  tabla.Edit; // bueno, lo que sea :D  
  campoBlob.LoadFromStream(ms); // aquí estamos cargando ya el fichero
  ms.free; // liberamos el intermediario que permite la carga.
  tabla.post;
end;

Saludos

RolphyReyes 29-02-2008 14:48:46

Saludos.

En la pagina de ellos en la sección de artículos explican el manejo de Blob con sus componentes.

Hasta luego.

a_f_g 03-03-2008 15:32:46

Leer campo bloB
 
gracias por su ayuda, me guardo, ahora como abrir, sis .xls en excel o .doc en word

Lepe 03-03-2008 16:19:31

Usa ShellExecute / WinExec / ExecandWait para que abra el programa con el que tiene asociado dicha extensión (OpenOffice, Word, wordpad, etc). Busca por el foro, hay muchísimos ejemplos.

Saludos

JerS 06-11-2008 23:04:25

Cita:

Empezado por Lepe (Mensaje 269630)
Debes hacerlo mediante Streams. Los Streams son flujos de datos (un buffer, vamos) bastante potentes.

Código Delphi [-]var ms :TMemoryStream; begin ms := TMemoryStream.Create; ms.loadfromfile('fichero word'); tabla.Edit; // bueno, lo que sea :D campoBlob.LoadFromStream(ms); // aquí estamos cargando ya el fichero ms.free; // liberamos el intermediario que permite la carga. tabla.post; end;


Saludos


muy bien, pero si despues deseo guardar el archivo de tipo TMemeryStream en un campo de tipo blob en una tabla de Mysql como haria???

Lepe 07-11-2008 14:34:49

¿no has leído bien el código?. Los campos Blob tienen un metodo LoadFromStream:

Código Delphi [-]
campoBlob.LoadFromStream(ms); // aquí estamos cargando ya el fichero en el campo BLOB

JerS 07-11-2008 18:18:16

Cita:

Empezado por Lepe (Mensaje 324616)
¿no has leído bien el código?. Los campos Blob tienen un metodo LoadFromStream:

Código Delphi [-]campoBlob.LoadFromStream(ms); // aquí estamos cargando ya el fichero en el campo BLOB


Si amigo he leido el codigo pero al hacer ese mismo proceso me da un error 'Invalid class typecast'
Código Delphi [-]
(rs.FieldByName('template') as  TBlobField).LoadFromStream(tptStream);

Lepe 07-11-2008 20:21:59

Aps, a ver si consigo explicarme.

doble clic a tu TTable, Tquery o lo que sea, si la ventana que aparece está en blanco, tienes que crear los campos persistentes (botón derecho y Add All Fields), ahora selecciona el campo Blob. Verás que en el inspector de objetos ya nos dice que es un TBlobField, bueno, en realidad, dependerá de los componentes de acceso IBX, BDE, ZEOS, etc, será un TIBBlobField, TBDEBlobField, etc...

Si tu campo "template" es ya un TIBBlobField y haces el moldeo de tipos, estás haciendo que coja la clase abstracta TBlobField y allí no está implementada (será virtual y/o abstract), por eso el error que obtienes.

Si añades los campos persistentes, tu linea sería así:
Código Delphi [-]
rstemplate.LoadFromStream(tptStream)

Si no tienes los campos persistentes, debes hacer el moldeo correcto según tus componentes:
Código Delphi [-]
(rs.Fieldbyname('template') as TIBBlobField).LoadFromStream(tptStream)

O lo que es lo mismo:
Código Delphi [-]
TIBBlobField(rs.Fieldbyname('template')).LoadFromStream(tptStream)

De todas formas no uses copy&paste porque seguro te dará error, crea los campos persistentes, en el inspector ves el nombre correcto que usa tus componentes y ya después puedes borrar los campos persistentes y hacerlo por código.

Saludos

JerS 07-11-2008 21:32:15

Cita:

Empezado por Lepe (Mensaje 324715)
Aps, a ver si consigo explicarme.

doble clic a tu TTable, Tquery o lo que sea, si la ventana que aparece está en blanco, tienes que crear los campos persistentes (botón derecho y Add All Fields), ahora selecciona el campo Blob. Verás que en el inspector de objetos ya nos dice que es un TBlobField, bueno, en realidad, dependerá de los componentes de acceso IBX, BDE, ZEOS, etc, será un TIBBlobField, TBDEBlobField, etc...

Si tu campo "template" es ya un TIBBlobField y haces el moldeo de tipos, estás haciendo que coja la clase abstracta TBlobField y allí no está implementada (será virtual y/o abstract), por eso el error que obtienes.

Si añades los campos persistentes, tu linea sería así:
Código Delphi [-]rstemplate.LoadFromStream(tptStream)


Si no tienes los campos persistentes, debes hacer el moldeo correcto según tus componentes:
Código Delphi [-](rs.Fieldbyname('template') as TIBBlobField).LoadFromStream(tptStream)


O lo que es lo mismo:
Código Delphi [-]TIBBlobField(rs.Fieldbyname('template')).LoadFromStream(tptStream)


De todas formas no uses copy&paste porque seguro te dará error, crea los campos persistentes, en el inspector ves el nombre correcto que usa tus componentes y ya después puedes borrar los campos persistentes y hacerlo por código.

Saludos


Correcto Lepe, todo lo que dices esta muy bien , puede ser que no me he sabido explicar el problema que existe es que estoy usando un recordset el componente ADO, con una tabla en Mysql, y a la Hora de asignar el valor del Template a mi campo de tipo LongBLOB, con el metodo que te describi anteriormente me sale la excepcion de 'Invalid class typecast', nose si en mi ignorancia lo que te voy a decir tengo razon sino te agradezco que me corrijas pero puede ser que no coincidan los tipos de datos TBlobFile con el tipo de dato que utiliza MYSQL en sus campos de tipo BLOB..

Saludos

Lepe 07-11-2008 21:46:28

No uso mySql ni ADO, esperemos que otro forista pueda echarte un cable.

Saludos


La franja horaria es GMT +2. Ahora son las 18:28:57.

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