var
MyStream:Tmemorystream;
begin
MyStream:=Tmemorystream.Create;
MyStream.Position:=0;
TBlobField(ADOQuery.FieldByName('IMG')).SaveToStream(MyStream);
MyStream.SaveToFile(ExtractFilePath(Application.ExeName)+'image\cai.jpg');Image.Picture.loadformfile(ExtractFilePath(Application.ExeName)+'image\cai.jpg');MyStream.free;end; 

解决方案 »

  1.   

    应该是这样的
    var
    MyStream:Tmemorystream;
    MyJPEG:TJpegImage;
    begin
    MyStream:=Tmemorystream.Create;
    MyJPEG:=TJpegImage.Create;
    TBlobField(ADOQuery.FieldByName('IMG')).SaveToStream(MyStream);MyStream.Position:=0;
    MyJPEG.LoadFromStream(MyStream);#######
    Image.Picture.Graphic.Assign(MyJPEG);
    end;
      

  2.   

    对了,上面的代码没有释放MyJPEG和MyStream;在end;前加
    MyJPEG.Free;
    MyStream.Free;
      

  3.   

    to zx_wang(wzx) ,我照你的方法试了,还是出错,提示出错:
    EJPEG,JPEG ERRor #52,
      

  4.   

    就是DBimage也是这个问题,所以才不用!
      

  5.   

    我认为大家的方法原理上都没有问题。
    大家的方法我都试过了,我认为都很好,不过还是不能显示图片,
    据我调试的结果,尤其是在my_first(海浪) 提供的方法中,我看了程序中保存的文件,文件都生成了,不过,不管是bmp,还是jpg,都不能看。我认为问题的症结是读取的图片格式是错误的。
    格式的问题我估计是出在数据库上,我的数据库用的是access2000.图片本身是没有问题的,可能是数据库对图片作了处理。
    请问有没有解决的途径?
    好像access2000给图片文件前加了一些控制字节,不知是否确有其事?
      

  6.   

    不会吧! 我上面的那段代码在,在SQL SERVER7中调试通过。保存在磁盘的文件, 你通过浏览器可以打开吗? 如果可以那就不是数据的问题了。
      

  7.   

    acdsee浏览器打开,全是黑的。
      

  8.   

    再有,如果SQL server数据库中的字段中所存图片只能为bmp和jpg两种格式,如何在读取的时候加以判断?
      

  9.   

    将存在数据库重的图片要现实的时候另存到计算机的硬盘上,然后指定目录让TImage去显示它去,不就OK了嘛!
      

  10.   

    你是不是同一个表里同一字段即存了.bmp, 又存了.jpg格式的文件
      

  11.   

    加一个dbimage并设他的visible:=false;
    image1.picture:=dbimage1.picture;
    当然dbimage1要与数据库相结了
      

  12.   

    当然了,我怎能要求用户只是用一种图片格式。
    如果只是bmp 和jpg两种,如何判别字段内容的格式?
    在企业管理器或者其它地方如何指定sql server数据库表中的image字段内容?
    也就是如何将图片存入sql server数据库?
      

  13.   

    您的问题,我也遇到过,应该就是读取数据错误,也就是文件的格式变了!
    我读取的是MPEG文件,可是出现了和您同样的错误,无法播放。
      

  14.   

    问题的症结现在是比较清楚了,现在的问题:是如果image类型的字段中的图片类型不是单一的bmp,或者jpg文件,如何在取得数据库中的字段数据的时候,判断其
    文件类型?
    再有,如何在可视化环境中,在image类型字段中存入图片?
      

  15.   

    如果用户要求两种格式的话, 你可以这么种,在调图图片时判断扩展名是。jpg,还是.bmp, 如果是.bmp你把它转换为.jpg格式, 然后再存入数据库,
    如果是.jpg格式,你就直接存储就行了。
    要说明一点是: 数据库的一个图象字段只能存储同一类型的格式, 如果你第一张图片存的是 .jpg,那么这个字段必须是存.jpg格式的图片,在读出来的时候, 你用流的方式把图片保存到文件,然后再读取就行了。
      

  16.   

    如果你用的是acess数据库,那就清除了。我以前也碰到过。acess中的图片什么的是用ole方式存储的(它没有直接的blob型字段),它在原始数据前加了一些控制字节,好像是72个(73个?具体数字忘了,可用16进制编辑器看一下生成的文件内容确定)这样你在load的时候把postion由0改为72或73就行了!!
      

  17.   

    这个行不?procedure TForm4.Button1Click(Sender: TObject);
    begin
    if radiogroup1.ItemIndex=0 then
      begin
      table1.indexname:='';
      end
    else
      begin
      table1.indexname:='comp';
      end;
    table1.findnearest([edit1.text]);
    //为什么要用下面的方法来从一个paradox表的BLOB字段读出JPEG文件!
    if TBlobField(Table1.FieldbyName('photo')).isnull=false then
      begin
        tmpg:=TBlobStream.Create(TBlobField(Table1.FieldbyName('photo')), bmRead);
        jpg:= TJPEGImage.Create;
        jpg.LoadFromStream(tmpg);
        Image1.Picture.Assign(jpg);
        tmpg.free;
        jpg.free;
      end
    else
      image1.picture:=nil;
    end;
      

  18.   

    判断BMP还是JPEG,小菜一碟。如果前两个字节是二进制42 4D,那么是Bmp
    文件;如果二进制是FF D8,就是JPEG。
      

  19.   

    to jishiping(JSP),有何相关函数?
      

  20.   

    1.Image.Picture.Graphic.Assign(MyJPEG);-----JPG文件
    2.Image.Picture.Bitmap.Assign(MyBmp); ------Bmp文件
    建议在存盘时将文件名或类型保存进去
      

  21.   

    to : luzhou(卢周) ,我本来以为也是“用dbimage控件最简单了。 ”,可是不行。
     
     
      

  22.   

    我在Paradox中试过DBImage是没问题的,Jpg和bmp都可以;SQLServer有什么不同吗?