保存img_vip图片进数据库  
with qry1 do
  begin
        Close;
        SQL.Clear;
        sql.Add('update VIP000 set PIC000=:PIC000 where VIP000=:VIP000');
        img_vip.Picture.SaveToFile('c:\a.bmp');
        ParamByName('PIC000').LoadFromFile('c:\a.bmp',ftGraphic);
        ParamByName('VIP000').AsString:=edt_VIP.Text;
        ExecSQL;
  end;
提取图片到img_Vip上
TBlobField(qry_VipZl.FieldByName('PIC000')).SaveToFile('c:\a.bmp');
  img_vip.Picture.LoadFromFile('c:\a.bmp');
保存提取的图片都是损坏的,为什么?直接从磁盘打开图片会有‘源数据流被截断的提示’。

解决方案 »

  1.   

    看看是不是字段“PIC000”的尺寸太小了
      

  2.   

    图片太大了吧?Oracle的Blob字段使用BDE效果也不怎么样,换成ODAC组件吧,BDE限制Blob大小呢
      

  3.   

    错在这里啊
     sql.Add('update VIP000 set PIC000=:PIC000 where VIP000=:VIP000');还是将将文件先转换成内存流,再保存。
      

  4.   

    参考一下这个http://topic.csdn.net/u/20110620/17/e12ec2d2-9bcc-4b03-9849-ac035bc162bc.html
      

  5.   

    数据库是sqlserver,字段类型是imageprocedure TForm1.BitBtn1Click(Sender: TObject);
    var mStream:TMemoryStream;
        bmp:TBitmap;
    begin
      mStream:=TMemoryStream.Create;
      bmp:=TBitmap.Create;
      try
        bmp.LoadFromFile(OpenDialog1.FileName);
        bmp.SaveToStream(mStream);
        mStream.Position:=0;
        with ADOQuery1 do
        begin
          Edit;
          TBlobField(ADOQuery1.FieldByName('Pic')).LoadFromStream(mStream);
          Post;
        end;
      finally
        mStream.Free;
        bmp.Free;
      end;
    end;