为了降低网络负担,需要在SQL Server库中存取jpeg文件,目前我采用如下方法实现了存放:
var
  MS_JpegStream:TMemoryStream;
  M_Jpeg:TJpegImage;
begin
  MS_JpegStream:=TMemoryStream.Create;
  M_Jpeg:=TJpegImage.Create;
  M_Jpeg.LoadFromFile('e:\test.jpg');
  M_Jpeg.SaveToStream(MS_JpegStream);
  with Query1 do
    begin
        close;
        sql.clear;
        sql.Add('insert into table1(lan1,tq_image) values 
:lan,:image)');
        query1.ParamByName('lan').Value:='vf';
        query1.ParamByName('image').LoadFromStream(MS_JpegStream,ftblob);
        ExecSQL;
    end;
  MS_JpegStream.Free;
  M_BitMap.Free;
  M_Jpeg.Free;
但是却没有找到正确的方法把该图片读取出来并在IMAGE组建中显示出来,特别是把存入表中的数据重新转换成stream类型数据。请问各位大侠该怎么做?(不一定局限于我这种方法,只要能解决JPEG文件在SQL Server中的存放问题也行)

解决方案 »

  1.   

    为什么不直接query1.ParamByName('image').loadfromfile('e:\test.jpg')??
      

  2.   

    mrfanghansheng(***Rocket***):
       因为我写的是c/s的程序,上传图片是在一个客户端进行,下载图片在另外一些客户端进行的,所以不能直接调用本地的图片。
      

  3.   


    同樣問題:
    老兄如果此問題解決請轉發: [email protected]
      

  4.   

    刚做完的项目。我是用Image控件先把JPG文件载入,然后存成剪贴板格式,再载入到DBImage中,POST以后就保存到SQL Server里去啦,读取时也没有问题!该给分了吧!!!procedure Tmainfrm.SpeedButton6Click(Sender: TObject);
    var
    ext:String;
    AFormat:Word;
    AData:THandle;
    APalette: HPALETTE;
    begin
    if opd.Execute then
       begin
         logofrm.ADOQuery1.Edit;
         ext := uppercase(ExtractFileExt(opd.filename));
         if (ext = '.BMP') then
           DBimage1.picture.loadfromfile(opd.filename)
         else if (ext = '.JPG') then
             begin
                Image1.picture.LoadFromFile(opd.filename);
                if Image1.picture <> NIL then
                 begin
                   Image1.picture.SaveToClipboardFormat(AFormat, AData,APalette);
                   DBImage1.Picture.LoadFromClipboardFormat(AFormat, AData,APalette);
                 end;
             end;    
    end;end;
      

  5.   

    dancergoo(舞者)兄:
        能给出读取库中图片的代码吗?解决问题以后一定给分。
      

  6.   

    Sql有image字段,然后你要用流存进去