extraer de un campo blob a fichero con delphi

IntelInside

Hola, soy un novato con delphi ya que es la primera vez que trabajo con este, lo que estoy intentando hacer es:

Sacar de un campo blob de la BD una fotografia para posteriormente guardarla en un fichero en el disco duro (las fotos todas seran jpg).

Hasta ahora he realizado este código:

Código Delphi

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Odbc;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
end;
var
Form1: TForm1;
implementation

procedure TForm1.Button1Click(Sender: TObject);
var
DBprueba: TODBCDatabase;
QBuscar: TODBCQuery;
cadena1: String;
fileData : TStringList;

begin
fileData := TStringList.Create;

DBprueba.Params:='FILEDSN=./conectar.dsn;PWD=1';
DBprueba.Connect;
QBuscar:=TODBCQuery.Create;
cadena1:= ('Select foto from persona where (nombre = "David")');
QBuscar.Sql:= cadena1;
Label1.caption :=cadena1;
QBuscar.Execute;

Label2.caption:=QBuscar.Execute;
fileData.Text:=QBuscar.Execute;
Label3.caption:=fileData.Text;
fileData.savetofile('c:\prueba.jpg');
end;
{$R *.DFM}
end.

El problema le tengo cuando intento crear el fichero

fileData.Text:=QBuscar.Execute;

para posteriormente salvarlo en el disco duro.

El error que me genera es que no puedo almacenar en string el procedimiento de la consulta sql y no se como he de tratarla para almacenar los caracteres en un fichero para posteriormente renombrarlo a jpg y que se quede la foto guardada.

Un saludo y gracias de antemano por vuestra ayuda.

Trabajo con una versión de delphi bastante antigua la 2.0.

Soltrac

Qué SGBD es?

Tienes que usar streams. No se si el TBlobStream es genérico de delphi o de algún componente y menos si existe en 2.0 xDDDD

Una idea mas o menos...

http://edn.embarcadero.com/article/27462

IntelInside

Es sql.

el TBlobStream ya lo ví, pero no esta incorporado en la 2.0.

Se que usar esta versión tan antigua es un inconveniente para esto. Y en parte es lo que me ha hecho no lograr sacarlo aún (probe con la versión 7.0 y lo saque).

La cosa es que esto es una pequeña parte de un gran programa que tengo, y convertir todo el programa a la versión 7 sería aún más curro (o eso creo).

Simplemente seria hacer la conexión a la base de datos coger los datos del campo blob y crearme un fichero en el disco duro dandole extensión jpg, pero me esta creando unos quebraderos de cabeza que no veas. Ya que yo no llegue a ver delphi nunca de c++ pase a VB, java etc...

BrUn

Y en 2.0 no existe ni la clase TStream? TMemoryStream, nada de eso?

Un stream al fin y al cabo le metes lo que quieras, y haces el saveToFile y ya guardas el jpg.

IntelInside

Si el TMemoryStream si que existe pero usandolo en el codigo que he puesto en vez del StreamList me da el mismo error.

Básicamente todo mi problema se reduce a que al almacenar las fotos en la B.D. en un campo blob al recogerlas no encuentro nada en 2.0 que me lo recoja.

Soltrac

#5 Mira a ver si la clase Bitmap tiene algún loadfromstream o algo así en el q le puedas pasar un stream.

Usuarios habituales

  • Soltrac
  • IntelInside
  • BrUn