olevariant赋值的问题(100分)

  • 主题发起人 主题发起人 liuhelin
  • 开始时间 开始时间
L

liuhelin

Unregistered / Unconfirmed
GUEST, unregistred user!
//是这样的,因为要与vb的程序通讯我需要接受一个vb传过来的adoconnection
//我想这样写
procedure TActiveFormX.ActiveFormCreate(Sender: TObject);
var cnn:olevariant;
// adoconn:TADOConnection;这个控件直接放在form上
str_sql:string;
begin
cnn:=createoleobject('ADODB.Connection');
adoconn:=cnn;
end;
//这样编译就出错,但是没办法我只能用createoleobject('ADODB.Connection');
//因为cnn是vb传过来的,我又必须在delphi中使用这个cnn
//我该怎样弄啊?帮帮忙啊,这个月的奖金就靠他了
//我分不多了,只好给100了
 
我使用adoconn:=cnn as TADOConnection;
编译也不行
我该怎么办啊
 
当然不行了
因为adoconn、cnn类型不兼容的。
你可以把“连接字符串”传过来。就可以解决你的需要了。
 
的确adoconn、cnn类型不兼容的。
但是实际上TADOConnection是封装的adodb.connection
TADOConnection = class(TCustomConnection, IUnknown, ConnectionEventsVT)
FConnectionObject: _Connection;//这个就是接口啊

_Connection = interface(Connection15)
['{00000550-0000-0010-8000-00AA006D2EA4}']
procedure Cancel; safecall;
end;

delphi的ado和adodb.connection其实都是一个东西
delphi封装后反而不能赋值了
 
试试以下两种方式:

adoconn.ConnectionObject:=_Connection(cnn);

adoconn.ConnectionObject:=cnn;
 
这样用是可以的:
var
cnn:OLevariant;
procedure TForm1.FormCreate(Sender: TObject);
begin
cnn:=createoleobject('ADODB.Connection');
Adoconnection1.ConnectionString:=cnn.ConnectionString;
end;
 
所以你要把cnn赋给adoconn.ConnectionObject而不是adoconn

另外TADOConnection = class(TCustomConnection, IUnknown, ConnectionEventsVT)
它没有实现_Connection = interface(Connection15)接口
即使他们实现了同样的接口,也是不兼容的,因为一个是类类型,一个是接口类型
 
adoconn.ConnectionObject:=_Connection(cnn);

adoconn.ConnectionObject:=cnn;
这两个编译都不行 啊
 
看一下adoconn.ConnectionObject是否为只读属性
如果方便把错误信息贴上来
 
adoconn.ConnectionObject:=cnn;

Incompatible types: 'OleVariant' and '_Connection'
 
试试adoconn.ConnectionObject := cnn as _Connection;看
我现在的电脑没有Delphi否则就帮你试试了,哈哈
 
adoconn.ConnectionObject:=_Connection(cnn);

Invalid typecast
 
adoconn.ConnectionObject := cnn as _Connection
Operator not applicable to this operand type
 
我帮你写了一下,可以了。^_^
uses
ADODB, ActiveX, ADOInt;

procedure TActiveFormX.ActiveFormCreate(Sender: TObject);
var
temp : IUnknown;
begin
//创建一个ADO链接的COM对象的实例。
//CLASS_Connection是ADO链接的COM对象的IID,在ADOInt单元声明。
CoCreateInstance(CLASS_Connection, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, temp);
ADOConnection1.ConnectionObject := temp as _Connection;
end;
 
关注……
 
多人接受答案了。
 
后退
顶部