请问如何在OLE/Automation中返回数据集呢?(100分)

  • 主题发起人 主题发起人 小天
  • 开始时间 开始时间

小天

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在OLE/Automation中返回SQL查询的数据集呢?
经供其他程序调用
 
如果你用的是ADO,其他比较有可能能调用(特别是ms的程序)
 
用VARIANT类型
 
怎么转换成variant呢?
 
这要看你想返回什么样的数据集了.
如果是ADO的话可以返回Recordset.
还有一种方法是将数据集转化为XML,
这样传递的是字符串, 客户端再将
XML转化为数据集.如果你用的是Delphi
的TDataSet一类的东西,你得自己写
转化的程序, 如果是ADO的话,2.1以
后的版本是支持XML的.用XML有比较
大的灵活性.
 
用OleVariant类型,具体怎样还得想想。
 
我的想法是这样的:
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查询的数据集了。
以上是小弟个人的想法,不知各位大侠有何高见?


 
多人接受答案了。
 
后退
顶部