COM组件的方法通过DataSet范围数据表,返回了一个数据集。但是怎样返回给调用者呢?像返回值类型这些,怎样设置?请指教

解决方案 »

  1.   

    返回一个变体类型的.data,然后在客户端符给ClientDataSet.data就可以了。
      

  2.   

    可是function TcmTry.OpenDatabase: OleVariant;
    begin
      objDataSet := TADODataSet.Create( objDataSet );
      // ... ...
      Result := objDataSet;
    end;最后的返回语句会报类型错误阿
      

  3.   


    服务端..
    Result := objDataSet.recordset;客户端..
    创建一个adoDataSet对象,
    假设data:OleVariant;是返回的参数..adoDataSet.recordset:=Iunknown(data) as _recordset;
    可以这样传回来,也就是传_recordset接口的引用..
    组件底层会自动对它作散集与列集处理.
    这种方法感觉起来比BORLAND的MIDAS方式,也就是用CLIENTDATASET传
    数据集要慢一些.不过好处是可以支持其它工具作客户端..
    比如VC,VB,VBS脚本,ASP等..
      

  4.   

    后来我也这么传过,然后用vb调用,Dim rs as new Adodb.RecordSetSet rs = cmTry.Open 
    编译都通过了,但是总是非法操作。
    还有,
    后来我在com中使用CreateOleObject('ADODB.RecordSet')
    创建对象进行返回,调用也是同样问题,非法操作。
      

  5.   

    还有就是,改为传递SYSINT这些,没有问题。
      

  6.   

    晕。。就算我不大会VB,不过看你这样调用也是错的。。Dim rs as new Adodb.RecordSet
             ~~~~|
                 这儿干什么要创建对象啊?
    Set rs = cmTry.Open ========这是以前写的例子===============================
    Sub Main
        Set pq = WScript.CreateObject("myserver.mytest")
        Set ab=pq.GetMyTables("")
        WScript.Echo ab.recordcount   
    End Subcall Main