使用BDE与SQL
控件有Query1,DBImage1,DataSource1
保存图片过程---
function TForm_editmould.SaveMPicture: boolean;
begin
  with Query1 do
  begin
    try
      if Active then close;
      sql.Text := 'insert into mouldpicture (mid,mcode,mpicture) values(:mid,:mcode,:mpicture)';
      Params[0].Value := 0;
      params[1].Value := PriMCode;//Primcode 图片的名称
      params[2].LoadFromFile(ffile,ftBlob);//ffile文件名及路径
      ExecSQL;
      Result := True;
    except
      Result := False;
    end;
  end;
显示图片
procedure TForm_editmould.GetPicture;
begin
  try
    if Query1.Active then Query1.Close;
    Query1.SQL.Text := 'select mpicture from mouldpicture where mcode = ''' + PriMCode + #39; //Primcode 图片的名称
    query1.Open;
    DBImage1.DataField := 'mpicture';
  except
    showmessage('不能读取模具图片!',0);
    exit;
  end;
end;
我保存的图片格式是‘jpg'
显示的时候只有一部分清楚,这是什么原因,请各位高手指教!

解决方案 »

  1.   

    没用过这种方法
    以前用的是TImage和access来弄的,不过没发生什么问题。在uses里jpeg了没??
      

  2.   

    To:xjjrocker
    我将BDE的BLOB SIZE设置为4096也不行
    To: qzmp_sc
    我试过使用TMemoryStream和TJpegImage在显示图片时会报错。
    我的代码是这样的
    procedure TForm_editmould.GetPicture;
    var
      aJpeg : TJpegImage;
      aMS : TMemoryStream;
    begin
      try
        if Query1.Active then Query1.Close;
        Query1.SQL.Text := 'select mpicture from mouldpicture where mcode = ''' + PriMCode + #39; //Primcode 图片的名称
        query1.Open;
        if not Query1.isempty then
        begin
          aJpeg := TJpegImage.create;
          aMS := TmemoryStream.create;
          try
            TBlobField(Query1.FieldByName('mpicture')).savetostream(aMS);
            aMS.position := 0;
            aJpeg.loadfromstream(aMS);
            DBImage1.picture.bitmap.assign(ajpeg);
          finally
            ams.free;
            aJpeg.free;
          end;  
        end;
        DBImage1.DataField := 'mpicture';
      except
        showmessage('不能读取模具图片!',0);
        exit;
      end;
    end;
    保存也是用流的方法。
      

  3.   

    bde对某些数据库的图像字段支持有些问题,如果是sqlserver,你可改用ADO试试
      

  4.   

    我找了些资料,发现大多数保存使用控件的Append,Edit,Post来进行操作,我按这种方法,可是图片字段的数据为空,不知道什么原因,请指正!
    我的代码如下:
    显示图片 :
    procedure TForm_editmould.GetPicture;
    begin
        try
          if Query1.Active then Query1.Close;
          Query1.SQL.Text := 'select * from mouldpicture where mcode = ''' + PriMCode + #39;
          query1.Open;
          img_Photo.DataField := 'mpicture';
        except
          showmess('不能读取模具图片!',0);
          exit;
        end;
    end;
    保存图片:
    function TForm_editmould.SaveMPicture: boolean;
    var
      IsAdd : boolean;
    begin
      PriMCode := trim(DBEdit1.Text);
      with Query1 do
      begin
        try
          if not Active then
          begin
            Sql.Text := 'SELECT * FROM mouldPicture WHERE mcode='+''''+PriMCode+'''';
            Open;
            Img_photo.DataField := 'mpicture';
          end;
          IsAdd := IsEmpty;
          if not (State in [dsInsert,dsEdit]) then
            if IsAdd then
              Append
            else
              Edit;
          FieldByName('mcode').AsString := Trim(PriMCode);
          post;
          Result := True;
        except
          Result := False;
        end;
      end;
    end;
      

  5.   

    自己写了个大概的,不过是用ADOTable做的,你看看吧:
    var
       mem : TStream;
       jpg : TJPEGImage;
    begin
       with ADOTable1 do
        begin
         Active:=True;
         mem := CreateBlobStream(FieldByName('Data'),bmRead);
         mem.Position:=0;
         jpg := TJpegImage.Create;
         jpg.LoadFromStream(mem);
         Image1.Picture.Assign(jpg);
         jpg.Free;
         mem.Free;
        end;
        ADOTable1.Active:=False;
    end;
      

  6.   

    我用ADOQuery控件能读出我使用BDE时所保存的图片显示也完整,为什么BDE的控件读出的图片不能完整,我将BDE引擎的BLOB SIZE 设成4096都不行,是BDE的原因吗?