OleVariant类型如何转换成ADODB的recordset类型!!!!(50分)

  • 主题发起人 主题发起人 yccai
  • 开始时间 开始时间
Y

yccai

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。
COM的一个方法返回值OleVariant类型。实际就是一个recordset类型。
请问如何转换??????
在线等待!!!
 
data:OleVariant;
recordset.data:=data
 
to 康凌:
recordset是什么?
 
这个如何?
来自:darnis, 时间:2002-10-10 15:41:00, ID:1368061
鉴于用 CreateOleObject 创建的 Automation 服务器在编程时不大方便,
我有个小经验是,
var
wordApp : _Application;
begin
...
WordAppp := CreateOleObject('Word.Application') as _Application;
..
end;
这种方式,GetActiveOleObject 和 CreateOleObject 得到的是 OleVariant
转换成指定的接口就可以了。。
风中的沙粒 提到的问题,可以用这种方式解决

ACad : IAcadApplication;
try
acad := GetActiveOleObject('AutoCAD.Application') as IAcadApplication;
except
try
acad := CreateOleObject('AutoCAD.Application') as IAcadApplication;
except
raise Exception.Create('AutoCAD Error!');
end;
end;
这样就可以用 Acad 来控制AutoCAD 了(如果正常驱动),而且在写代码时,也可以
利用代码提示了。。:)
你所对应的大概就是AdoDB里面的_Recordset吧?
 
我是把返回的OleVariant赋值给 TClientDataSet.Data ^_^
 
to wwr74:
这个不行,我试了的.
提示数据包不对!
 
我给你贴的办法也不行吗?
 
function VariantToRecordset(const Value: OleVariant): _Recordset;
begin

With TVarData(Value)do

if VType = varDispatch then

Result := IDispatch(TVarData(Value).VDispatch) as _Recordset
else

Result := nil;
end;

其实
AdoDataSet.Recordset:=IUnknown(GetData) as _recordset
就行
 
com中传回的是一个Olevariant类型的原生ado.reccordset.
客户程序中:
var
ado1: ICaiCom2;
rs: OleVariant;
begin
ado1:=CoCaiCom2.CreateRemote('server');
rs:=ado1.getdata('select * from company',i);
if i<>0 then
begin
问题在这里:如何把传回来的结果集写到datagrid中.

end;
end;
 
谢谢大家!!!问题解决了。
to 碧血剑:
你写的函数OK了。谢谢你。
能不能解释一下原理!!再次谢谢!

 
AdoDataSet.Recordset:=IUnknown(GetData) as _recordset
然后把dbgrid指向AdoDataSet
 
to 碧血剑:
能否留下QQ或是email.以便下次再次请教.
 
直接将OleVarianr付给ClientDataset.data
ClientDataSet.Active:=False;
ClientDataSet.data:=rs;
DbGrid.DataSource:=self.DataSource1;
self.DataSource1.DataSet:=ClientDataSet;
ClientDataSet.Active:=True;
 
我也是跟人学的
就是把olevariant强制转换成接口
 
jl1999@163.net
 
后退
顶部