本人正在编写一个COM+组件,要求在组件中封装ADO对象,要求能够返回RecordSet记录集,但返回记录集时不知拿什么数据类型来接收,特来请教高手。
方法如下:……
cn:Variant;
rs:Variant;……procedure TAdoComPlus.setConnection(const strConnection: WideString);
begin
   cn:=CreateOleObject('ADODB.Connection');//创建ADO Connetcion对象,对象名为cn
   cn.Open(strConnection);
end;
//打开strSql变量所保存的记录集
procedure TAdoComPlus.openRecordSet(const strSQL: WideString; cursorType,
  lockType: Integer);
begin
   rs:=CreateOleObject('ADODB.RecordSet'); //创建ADO RecordSet对象,对象名为rs
   rs.Open(strSQL,cn,cursorType,lockType);
end;……//以下为返回记录集的函数:
function TAdoComPlus.getRecordSet: OleVariant;
begin
    Result:=rs;
end;Variant类型和RedorcSet类型如何转换?而且在Delphi没有RecordSet类型,怎么处理?还望高手指点。

解决方案 »

  1.   

    都用Olevariant類型
    在客戶端直接把ClientDataSet.recordset = getRecordset
      

  2.   

    ClientDataSet控件中没有recordset属性,我用ClientDataSet.data:=getRecordSet时,出现错误:“Ivalid data packet”,不知是什么原因?
      

  3.   

    客户端也用ADO不就得了,干吗非得用ClientDataSet :)
      

  4.   

    ADOQuery.recordset := Iunknown(getRecordSet) as _Recordset
      

  5.   

    我的过程如下:
    ……
      ADOQuery1.recordset := Iunknown(iADo.getRecordSet) as _Recordset;
      datasource1.DataSet:=adoquery1;
      dbgrid1.DataSource:=datasource1;
    ……结果却出现如下错误:
    raised exception class EDatabaseError with message 'Dataset does not support books,which are required for multi-record data controls';
    答:汗不知,哪位兄弟给解决一下:)