Delphi - Acces y TGraphic field

 
Vista:

Acces y TGraphic field

Publicado por BigLuis (463 intervenciones) el 26/02/2003 16:33:32
Tengo que recuperar las imagenes almacenadas en una base de datos Access con una tabla con dos campos, uno Integer con un numero de foto y otro graphic con la foto embebida, que está muy mal diseñada y construida, para tratar de hacer otra un poco más solida y menos "pesada".No quiero ir registro a registro editando las imagenes con el editor de Microsoft.Desde Delphi, atacandola con ADO es imposible visualizar las imagenes. Intento utilizar el siguiente procedimiento (en algun sitio leí que funcionaba) y me da error en el Stream al cargarlo en una TImage. ¿Alguien sabe porque?.
procedure TForm1.SpeedButton7Click(Sender: TObject);
var
Stream:TBlobStream;
Size:Integer;
begin
try
Stream:=TBlobStream.Create(Adodataset1foto,bmRead);
Image1.Picture.Bitmap.LoadFromStream(StreamOut);
{Stream:=TBlobStream.Create(Adodataset1Foto,bmRead);
SetLength(s, Stream.Size);
Stream.Read(s[1], Stream.Size);
Application.ProcessMessages;
size := Stream.Size;
StreamOut.Write(size, SizeOf(size));
StreamOut.Write(s[1], size);
Application.ProcessMessages;
StreamOut.SaveToFile(inttostr(Adodataset1Registro.Value));}

finally
Stream.Free;
end;
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Acces y TGraphic field

Publicado por Ernesto D'Spirito (706 intervenciones) el 27/02/2003 15:57:50
En teoría la lectura es así:

var
Stream: TBlobStream;
begin
Stream := TBlobStream.Create(Adodataset1foto,bmRead);
try
Image1.Picture.Bitmap.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

Y la escritura es al revés:

var
Stream: TBlobStream;
begin
Stream := TBlobStream.Create(Adodataset1foto,bmWrite);
try
Image1.Picture.Bitmap.SaveToStream(Stream);
finally
Stream.Free;
end;
end;

Nota que para la escritura el Dataset tiene que estar en modo
de edición.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acces y TGraphic field

Publicado por BigLuis (463 intervenciones) el 27/02/2003 20:24:28
Asi es como lo intento implementar pero me da un error en el Stream.Probablemente sea porque las imagenes son objetos Ole.Seguiré intentandolo y mas adelante volveré a formular la pregunta(si no lo he solucionado) con mas datos de los errores.Gracias de todas formas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acces y TGraphic field

Publicado por Ernesto D'Spirito (706 intervenciones) el 27/02/2003 21:23:47
Ah, OK, si las imágenes no fueron guardadas desde Delphi sino por ejemplo desde el mismo Access, entonces los datos de la imagen tienen una cabecera con información OLE. Encontrarás como leer esas imágenes siguiendo este enlace: http://delphi.about.com/library/weekly/aa030601d.htm

¿Cómo guardar? Supongo que servirá mantener la cabecera existente y guardar la nueva imagen en el mismo formato, pero a decir verdad nunca lo he probado...

¡Suerte!

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Acces y TGraphic field

Publicado por BigLuis (463 intervenciones) el 28/02/2003 19:36:51
Gracias Mil Ernesto.Creo que esto me va a ir de maravilla.Efectivamente son objetos OLE.Hoy mismo he estado rozando estos métodos pero al hacerlos mal claro todo eran otra vez errores.He probado hasta con el OleContainer.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar