我有若干个数据表,里面的一个字段设置为了二进制字段。
数据录入时使用菜单里的“插入”增加了若干多的OLE文档,如文本文档,图片,WORD等多种格式的文档。我怎么能把这些文档从数据表中批量保存到磁盘上呢?
我查了好多资料,据微软官方说这是不可以的,因为他们没有公布存放文件的格式。高手们,事实真的是这样吗?如果真是这样,我看来是玩完了。我在Delphi中用Olecontrainer来读取这个字段项的内容,结果Olecontrainer出错。
我强制把这个文档存到磁盘上,发现这个文档比原来的付加了很多信息。
不知道这些信息的格式是如果定义的??????惨啊!惨啊!惨啊!惨啊!惨啊!惨啊!惨啊!惨啊!惨啊!

解决方案 »

  1.   

    图片的  with adoQuery1 do
      begin
        SQL.Text := SQLStr;
        Close;
        Open;
          tempstream := TStringStream.Create('');
          tempjpeg := TJPEGImage.Create;
          try
            TBlobField(FieldByName('photo')).SaveToStream(tempstream);
            if tempstream.DataString <> '' then
            begin
              tempstream.Position := 0;
              tempjpeg := TJPEGImage.Create;
              tempjpeg.LoadFromStream(tempstream);
              image1.Picture.Bitmap.Assign(tempjpeg);
            end
            else
              image1.Picture.Assign(nil);
          finally
            tempstream.Free;
            tempjpeg.Free;
          end;
        end;
      end;
    end;
      

  2.   

    谢谢楼上的 jinjazz(近身剪(N-P攻略)) :
    现在的问题是ACCESS中对二进制的访问与我们通常用TBlobField去访问的形式不一样。
    比如说吧:
       我可以用Delphi在数据表中存入自己的文档,如文本文档,office文档,Jpg、BMp图等都是可以的。
       我想查看这些文档时,必须采用相反的方式把这些文档取到磁盘上的临时文件打开就可以了。
      对于Access数据表,采用Access工具本身就能插入一个对象,在Access中使用其菜单中的"插入"功能,能够很方便地存入自己的任意格式,当然双击这个字段项的记录就能够打开。这已经非常方便了。  事实远不是这么简单,在Access工具中插入若干多的对象后,数据异常地变地大,读取与访问速度都严重受到影响。 回过头来,我想把这些文档导出来存放到磁盘上。目前唯一能做到的是从Access工具中一个一个点开这些文档,然后另存为...
     这样是极不现实的,因为文档太多了,根本不可能用人工用去完成这项工作。我希望能过编程的方式把这些文档从Access数据表中分离出来。
     所以矛盾就出在这个地方,我使用普通的TbolbField方式取出的文档出现了以下问题:
     1、无法知道这个文档原来是什么格式的,更不知道原来文档是什么名称,如文本还是图片文档,因为什么格式的都有。
     2、即使知道这个格式,保存到磁盘上后,根本不是原来的文档,里面付加了很多其他信息。
     
     我现在急切地希望各位能帮我解决这一问题。