我的想法是这样的:
DataSetProvider的属性Data是OleVariant类型的,那么我就用这个属性返回
SQL查询的数据集给Ole/Automation.
在项目中新建一个RemoteDataModule,取名为RdmGetDatas.那么类型库中就多了
一个CoRdmGetDatas类。在这个远程数据模块中放一个Database,连接到你的数据库,
再放一个Tqurey,连接到TdataBase。再放一个DataSetProvider,连接到Tquery.
在IRdmGetDatas接口新建一个方法GetData,它有两个参数,一个是SQl,WideSting型
用来传SQL语句给TQuery.另一个是Vdatas,是OleVariant型,用来回传数据集。
Procedure TRdmGetDatas.GetData(const:SQL,var:Vdatas)
Begin
With query1 do
begin
sql.clear
sql.Add(SQL);
open;
end;
Vdatas:=DataSetProvider1.Data;
end;
好了,现在可以在你的OLE/Automation调用这个方法了。
在OLE/Automation的接口也定义一个方法GetRdmDatas.这个方法也有两个参数
一个是SQl,传来客户的SQL语句,另一个是VDatas,用来回传数据集。
Procedure TautomationObj.GetRdmDatas(const :SQl string,var:Vdatas OleVariant)
var aInterface:IRdmGetdatas;//这个接口是远程数据模块的接口。
begin
aInterFace:=CreateComObject(Class_OleAutoDemoRdm) as IOleAutoDemoRdm;
aInterFace.GetData(SQl,vDatas);//调用远程数据模块中的方法。
end;
现在可以在OLE/Automation中返回SQL查询的数据集了。
以上是小弟个人的想法,不知各位大侠有何高见?