我用的存储过程做的插入动作.
字段Photo,类型为Image
保存的代码:
    PhotoStream := TMemoryStream.Create;
    Try
      gePhoto.Picture.Graphic.SaveToStream(PhotoStream);
      PhotoStream.Position := 0;
      if PhotoStream.Size >0 then
         Parameters.ParamByName('@Photo').LoadFromStream(PhotoStream,ftBlob)
      else
         Parameters.ParamByName('@Photo').Value := '';
    finally
        PhotoStream.Free;
    end;读取的代码:
    PhotoStream := TMemoryStream.Create;
    try
      TBlobField(Dmform.qryUsers.FieldByName('Photo')).SaveToStream(PhotoStream);
      if PhotoStream.Size >0 then
      begin
        PhotoStream.Position := 0;
        try
          gePhoto.Picture.Graphic.LoadFromStream(PhotoStream);   //在这里老爱报错。
        except 
        end;
      end else
        gePhoto.Picture.Graphic := nil;
    Finally
      PhotoStream.Free;
    end;
保存是可以成功的,但读取的时候报错。报错在gePhoto.Picture.Graphic.LoadFromStream(PhotoStream)这句话这儿。
哪位老大帮助看看我的代码有什么问题?都整了半天了,

解决方案 »

  1.   

    我认为需要判断,因为image组件是极其低能的(至少我个人认为),它从不分析文件结构的,比如你一个bmp文件,将扩展名改成jpg再让image去载入的话就会报错....
    大概思路上有两种:一种是保存同时已知的文件扩展名保存,然后根据不同类型,读取时调用不同的类,比如bmp是tbitmap等.
    第二种就是摸索的方法了,用不同的类分别去尝试读取,用try except,成功就退出。
      

  2.   

    文件都是保存的.jpg类型。不存在存的是.jpg,取的是bmp文件这一说。
      

  3.   

    那么你可以用uses jpeg;
    然后先用jpeg.LoadFromStream读取,再用image.picture.assign(jpeg);之后释放就行了