Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Guardar imagen en base de datos Access (https://www.clubdelphi.com/foros/showthread.php?t=54725)

fonx 28-03-2008 14:13:08

Guardar imagen en base de datos Access
 
Hola chicos/as por aquí ando de nuevo. Llevo peinando el blog y el google durante todo el día de ayer y hoy porque intento guardar en una base de datos access imágenes. Pero quiero hacerlo como un filestream, no como una imagen bmp en sí ya que esto último guarda la imagen en bmp más otra estructura con lo que el tamaño de la base de datos aumenta muchísimo. Aparte de que las imágenes no serán en bmp.

Uso Delphi 5

He probado varias formas que no han dado resultado:

Código:

query:=TADOQuery.create(Self);
query.connection:=AC1;
query.SQL.text:='Select Fotografia1 from visitas'; //Fotografia1 es de tipo Objeto OLE
query.active:=true;
query.Edit;
query.LoadFromFile(OpenDialog.FileName);
query.Post;

Esto compila pero al ejecutar el load me dice que "no se puede crear el Recordset desde el origen especificado. El archivo o la secuencia de origen deben contener datos REcordset en formato XML o ADTG"

Código:

Image1 := TImage.Create(Self);
Image1.Picture.LoadFromFile(PATH_IMG+'\logoInforme.bmp');
comm:=TADOCommand.Create(Self);
comm.connection:=AC1;
comm.CommandText:= 'UPDATE visitas SET Fotografia1=:fichero WHERE NVisita='+IntToStr(numVisita);
comm.Parameters.ParamByName('fichero').value:= Variant(Image1);
comm.Execute;

Compilador:Invalid typecast, y sin el cast tipos incompatibles Variant e Image

Lo mismo cambiando el TImage por

Código:

fStream:=TFileStream.Create(OpenDialog.FileName,fmOpenRead);
tbf:=TBlobField.Create(Self);
tbf.LoadFromStream(fStream);

A ver si iniciamos una tormenta de ideas...¿A que estructura podría pasar el filestream para intentar algo? Gracias de antemano :)

delphi.com.ar 28-03-2008 14:52:49

Una forma puede ser:

http://www.clubdelphi.com/foros/show...25&postcount=4

Saludos!

fonx 31-03-2008 11:38:01

Hola, gracias por ese apunte :) , basándome en tu código parece que lo conseguí, las instrucciones se ejecutaron bien y la base de datos creció en tamaño. Además el access indica que en el campo OLE object hay datos binarios. El código al final me quedó así:

Código:

query:=TADOQuery.create(Self);
query.connection:=AC1;
query.SQL.text:='Select * from visitas WHERE NVisita='+IntToStr(numVisita);
query.active:=true;
query.edit;
TBlobField( query.FieldByName('Fotografia1') ).LoadFromStream( fStream );
query.Post;
fStream.Free;
query.free;



La franja horaria es GMT +2. Ahora son las 10:10:30.

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