Creo que no es correcto porque liberas el stream antes de devolverlo
Código Delphi
[-]function TServerMethods1.GetImagenBannerAsStream(ASQLQuery: TSQLQuery;
AIDBanner: Integer): TStream;
var
stream: TMemoryStream;
MiImagenDB: TImage;
begin
if (ASQLQuery.Active) then ASQLQuery.Close();
with ASQLQuery do
begin
ParamByName('id_articulo').AsInteger := AIDBanner;
Open;
end;
stream := TMemoryStream.Create; <== AQUI CREAS EL STREAM
MiImagenDB := TImage.Create(MiImagenDB);
try
MiImagenDB.Picture.LoadFromFile(qArtImagenIMAGEN.AsString);
MiImagenDB.Update;
MiImagenDB.Picture.SaveToStream(stream);
finally
MiImagenDB.Free;
Result := stream; <== AQUI DEVUELVES EL STREAM QUE SERA LIBREADO EN LA SIGUIENTE LINEA
stream.Free; <== AQUI LIBERAS EL STREAM
end;
ASQLQuery.Close;
end;
Código Delphi
[-]function TServerMethods1.GetImagenBannerAsStream(ASQLQuery: TSQLQuery;
AIDBanner: Integer): TStream;
var
MiImagenDB: TImage;
begin
if (ASQLQuery.Active) then ASQLQuery.Close();
with ASQLQuery do
begin
ParamByName('id_articulo').AsInteger := AIDBanner;
Open;
end;
Result := TMemoryStream.Create;
try
MiImagenDB := TImage.Create(MiImagenDB);
try
MiImagenDB.Picture.LoadFromFile(qArtImagenIMAGEN.AsString);
MiImagenDB.Update;
MiImagenDB.Picture.SaveToStream(Result);
finally
MiImagenDB.Free;
end;
except
Result.Free;
end;
ASQLQuery.Close;
end;
[...]
var
AStream: TMemoryStream;
begin
AStream := GetImagenBannerAsStream(Q, 1234);
try
finally
AStream.Free;
end;
end;