谁能解决这个问题,我愿意把所有分数送上(146分),真的很急!!!急!!!我在线等! (99分)

  • 主题发起人 xiao_hero
  • 开始时间
var
myCom:OleVaRiant;
begin
begin
//TestMethod是用Vc写的Com组件,返回类型Idispatch的指针
myCom:=DCOMConnection1.AppServer.TestMethod;(在dephi中调用TestMethod方法)
//myCom.
end;

该变量myCom如何操作?
 
ClientDataSet1.data := myCOM;
即可
 
DCOMConnection1.AppServer.TestMethod;(在dephi中调用TestMethod方法)该方法返回是
类型Idispatch的指针的数据集。ClientDataSet1.data := myCOM;运行后提示:invalid data packet.
该数据级在vbscript中调用没有问题
 
在Delphi中释放由createoleobject()创建的variant对象方法为:mycom:=unassigned;
既然返回类型Idispatch的指针,那么返回时直接使用as转化成记录集即可,即为:
var myrecordset:_recordset;
myrecordset:=DCOMConnection1.AppServer.TestMethod as _recordset;
因为_recordset是从Idispatch继承而来的接口,当然可以采用as转化了。
 
var myrecordset:_recordset;(错误信息:undeclared identifier:'_recordset')
myrecordset:=DCOMConnection1.AppServer.TestMethod as _recordset;(错误信息: Operator not applicable to this operand type)
 
大哥门给点提示!!!![:)]
 
拜托,在uses里加入ADODB_TLB,要引入adodb才行了!
 
谢谢:)
 
介绍本书看:)
 
Delphi COM深入编程 机械工业出版社
Delphi5入门与提高
 
把原代码发给我,我帮你修改!
我的Email:feifan731@163.net
 
Delphi5中,我在创建完COM服务器(进程内或是进程外)后,在选择Import Type Library
后,为什么每次都会出错呢?我如果重新再来一次,就没有刚才那个问题了。每次都是这样,
你说是什么原因呢?
 
可以用OleVariant
如:
function Execute(SQL:WideString;bReturn:Boolean):OleVariant;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SQL);
ADOQuery1.Open;
if bReturn then
Result:=ADOQuery1.RecordSet;
end;

也可以轉化成XML格式的String;
 
有VB作的Com要传Recordset参数,
就是不知道在Delphi中怎么传这个Recordset参数?????????????
那位老大有代码??
 
我想用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!请问该如何解决呢?急盼答复!!!
 
顶部