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;
由于时间所限,以上论述和伪码中可能存在错误,但希望给你帮助。