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;
我左看右看,好像是可行的,怎么为什么只有第一条纪录显示,妈的!!我要砸了电脑,你们不要拦着我!!!

解决方案 »

  1.   

    ....
    oSQL.First
    while not oSQL.eof do
        begin
    ....
      

  2.   

    while not oSQL.eof do
        begin      msTemp.clear;      TBlobField(oSQL.fieldbyname('nr')).SaveToStream(msTemp);
          msTemp.position:=0;
          msContent.Position:=msContent.size;
          msContent.CopyFrom(msTemp,msTemp.size);
          oSQL.next;
        end;
      

  3.   

    var
      msTemp:TMemoryStream;
      msContent:TMemoryStream;
    begin
      msTemp:=TMemoryStream.Create;
      msConent:=TMemoryStream.Create;
      oSQL.First; 
      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;
    try it again!
      

  4.   

    oSQL.First; 这一句是有的,粘贴的时候漏掉了
    不行啊!不知道怎么回事??
      

  5.   


    procedure TForm1.Button1Click(Sender: TObject);
    var s1,s2: TMemoryStream;
        s: PChar;
        b: integer;
    begin
      s := AllocMem(14);
      s := 'abcedf';
      s1 := TMemoryStream.Create ;
      s2 := TMemoryStream.Create ;
      s1.WriteBuffer(s^,sizeof(s)+2);
      s1.Position := 0;
      s2.CopyFrom(s1,s1.Size );
      s2.Position := s2.Size ;
      s1.Position := 0;
      s2.CopyFrom(s1,s1.Size);
      s := AllocMem(40);  s2.Position := 0;  s2.ReadBuffer(s^,s2.Size);
      edit1.Text := s;
      Dispose(s);
      s1.Free;
      s2.Free;
    end;
      

  6.   

    其实在我看来,只需一个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;
      //msTemp.free;
    end;
      

  7.   

    不好意思,忘了说明白了,我原来存在数据库中的是Word文档,现在就是把查出来的每个Word文档(以流文件的形式保存的)和并在一个文件中,可能每个Word文档都有开始和结束标志,不知道该怎么处理