ImgStream: TMemoryStream;  // 存放 的流  ImgStream := TMemoryStream.Create;
  TBlobField(FieldByName('Image')).SaveToStream(ImgStream);
  ImgStream.SaveToFile('C:\IMG.PPP');
  ImgStream.Free;
为什么我保存的文件只有32K呀?我把BDE的BLOB SIZE的大小调到很大,
但是文件的大小最大资源604K??WHY??狂郁闷呀?????

解决方案 »

  1.   

    通常情况下,text、ntext 或 image 字符串是存储在数据行外的大型(可达 2GB)字符或二进制字符串。数据行只包括一个 16 字节的文本指针,该指针指向一个树的根节点,该树由映射存储串片段的页的内部指针构成。使用 Microsoft SQL Server,可将小型到中型的 text、ntext 和 image 值存储在一个数据行中,从而提高访问这些值的查询速度。当 text、ntext 或 image 串被存储在数据行时,SQL Server 就无须访问单独的页或页的集合来读写这些串。这使得读写 text、ntext 或 image 这些行中的串就象读写 varchar、nvarchar 或 varbinary 串一样快。为了在数据行中存储 text、ntext 或 image 字符串,必须使用 sp_tableoption 存储过程启动 text in row 选项。sp_tableoption N'MyTable', 'text in row', 'ON'可以为在数据行中存储的 text、ntext 和 image 字符串指定一个从 24 到 7000 字节的最大长度(可选):sp_tableoption N'MyTable', 'text in row', '1000'如果指定的是"ON"而不是一个特定的限度,则此限度的默认值为 256 字节。这个默认值提供大部分的性能收益:这个值足够大,可以保证小型字符串和根文本指针存储在行中;但又不是过大,以致将每页的行减少得太多,从而影响了性能。尽管在通常情况下,不应将此值设为低于 72,但也不应把此值设得过高,特别是对那些大多数语句都不引用 text、ntext 和 image 列的表格或者具有多个 text、ntext 和 image 列的表格。 也可以使用 sp_tableoption 关闭此选项,这可以通过指定"OFF" 或 0 选项值来实现。sp_tableoption N'MyTable', 'text in row', 'OFF'
      

  2.   

    为什么,BDE不能保存大的文件吗?这个应该不是主要原因吧?
      

  3.   

    楼主的问题所在应该是ImgStream.SaveToFile之前没有ImgStream.Seek(0, 0);
    不过TBlobField可以直接存取文件了,中间不需要再经过TMemoryStream了,直接这样既可:
    TBlobField(DataSet1.FieldByName('Image')).SaveToFile('C:\IMG.PPP');
      

  4.   

    TBlobField(DataSet1.FieldByName('Image')).LoadFromFile('C:\IMG.PPP');