在com+类中怎么样定义一个返回数据集的函数,在客户端又怎么样来调用它?

解决方案 »

  1.   

    客户端怎么样才能不要执行的SQL语句传给com+类里的adoquery,
    是不是在com+里ado 的用法和在普通程序里是一样的了?
      

  2.   

    To freevc (梦想飞):
        “客户端怎么样才能不要执行的SQL语句传给com+类里的adoquery”这句话是什么意思?
      

  3.   

    哈哈,不好意思写错了,
    是客户端怎样才能把要执行的sql语句传给com+类里的adoquery?
      

  4.   

    To freevc (梦想飞):
        1. “是不是在com+里ado 的用法和在普通程序里是一样的了?”
    ===================================================================================
        是的,ADO的用法没有什么改变,因为多层分布式应用系统中的数据(即记录集合)是以OleVariant的形式在机器间进行传递的(抛开底层数据结构不谈)。请看以下数据传递过程,你就明白为什么ADO的用法没有改变了,因为其提供的数据要经过TDataSetProvider封包后再传递给客户端。客户端[TClientDataSet]---TDCOMConnection---服务器[TDataSetProvider]---具体数据存取引擎[TADOQuery]---具体数据库[SQL Server2000]。    2. “客户端怎样才能把要执行的sql语句传给com+类里的adoquery?”
    ===================================================================================
        假定你的COM+接口为ITestDCOM,添加一个方法为MethodTransferSQL,然后添加一个参数strSQL : WideString,最后把你要传递的SQL语句赋值给该参数,这是第一步。第二步,你在该方法中实现将strSQL参数赋值作为TADOQuery对象的SQL语句,不就可以了吗?还有一种更加快捷的方式就是直接对TDataSetProvider对象的Options属性进行赋值,然后你就可以直接操作TClientDataSet对象的CommandText属性对TADOQuery进行SQL语句的赋值了。    3. “在com+类中怎么样定义一个返回数据集的函数,在客户端又怎么样来调用它?”
    ===================================================================================
        注意,如果你不是开发Web应用程序,请返回OleVariant类型的数据,然后将其赋值为TClientDataSet.Data,由TClientDataSet直接帮你解析为数据集即可。客户端如何调用?为了让你有一个比较形象和充分的了解,我来写一个简单的示例:
        COM+端的ITestDCOM有一个方法为MReturnRecords,其形式为:
        function MReturnRecords(var ReturnData : OleVariant) : Integer;
        begin
          1. 调用TADOQuery对象进行数据库操作
          2. ReturnData := TDataSetProvider.Data
          3. Return 100 //预先设定的返回值
        end;
        在客户端你就可以使用一个TClientDataSet对象和一个函数将COM+返回的数据进行显示或其他的操作了。
        function GetRecordsFromDCOM : Boolean;
        var
          aDCOMObj : ITestDCOM;
        begin
          aDCOMObj := coTestDCOM.CreateRemote('MidServer');
          aDCOMObj.MReturnRecords(aClientDataSet.Data);
          Result := True;
        end;
        由于时间所限,以上论述和伪码中可能存在错误,但希望给你帮助。