我现在利用流文件从数据库中读取BLOB字段,如果有n个纪录,我想把这n个纪录都读到一个流文件中,也就是说读一次纪录就把他添加到MSFile中,直到读完为止。这个怎么做??

解决方案 »

  1.   

    m1.seek(m1.size,soFromBeginning);
    m1.copyfrom(m2,m2.size);
    m1.SaveToFile(dfile);
      

  2.   

    var
      msTemp:TMemoryStream;
      msContent:TMemoryStream;
    begin
      msTemp:=TMemoryStream.Create;
      msConent:=TMemoryStream.Create;  while not oSQL.eof do
        begin
          TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msTemp);
          msContent.CopyFrom(msTemp,msTemp.size);
          oSQL.next;
        end;
      msContent.saveToFile('c:\temp.dat');
      msContent.free;
      msTemp.free;
    end;
      

  3.   

    blueneo(深深的蓝) :好像不行啊!
    var
      msTemp:TMemoryStream;
      msContent:TMemoryStream;
    begin
      msTemp:=TMemoryStream.Create;
      msConent:=TMemoryStream.Create;  while not oSQL.eof do
        begin
          TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msTemp);
          msTemp.position:=0;
          msContent.CopyFrom(msTemp,msTemp.size);
          oSQL.next;
        end;
      OLE.LoadFrom(msContent);
      msContent.free;
      msTemp.free;
    end;
    结果在OLE中显示的只有第一个纪录的内容,其他的都没有,这是为什么?
      

  4.   

    先要把第一个流的指针移动到流尾,然后再把第二个流Copy到第一个流上面
      

  5.   

    这个应该是可以的,也许你需要把流指针指向结尾,如果不行的话就用WriteBuffer方法,这个方法会自动指向流的最后的。
      

  6.   

    var
      msTemp:TMemoryStream;
      msContent:TMemoryStream;
    begin
      msTemp:=TMemoryStream.Create;
      msConent:=TMemoryStream.Create;  while not oSQL.eof do
        begin
          TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msTemp);
          msTemp.position:=0;
          msContent.Position:=msContent.size;//添加了这句好像还是不行
          msContent.CopyFrom(msTemp,msTemp.size);
          oSQL.next;
        end;
      OLE.LoadFrom(msContent);
      msContent.free;
      msTemp.free;
    end;
    我左看右看,好像是可行的,怎么还是只有第一条,妈的!!我要砸了电脑,你们不要拦着我!!!
      

  7.   

    只需一个MemoryStream就OK了。且看:var
      //msTemp:TMemoryStream;
      msContent:TMemoryStream;
    begin
      //msTemp:=TMemoryStream.Create;
      msConent:=TMemoryStream.Create;
      //创建后msContent的postion为0,即指向头  oSQL.First;
     try
      while not oSQL.eof do
        begin
          //TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msTemp);
          TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msContent);
          //处理完这句后,msContent的position指向末尾了,下次只需往下写就可以了。
          //msTemp.position:=0;
          //msContent.Position:=msContent.size;
          //msContent.CopyFrom(msTemp,msTemp.size);
          oSQL.next;
        end;
       OLE.LoadFrom(msContent);
     finally  
      msContent.clear;
      msContent.free;
     end;
    end;
      

  8.   

    我保存在数据库中的是Word文档,读出来的时候是流文件的格式,按照上面的方法和并后,msContent的size是增加了,但是显示出来的还是第一条纪录的内容,这里面是不是涉及到Word文档的格式问题(比如什么开始和结尾标志等等),所以只能显示第一条。
    大家帮帮忙,谢谢!!