Ver Mensaje Individual
  #1  
Antiguo 19-07-2005
jvalles jvalles is offline
Miembro
 
Registrado: mar 2005
Posts: 16
Reputación: 0
jvalles Va por buen camino
que hago mal?

hola estoy intentando cargar una imagen de un campo blob desde un dataset pero me da error (access violation at adress....),
¿alguien me puede decir que hago mal?

esta es la linea que falla:
TBlobField(datasource1.DataSet.FieldByName('logo')).SaveToStream(Stream);

este es el procedure que falla:
procedure TForm1.muestraimagen();
var
Stream: TMemoryStream;
Jpg: TJpegImage;
GraphType: TGraphType;
begin
Jpg := nil;
Stream := nil;
try
Stream := TMemoryStream.Create;
TBlobField(datasource1.DataSet.FieldByName('logo')).SaveToStream(Stream);
if Stream.Size > 0 then begin
Stream.Position := 0;
Stream.Read(GraphType, 1);
case GraphType of
gtBitmap: Image1.Picture.Bitmap.LoadFromStream(Stream);
gtIcon: Image1.Picture.Icon.LoadFromStream(Stream);
gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream);
gtJpeg: begin
Jpg := TJpegImage.Create;
Jpg.LoadFromStream(Stream);
Image1.Picture.Assign(Jpg);
end else
Image1.Picture.Assign(nil);
end;
end else
Image1.Picture.Assign(nil);
except
on e:exception do begin
Image1.Picture.Assign(nil);
showmessage(e.Message);
end
end;
jpg.Free;
Stream.Free;
end;

y este es el original que no falla (lo he probado):
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
var
Stream: TMemoryStream;
Jpg: TJpegImage;
GraphType: TGraphType;
begin
Jpg := nil;
Stream := nil;
try
Stream := TMemoryStream.Create;
TBlobField(Table1.FieldByName('Graph')).SaveToStream(Stream);
if Stream.Size > 0 then begin
Stream.Position := 0;
Stream.Read(GraphType, 1);
case GraphType of
gtBitmap: Image1.Picture.Bitmap.LoadFromStream(Stream);
gtIcon: Image1.Picture.Icon.LoadFromStream(Stream);
gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream);
gtJpeg: begin
Jpg := TJpegImage.Create;
Jpg.LoadFromStream(Stream);
Image1.Picture.Assign(Jpg);
end else
Image1.Picture.Assign(nil);
end;
end else
Image1.Picture.Assign(nil);
except
Image1.Picture.Assign(nil);
end;
jpg.Free;
Stream.Free;
end;



La cosa es que en el original se usa un TTABLE para acceder a la base de datos y en mi programa se asigna un dataset (procedente de un servicio web .net) a un datasource, los datos se muestran correctamente en un DBGRID, pero no consigo ver la imagen que hay en el campo LOGO (blob).

muchas gracias!!!
Responder Con Cita