我想做一个C/S结构的系统,需要在客户端望服务器中ORACLE数据库里存取图片(JPG和BMP格式的),看了一些资料说是用BLOB,没有看明白,还请高手指点。先谢谢大家。

解决方案 »

  1.   

    数据库中存放图片的字段类型为blob
    var
        MS_JpegStream:TMemoryStream;
        M_BitMap:TBitMap;
        M_Jpeg:TJpegImage;
    procedure TinsertForm.buttonSelectClick(Sender: TObject);
    var
    filename:string;
    begin
    image1.Picture.LoadFromFile('');
    if OpenDialog1.Execute then
    begin        filename:=extractfileext(OpenDialog1.FileName);        image1.Picture.LoadFromFile(OpenDialog1.FileName);        
            MS_JpegStream:=TMemoryStream.Create;
            M_BitMap:=TBitMap.Create;
            M_Jpeg:=TJpegImage.Create;
        if (filename='.bmp') or (filename='.BMP') then
          begin
            M_BitMap.LoadFromFile(OpenDialog1.FileName);
            M_Jpeg.Compress;
            M_Jpeg.Assign(M_BitMap);
          end
        else if (filename='.jpg') or (filename='.JPG') then
          begin
            M_Jpeg.LoadFromFile(OpenDialog1.FileName);
          end;
        M_Jpeg.SaveToStream(MS_JpegStream);
    end;
    end;procedure TinsertForm.btnSaveClick(Sender: TObject);
    begin
    //插入新的记录
    try
    adoquery1.close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into hm_jc_dxal(tupian)values');
    adoquery1.SQL.Add('(:tupian)');
    adoquery1.Parameters.ParamByName('tupian').LoadFromStream(MS_JpegStream,ftblob);
    adoquery1.ExecSQL;ShowMessage('资料成功保存!');
    MS_JpegStream.Free;
    M_BitMap.Free;
    M_Jpeg.Free;
    except
    ShowMessage('资料保存失败!!');
    end;
    end;
    end;
      

  2.   

    TblobField(Query1.FieldbyName('photo')).loadfromfile(opendialog.filename);
      

  3.   

    那么怎么从数据库中把图片读出来显示在IMAGE控件中呢,还请指教了。
      

  4.   

    还是用流的方式啊,把它再装换成图片写到IMAGE中