to dawnsong:
谢谢你的答复,你的方法可行。
我的原来的问题是因为原来sql数据库里的500张照片太大(每张约1M左右),在一张A4上纸张上用Reportmachine打印36张照片时出现奇慢死机,怀疑是资源耗尽。只好将500张读出后缩小10%后再存入,读出-缩小-更新,拟采用流方式进行。
现在程序出错:可以再帮我看看吗?再次感谢!
procedure TForm1.Button4Click(Sender: TObject);
var
jpgSource, jpgDest: TJPEGImage;
bmp: TBitmap;
readimgStream, writeimgStream: Tadoblobstream;
begin
adoc.Open;
with sql do
begin
close;
sql.clear;
sql.Add('select * from rs_stainfo');
open;
end;
jpgSource := TJPEGImage.Create;
jpgDest := TJPEGImage.Create;
bmp := TBitmap.Create;
sql.First;
while not sql.Eof do
begin
readimgStream := Tadoblobstream.Create(sql.fieldbyname('pic') as BlobField, bmread);
readimgStream.Position := 0;
try
jpgSource.LoadFromStream(readimgStream);
bmp.Width := jpgSource.Width div 10;
bmp.Height := jpgSource.Height div 10;
jpgSource.DIBNeeded;
bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpgSource);
jpgDest.Assign(bmp);
sql.Edit;
writeimgStream := Tadoblobstream.Create(sql.fieldbyname('pic') as TBlobField, bmwrite);
writeimgStream.Position := 0;
jpgDest.SaveToStream(writeimgstream);
writeimgstream.LoadFromStream(writeimgstream);
sql.Post;
finally
bmp.free;
jpgDest.free;
jpgSource.free;
readimgStream.free;
writeimgstream.free;//提示数据集不在编辑模式,按F8后提示堆栈溢出
end;
sql.Next;
end;
end;