X
xiao_hero
Unregistered / Unconfirmed
GUEST, unregistred user!
我想用COM实现一SQL查询问题,在客户端只需输入SQL语句和一个是否想返回记录集的布尔
标志,即可完成所需的功能。我采用进程内COM服务器模式,定义的方法如下:
function Execute(const sqlstr: WideString;
flag: WordBool): IDispatch;safecall;
与数据库的连接采用ADO方式,因此在Uses中会加上ADODB_TLB,方法具体实现如下:
function Tsqlquery.Execute(const sqlstr: WideString;flag: WordBool): IDispatch;
var
Fconnection:_connection;
Frecordset:_recordset;
begin
Fconnection:=Coconnection.Create;
Fconnection.Open('DSN=testado','','',-1);
Frecordset:=Corecordset.Create;
Frecordset.Open(sqlstr,Fconnection,adOpenDynamic,adLockOptimistic,adCmdText);
if flag=true
then
result:=Frecordset;
end;
现在遇到一个问题,就是方法返回的类型是Idispatch,在客户端我采用olevariant来调用方法,
即为:mysqlqueryvar:=createoleobject('SqlQuerySrv.sqlquery'),mysqlqueryvar声明为
olevariant,然后执行mysqlqueryvar.Execute(sqlstring,true),这个返回的是olevariant
而现在我想要返回的是记录集类型,即为_recordset,因为我想要调用记录集中的数据。注意
我这里要必须采用olevariant来调用方法,比如采用接口不行,如:mysqlqurey:=Cosqlquery.create
as Isqlquery,myrecordset:=mysqlquery.execute(sqlstring,true) as _recordset,我知道
这个是可以的,但现在我必须要采用olevariant!请问该如何解决呢?急盼答复!!!
标志,即可完成所需的功能。我采用进程内COM服务器模式,定义的方法如下:
function Execute(const sqlstr: WideString;
flag: WordBool): IDispatch;safecall;
与数据库的连接采用ADO方式,因此在Uses中会加上ADODB_TLB,方法具体实现如下:
function Tsqlquery.Execute(const sqlstr: WideString;flag: WordBool): IDispatch;
var
Fconnection:_connection;
Frecordset:_recordset;
begin
Fconnection:=Coconnection.Create;
Fconnection.Open('DSN=testado','','',-1);
Frecordset:=Corecordset.Create;
Frecordset.Open(sqlstr,Fconnection,adOpenDynamic,adLockOptimistic,adCmdText);
if flag=true
then
result:=Frecordset;
end;
现在遇到一个问题,就是方法返回的类型是Idispatch,在客户端我采用olevariant来调用方法,
即为:mysqlqueryvar:=createoleobject('SqlQuerySrv.sqlquery'),mysqlqueryvar声明为
olevariant,然后执行mysqlqueryvar.Execute(sqlstring,true),这个返回的是olevariant
而现在我想要返回的是记录集类型,即为_recordset,因为我想要调用记录集中的数据。注意
我这里要必须采用olevariant来调用方法,比如采用接口不行,如:mysqlqurey:=Cosqlquery.create
as Isqlquery,myrecordset:=mysqlquery.execute(sqlstring,true) as _recordset,我知道
这个是可以的,但现在我必须要采用olevariant!请问该如何解决呢?急盼答复!!!