生成xml用ADOQuery_Bind.SaveToFile('aaa.xml',pfXML)速度很快,能否直接导入stream不生成临时文件aaa.xml,因为当非常多的用户访问数据库时可能会生成相同的aaa.xml,当再用loadfrom时可能xml内容会搞错。

解决方案 »

  1.   

    不能,直接导入stream不生成临时文件aaa.xml,没有文件,哪来的文件流
      

  2.   

    或者有没有其他的控件,c++的也可以,我想把xml格式转换成widestring,用web service传给客户端。
      

  3.   

    我测试用ADOQuery查询后,再用for循环生成xml花的时间很长,1万行记录用for生成xml要花20秒以上,如果直接用SaveToFile几秒就完成了。
      

  4.   

    如果ADOQuery_Bind有SaveToStream的方法,就可以
      

  5.   


       uses
        adoint,activex;const
      IID__RecordsetEx: TGUID = '{00000556-0000-0010-8000-00AA006D2EA4}';
    type
        _RecordsetEx = interface(_Recordset)
        ['{00000556-0000-0010-8000-00AA006D2EA4}']
        procedure Save(Destination: OleVariant; PersistFormat: PersistFormatEnum); safecall;
      end;procedure TForm2.Button1Click(Sender: TObject);
    var
      r: _RecordsetEx;
      rs: TStringStream;
      ris: TStreamAdapter;
      ris_ref: IStream;
    begin
      r := adoQuery1.Recordset as _RecordsetEx;
      rs := TStringStream.Create('');
      try
        ris_ref := TStreamAdapter.Create(rs) as IStream;
        try
          r.Save(ris_ref, adPersistXML);
          ShowMessage(rs.DataString);
        finally
          ris_ref := Nil;
        end;
      finally
        rs.Free;
      end;
    end;
      

  6.   

    在delphi7.0下测试非常满意.
    今天我装了delphi2009,测试时用length(rs.DataString)不等于rs.size,而且再用rs.DataString还原成另外一个stream变量时,会和之前stream的不一样。可能是rs.DataString时有编码问题。又麻烦了。
      

  7.   

    使用TStringStream只是一个功能演示.你可以直接使用TMemoryStream等等.
      

  8.   

    delphi7是可以的。2009还是有问题
      

  9.   

    问题解决了,在delphi2009里TStringStream里增加TEncoding功能,所以改成 TStringStream.Create('',TEncoding.UTF8);