方法function TestMethod: IDispatch;返回的类型为iDispatch
实际上里边是记录集,在delphi中怎么读取出来。  

解决方案 »

  1.   


    var
      Test:_RecordSet;
    begin
      Test:=函数返回值(iDispatch) as _RecordSet;
    end;
      

  2.   

    delphi中_RecordSet类型在哪个单元,没找到。
      

  3.   


    那是ms提供出的ADO接口,由各个厂商具体实现!
    Delphi把其放入ADODB.pas中!
    如果能看到函数实现,应该先看一下(很可能是一个中间层的接口函数,你可能看不到),函数的实现可能是function TestMethod: IDispatch;
    var
      adoDS:_Recordset;
    begin
      //创建adods
      //做一些操作向Recordset中
      result:= adoDS as IDispatch;
    end;
    你按照它的做数据操作不就行了
      

  4.   

    我是在通过delphi调用
    vc写的一个asp组件中的一个读取数据的函数。能不能将IDispatch转化为TClientdateSet可以接受的数据。
      

  5.   

    那就看看VC当中使用的是什么记录集接口.通常来讲应该是ADO的_recordset
      

  6.   

    部分原文:unit PASSRSLib_TLB;function TPassRsObj.GetData: IDispatch;
    begin
      Result := DefaultInterface.GetData;
    end;
      

  7.   

    VC中源码:
    STDMETHODIMP CPassRsObj::GetData(LPDISPATCH *ppRecordset)
    {
      _RecordsetPtr pSet;   ......  pSet->Clone(adLockOptimistic)->QueryInterface(IID_IDispatch, (void**) ppRecordset);
      return S_OK;
    }
      

  8.   

    uses
      adoint;var
      RS: _Recordset;RS := TPassRsObj.GetData as _Recordset;
    if RS = Nil then ShowMessage('接口错误')
    else ShowMessage('获取_Recordset接口成功');
      

  9.   

    非常感谢liangpei2008的指点。我在ADODB.pas找到了解决方法。
    也非常感谢unsigned ,结贴时没看到你到最后回复,所以没有给你分,真是不好意思。解决如下:
    var
      rs:   _RecordSet;
      VarResult: OleVariant;
    begin
       VarResult := PassRsObj1.getdata;
       rs := IUnknown(VarResult) as _Recordset;
       while not rs.EOF do
       begin
       showmessage(rs.Fields[1].value);
       rs.MoveNext;
       end;