可以,blob是以二进制形式存放大量数据

解决方案 »

  1.   

    是吗?那我 用loadfromfile怎么总是出错?
      

  2.   


    var
      B:TBlobField;
    begin
      if OpenDialog1.Execute then
      begin
        Table1.Edit;
        B:=TBlobField(Table1.Fields[1]);
        B.LoadFromFile(Opendialog1.FileName);
        Table1.Post;
        Application.Messagebox('ok','信息',MB_ICONINFORMATION);
      end;
    end;
      

  3.   

    可以存放这些文件,理论上应该可以存放一般大小的视频文件你用下面这个程序试一试:
    读入数据库:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
    begin
      OpenDialog1.Filter:=avi文件(*.avi)¦*.avi';{从对话窗选择文件}
      if OpenDialog1.Execute then
      begin
        MyFile:=TFileStream.Create(OpenDialog1.FileName ,fmOpenRead);
        with table2  do  {‘table2’为含BLOB字段的表名}
        begin
          //Open;
          Edit;      Stream := TBlobStream.Create(Fieldbyname('content')as TBlobField, bmWrite);{‘content’为BLOB字段名}
          MemSize := MyFile.Size;
          Inc(MemSize); {Make room for the  buffer's nullterminator.}
          Buffer := AllocMem(MemSize);      {Allocate thememory.}
          try
            Stream.Seek(0, soFromBeginning);  {Seek 0 bytesfrom the stream's end point}
            MyFile.Read(Buffer^,MemSize);
            Stream.Write(Buffer^,MemSize);
          finally
            MyFile.Free;
            Stream.Free;
          end;
              try
                Post;
              except
                on E: EDatabaseError do
          if application.HandleException(E) <> 0 then
                            exit
            else
            raise;
              end;
        end;
        end;
    end;
    BLOB字段我在sql server7中用的是image,我试着用text好像出错,我一直找不到原因
    从数据库中读出就不用我说了吧?
      

  4.   

    TBlobField(Table1.FieldByName('blob')).LoadFromFile(...);
    TBlobField(Table1.FieldByName('blob')).Assign(...);
    请看帮助‘TBlobField’。
      

  5.   

    to: wljcr(寻风) 
    sql server7 中的Text字段只能用来存放AcsII码的数据的,要存放二进制码的数据就要用image
    你可以往Text中存放一个很大的文本文件,但是就不能存其他二进制的文件的!
      

  6.   

    to firewing(可乐):
    谢谢,俺以前不知道,谢谢指点迷津,可是我不能给你加分噢:)
      

  7.   

    数据库 sqlserver7 和 access2000
    字段 sqlserver :image
         access2000:ole字段
      

  8.   

    我用BLOB字段存放.jpg照片,不错!
    用户选到一个.bmp或.jpg,如果是.bmp就转成.jpg,
    存放到库中
      

  9.   

    可是我怎么发现 只能存bmp其他的要转成bmp形式的呀
      

  10.   

    任意内容都可存放,jpg当然不例外呀,它不管什么格式,
    只知道是二进制流
      

  11.   

    to whatname 
    你具体是怎么做的?我连mp3都存进去了!怎么会不行呢?
      

  12.   

    TBlobField是以流的形式存放的,所以不管什么格式。另外,BDE配置Configuration->Drivers->Native->MSSQL中
    BLOB SIZE、BLOBS TO CACHE值设大一些(缺省32、64),例如4096、8192
      

  13.   

    BLOB什么都可放,当然可以原样还原出来,我把用户的照片一律转成.jpg
    存放,在TADODataSet.AfterScroll()事件中将照片显示在TImage中,
    都成了,还有什么可讲的
      

  14.   

    BCB(:)) 那对于gif图 这样的 办法 好象就不灵了吧
      

  15.   

    什么东西都可放到BLOB里,至于还原后怎样处理它是另外一回事
      

  16.   

    那你 说说怎么放 gif图
      

  17.   

    var
      Table1: TTable;
    bagin
      ...
      // 倒入到数据库的表中
      Table1.Insert;// 或者Table1.Edit;
      // xxx字段为Blob字段,C:\Windows\xxx.xxx为任意文件
      (Table1.FieldByName('xxx') as TBlobField).LoadFromFile('C:\Windows\xxx.xxx');
      Table1.Post;
      ...
      // 从数据库表中把数据倒入到文件
      (Table1.FieldByName('xxx') as TBlobField).SaveToFile('C:\Windows\xxx.xxx');
      ...
    end; 
      

  18.   

    TO whatname() : 那你 说说怎么放 gif图  
    和Jpg有区别吗?Jpg怎么存,Gif也还怎么存。
      

  19.   

    VictorG() 
    你确定这样的可以吗?我是说 你实际中 这样用过吗?
    你用的库是什么 ?对应的blob字段是什么类型?
      

  20.   

    Muf(沐枫) 我曾经也遇到过这样的 问题 用的是 access 库  类型是ole
    但是 确实存不进去 
      

  21.   

    1.SQL Server(最近刚用,no problem)2.dbase or paradox(具体哪个想不起来了,但我想都可以)
      

  22.   

    access应该不行吧 在sqlserver中用的是 image类型的字段?
      

  23.   

    access中我没试过
    在sqlserver中用的是 image类型的字段。
      

  24.   

    TFileStream *fs=new TFileStream("xxx.gif",fmOpenRead);
    TField *zd=ADODataSet1->FieldByName("照片图像");
    ADODataSet1->Edit();
    TStream *bs=ADODataSet1->CreateBlobStream(zd,bmReadWrite);
    bs->Position=0;
    fs->Position=0;
    bs->CopyFrom(fs,fs->Size);    
    ADODataSet1->Post();
    delete bs;
    delete fs;
      

  25.   

    //改写自BCB(:))的bcb程序
    var
      fs: TFileStream;
      zd: TField;
      bs: TStream;
    begin
      fs:= TFileStream.Create("xxx.gif", fmOpenRead);    
      zd:= ADODataSet1.FieldByName("照片图像");
      ADODataSet1.Edit;
      bs:= ADODataSet1.CreateBlobStream(zd, bmReadWrite);
      bs.Position:= 0;
      fs.Position:= 0;
      bs.CopyFrom(fs, fs.Size);    
      ADODataSet1.Post;
      bs.Free;
      fs.Free;
    end;
      

  26.   

    VictorG()你对上面的这段程序测试过了 没有 ?好象不行吧 
      

  27.   

    BCB(:))的程序我没试过
    上面我的程序无有问题
      

  28.   

    呵呵 没有试过 就不能说没有问题 :)我在你的基础上改动一点点 就可以了ADODataSet1.FieldByName("照片图像").loadfromstream(fs)其余都省了