用TBlobStream来存储
sql语句好像不能把二进制数据存入数据苦

解决方案 »

  1.   

    UPDATE更改图片字段读:
    TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
    TBlobStream * pmem=new TBlobStream(pField,bmRead);
    pmem->Seek(0,soFromBeginning);
    Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
    pBitmap->LoadFromStream(pmem);
    Image1->Picture->Assign(pBitmap);
    delete pBitmap;
    delete pmem;
    写:
    TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
    TBlobStream * pmem=new TBlobStream(pField,bmWrite);
    pmem->Seek(0,soFromBeginning);
    Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
    pBitmap->Assign(Image1->Picture->Graphic);
    pBitmap->SaveToStream(pmem);
    delete pBitmap;
    delete pmem;注意:一定要用此方法进行读写,因为实际上它是以二进制流的方式存入数据库!
      

  2.   

    这个问题并不复杂。不过要写,我怕写不清楚。写出你的Mail,我发一个片断例程给你。
      

  3.   

    to chechy(chechy)
    收到,研究中,请稍候。
      

  4.   

    这个是很基本的东西,也有很多种方法去解决,我说一个简单的吧
    如果非要把图片传过去,然后在中间层实施入库,你必须把图片以
    流的方式传到中间层,在中间层把收到的数据流存入数据库,实际
    上这样的做法是很烦的,除非你在中间层要对传过来的图片进行处
    理,否则大可不必这样做。
      我的做法是,直接存入图片到TDBimage中,然后用TClientDataSet
    的ApplyUpdates()方法更新数据库,其余的事就让ClientDataSet
    自己去解决吧。
    具体程序如下:
    procedure TRrecordForm.BtnImageClick(Sender: TObject);
    var
      B:TBitmap;
      J:TJpegImage;
    begin
      if OpenDialog.Execute then
        if Pos( '.jpg', LowerCase( OpenDialog.FileName ) ) > 0 then
        begin
          J := TJpegImage.Create;
          B := TBitmap.Create;
          try
            Screen.Cursor := crHourGlass;
            J.LoadFromFile( OpenDialog.FileName );
            B.Assign( J );
            ClientDataSet.Edit;
            TBlobField( ClientDataSet.FieldByName( '照片' ) ).Assign( B );
            ClientDataSet.Post;
          finally
            Screen.Cursor := crArrow;
            J.Free;
            B.Free;
          end;
        end else
        begin
          ClientDataSet.Edit;
          TBlobField( ClientDataSet.FieldByName( '照片' ) ).LoadFromFile( Opd.FileName );
          DbImage1.LoadPicture;
          ClientDataSet.Post;
        end;
    end;事实上,这个程序首先判断是否图片为JPG格式,是的话先转成BMP格式,
    (当然你也可以不转成BMP格式,而是直接以流方式把JPG存入数据库,
      但这样一来,读取也成了麻烦的事情,所以,如果图片字段不是很多
      很大的话,还是用BMP存入来的方便)
      

  5.   

    thanks,能不能给我发一个
    email:[email protected]
      

  6.   

    thanks,能不能给我发一个
    email: 
      [email protected]
      

  7.   

    xuejinlong 你猜我会不会 --jh
      

  8.   

    寄这个地方问一个草鸟问题
    -我要做一个公司员工上班打卡的系统
    能不能给我说一下思路,如果有资料的话也请告诉我一下,谢过各位了!
    [email protected]
      

  9.   

    jinlong 你是不是在威海工作,呵呵,我早就调查你了,哈哈哈
      

  10.   

    to : Clus(叶不归) 
       为什么我的图片插入后,再选出来上半部分是黑的???
       我看了一下库里的值前半部分都是000.
       怎么会事。
       如果这个你也解决了那分可就.............
       嘿嘿嘿............
      

  11.   

    你的图片太大了,肯定超过了32k,所以需要在BDE ALIAS中将BLOB SIZE调的足够大。
      

  12.   

    Delphi安装后BDE 的可用内存是2M,把它加大,修改BDE Adminstrator ->
    Configuration ->system->init->sharedmemsize 为20480,20M!
      

  13.   

    我的做法是:
    第一步:将图片文件上传到应用服务器。可以用FTP、WinSocket、NMStrm。
    第二步:服务器端的一个过程实现写库,用LoadFromFile将该文件存入数据库。
    就像发Email的实现方法。
      

  14.   

    to xuejinlong(垃圾):  我说过了,“如果图片字段不是很多很大的话,还是用BMP存入来的方便”
    现在你的图片大可不能怪我的程序有问题。
    BDE 图片存取大小范围是<=32K--1M,默认是32K,如果大于1M的话,请修改
    BDE的BLOB Size值(虽然说最大是1M,但是你要设10M,好像也没问题,这
    个,嘿嘿...)
      

  15.   

    我的原则:有分大家赚,当然我没用到的回答当然不给分。不过 Except(枫爱) 除外。
    因为他是我朋友,没有分用了,到我这来要饭你说能不给点吗??哈哈哈………………