我用DELPHI,数据库用SQL SERVER2000,在进行数据录入时我将图片数据直接写入IMAGE字段,每次记录移动时自动读取并显示,一切正常,但就是运行速度非常缓慢,无法接受,请问这是出了什么问题,是不是数据库要进行优化,如何进行优化,还是DELPHI中的连接设置有问题而造成IMAGE类型的字段读取速度非常缓慢?我用了一个主表显示记录,用另一个子表通过主从关系连接主表,调用如下代码从子表中读取并显示图片.
记录有一千多条,每个记录的图片都是100K以下,我感到程序在打开窗体时好象要把数据库中整个表的内容都读到本机上,所以打开窗体时也很慢,请帮忙,代码如下:(代码在 adotable1.afterscroll中执行)
var
    picdata:Tadoblobstream;
    picread:Tjpegimage;begin
  picdata:=Tadoblobstream.Create(TBlobField(adotable1.FieldByName('文件')),bmread);
  picread:=Tjpegimage.Create;  
  picread.LoadFromStream(picdata);
  picdata.Position:=0;
  image1.Picture.Assign(picread);
end;

解决方案 »

  1.   

    把你的ADoTable1的CursorLocation属性设置为clUseServer再试试!代码没有问题!
      

  2.   

    因为ADOTABLE1设置了MASTERFIELD和MASTERSOURCE后无法将CURSORLOCATION设置为CLUSERSERVER,还有什么办法吗
      

  3.   

    如果只是显示,为什么不使用DBimage呢?你看看是不是速度能够快呢?
    直接用Datasource连上那个字段。
      

  4.   

    //看改成这样行不行?用内存流也许会加快点速度
    var
        picdata:TMemorystream;
        picread:Tjpegimage;begin
      picread:=Tjpegimage.Create;
      PicData:=TMemoryStream.Create;  
      (TBlobField(adotable1.FieldByName('文件'))).SaveToStream(PicData);
      picread.LoadFromStream(picdata);
      picdata.Position:=0;
      image1.Picture.Assign(picread);
      PicData.free;//释放流对象
      PicRead.free;//释放Image对象
    end;
      

  5.   

    虽然ADOTABLE1设置了MASTERFIELD和MASTERSOURCE后无法将CURSORLOCATION设置为CLUSERSERVER,但是它的主表是不是可以设置的呢?如果行,最好设上!还有,我看你的代码中没有释放流与TjpegImage的,是没有贴出来还是没有?如果没有的话,会不会是因为重复创建对象而不释放造成的呢?