今天看到一个贴直接将ADOQuery的数据生成Stream放入数据库,不生成临时文件aaa.xmlhttp://topic.csdn.net/u/20090708/10/364b048c-1ecf-41ac-89f0-285fba9f3479.htmluses
    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;上面这段代码看不懂。如果从数据库中取出来的内容转成Stream后,也不生成xml文件直接放到ADOQuery,也就是上面说的那个过程反过来,要怎么做啊?请高人赐教.

解决方案 »

  1.   

    procedure ADOWriteData(ADataSet:TCustomADODataSet;const AData:OLEVariant;
      AFormat:TPersistFormat=pfADTG);
    var
      ADOStream:_Stream;
      AR:_RecordSet;
    begin
      ADOStream:=CoStream.Create;
      try
        ADOStream.Open(EmptyParam,adModeUnknown,adOpenStreamUnspecified,'','');
        ADOStream.Position:=0;
        if AFormat=pfADTG then
        begin
          ADOStream.Type_:=adTypeBinary;
          ADOStream.Write(AData);
        end
        else
        begin
          ADOStream.Type_:=adTypeText;
          ADOStream.WriteText(AData,adWriteChar);
        end;    AR:=CoRecordset.Create;
        try
          //开启为BatchUpdate,不用ADataSet的LockType和CursorType等
          //如果AData里面是多笔pending资料,AR不用Batchupdate会对update的资料无知觉
          ADOStream.Position:=0;
          AR.CursorLocation:=CursorLocationValues[clUseClient];
          AR.Open(ADOStream,EmptyParam,
            CursorTypeValues[ctStatic],
            LockTypeValues[ltBatchOptimistic],
            Integer(CommandTypeValues[cmdText]) + ExecuteOptionsToOrd([]));
          //必须为AR挂上Connection,否则BatchUpdate无效
          ADataSet.Close;
          if ADataSet.Connection<>nil then
          begin
            if not ADataSet.Connection.Connected then ADataSet.Connection.Open;
            //只有open后才能调用_Set_ActiveConnection
            AR._Set_ActiveConnection(ADataSet.Connection.ConnectionObject);
          end;
          ADataSet.LockType:=ltBatchOptimistic;
          ADataSet.Recordset:=ADOInt._Recordset(AR);
        except
          AR:=nil;
          Raise;
        end;
      finally
        ADOStream:=nil;
      end;
    end;
      

  2.   

    流的方式是不用生成临时文件
    楼主 这样 【从数据库中取出来内容转成Stream后,不生成xml文件直接放到ADOQuery】不如直接 从数据库中取出来内容-》ADOQuery
      

  3.   


    你没看懂吧,我不是要ADOQuery的字段与数据库中字段一一对应,而是数据库中一个字段对应整个ADOQuery,ADOQuery中的所有数据放到数据库中一个字段值内。
      

  4.   

    To acrodelphiCoStream在哪个单元?_Stream在哪个单元?
      

  5.   

    ADODB_TLB.pas
    从IDE菜单Project-import type library...引入“Microsoft ActiveX Data Object 2.8 Library”