如何将OLEVariant转换为Recordset(100分)

  • 主题发起人 主题发起人 kane
  • 开始时间 开始时间
K

kane

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在写一个中间层的组件,通过中间层的一个函数,返回一个OleVariant其函数如下:
function GetData:OleViariant;
begin
...
...
ADOQuery.Open;
Result;= ADOQuery.Recordset;
ADOQuery.Close;
...
...
end;

在ASP中可以通过调用这个函数得到一个Record对象.但是现在我在DELPHI中却没有
办法通过这个函数得到这个Record.在DELPHI中我是这么写的:
procedure TForm1.Button1Click(Sender: TObject);
var
ADODataSet: TADODataSet;
begin
ADODataSet:= TADODataSet.Create(nil);
ADODataSet.Recordset:= DCOMConnection1.AppServer.GetData;//此处报错,说
//Recordset类型与Variant类型不匹配
end;

请问如何解决这个问题?
 
实验
ADODataSet.Recordset:=adoint.RecordSet(DCOMConnection1.AppServer.GetData);
 
adoint是一个ADO接口的单元
 
arm:
你的方法好像不行啊,报错,"invalid typecast",还是不能转换
 
这样:
AdoDataSet.Recordset:=IUnknown(GetData) as _recordset
 
guqs:
你的方法我试了,编译可以通过,但是运行的时候报错,说Variant类型不能转换为
自动化接口.把它转化成IUnkown是什么意思呢?
 
客户端一定要用TAdoDataSet吗?
试试这样(仅供参考)?
procedure TForm1.Button1Click(Sender: TObject);
var
ClientDataSet: TClientDataSet;
begin
ClientDataSet:= TClientDataSet.Create(nil);
ClientDataSet.Data:= DCOMConnection1.AppServer.GetData;
end;

 
对不起,guqs的方法成功了,刚才是我代码写错了.
kylix,你的方法不行,因为虽然ClientDataSet的Data也是OleVariant,但是这是
它自己构造的包,和RecordSet结构不一样.
非常感谢guqs,把返回的数据用IUnknown包起来,是不是因为_Recordset是COM对象啊?
现在这个成功了,那么DELPHI和DNA基本上就能完全结合在一起了,一个组件写好了,无论
ASP或者VB或者DELPHI都可以调用了
 
呵呵,原来是我看错了,不好意思^-^。原来你要用的是Ado中的RecordSet.
不过,今天也学到了一招,受益匪浅。呵呵。
 
成了吗?
可以派分了!
 
后退
顶部