我在COM中建了一个ADO查询,COM方法中如何返回一个记录集?
如何在客户端调用查询结果集?先谢过了啦!!!!!!!!

解决方案 »

  1.   

    只能用OleVariant将数据打包发送,然后再客户端解包数据。
    事实上,Delphi的MIDAS已经替你做好了。
      

  2.   

    在com中处理好后,将指针传给客户端。
      

  3.   

    多谢两位,但是能不能说具体些呢?
    我试着用OLEVARIANT了,但不知道在客户端如何解包?
    什么是MIDAS?
    如果在COM中处理,又如何将指针传递给CLIENT呢?
      

  4.   

    com的返回时得到对象的地址
    Result:=Integer(Addr(yourObject));客户得到result后可以如下处理。
    yourvar:^yourobject;
    yourvar:=ptr(yourresult)
    这样指针就传过来了。
      

  5.   

    我从来不认为COM可以传递指针。
    我认为gaga_ghost(鬼王Gaga)不是根本得懂得指针。
    试想,两台计算机上它们得指针可能一样吗?MIDAS得书很多,可以看看。
      

  6.   

    我就是定义了函数返回 类型为OleVariant,
    把数据集赋给Result。
    即 result:=adoquery.recordset.
    则在客户端如何来解呢?
    请详细指点!!!!!
      

  7.   

    用远程数据模块来做, 就不要自己来处理了!如果你真要自己处理的话,
    那就这样,
      Result := AdoQuery.Recordset;在客户端就要用一个ClientDataSet
      然后直接用 ClientDataSet.Data := 我没有试,
      

  8.   

    我在COM端是这样来封装的:
    function query(sqlstr:string):OleVariant;
    begin
      with adoquery do
        begin
          sql.clear;
          sql.add('select * from talbe where '+sqlstr);
          execsql;
        end;
       result:=adoquery.recordset;
    end;我把记录集返回给RESULT;
    在客户端我要如何来引用这个记录集呢?
    我想把COM端的记录集写到STRINGGRID中显示出来。
    请详细指点~~~~~~~~~~~~~~~~~
    先谢过呀~~
      

  9.   

    : chechy(简简单单的活) 
    说的是有道理,但com好象是在同一台机器上运行的。是不是?
    分布式的组件好象是DCOM或者是COM+啊?不知道有没有说错?
      

  10.   

    to gaga_ghost(鬼王Gaga):即便是同一台机器,每个进程的内存管理也是不一样的。
    不同进程之间的内存不能互相访问。即便你使用In-process的COM组件,同样还是不能传递指针。不信就自己试试。
      

  11.   

    adoquery.recordset应该是一个Interface啊,前端收到这个Interface后,必须调用Interface钟的方法获取数据。这些方法需要查询MSDN.
      

  12.   

    chechy(简简单单的活) 
    我一直是这样用的,从没有出现过问题。不过争论也没有什么用处。重要的是让楼主知道去怎么解决问题。
    方法都说出来,大家就不象孔已己了嘛,呵呵。