ORACLE中存取BMP图片是很比较简单的,而且方法也有不只一种,
可以通过image.picture.bitmap.loadfromfile(filename)和stream的方法
用stream的方法可以这样:
Stream:=FDataLink.DataSet.CreateBlobStream(FDataLink.Field,bmReadWrite);
      try
        bmp.SaveToStream(stream); //save to database
      finally
        stream.Free;
      end;
这样是可行的,但你这里也只能存BMP图片(我试过),在程序中我有一个TDBimage控件,请问如何能将TDBimage中的jpeg图片存到ORACLE数据库中,并能从数据库中读取出来,我试过了下面的方法来存取JPEG图片,
TDBimage.picture.graphic.savetostream(stream)
TDBIMAGE.picture.graphic.loadtostream(stream)
保存成功,但从数据库load时却报错说地址访问出错,
Access violation at address 0044BF25 in module 'jsjglxt.ext' .
Read of address FFFFFFFF.
到底ORACLE能否存取JPEG图片,DELPHI程序中又怎样存取?
希望能得到各位高手的帮助。

解决方案 »

  1.   

    ORACLE什么都能村,可能你的代码有问题。
    TDBimage1.savetostream(stream);
    TBLobField(adoquery1.fieldbyname("blob")).loadFromstream(stream);
    ///////////////
    TBLobField(adoquery1.fieldbyname("blob")).savetostream(stream);
    TDBimage1.loadfromstream(stream);
      

  2.   

    存到数据库
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    pjpg.free;
    end;
    从数据库取出
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pic:=TMemoryStream.Create;
    TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
    pic.positon:=0;
    pjpeg.LoadFromStream(pic);
    image.graphi.bmp.assign(pjpeg);
    end;end;