如何从COM传入的参数得到TADOConnection,大侠快帮忙!

zzyx 2003-05-26 03:37:00
我想完成跨COM传递ADOConnection对象
我使用这个方法的原因是,可以在客户端打开一个TADOConnection,然后把这个连接
传递给COM组件,在组件中,可以继续使用这个连接而不必建立新的连接。


也就是说,我想做这样一个COM
方法为(IDL):
SetAdo(IDispatch* pAdo)

在delphi中对应的就是
procedure SetAdo(const adoConn: IDispatch)

在函数实现中,有一个TADOConnection 变量
想要从传入的指针中重新得到一个ADO对象
简单表示为:
var adoInner:TADOConnection;
adoInner:=adoConn;
//这个语句肯定编译不过去,但我要达到的就是类似效果

请大家帮忙!
或提供其他类似的解决思路
谢谢

...全文
53 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyx 2003-05-29
  • 打赏
  • 举报
回复
把解决办法说说,
俺走了许多弯路,其实最简单的就是直接把指针赋值给TADOConnect对象,只是
赋值前要转换一下类型
俺还做了临时的TADOConnect对象,使用了QueryInterface,等等麻烦的做法


function TComAdoX.SetAdo(const pAdo: IUnknown;
out strRet: WideString): HResult;
var frmX:TfrmCOM;
begin

// 从IUnknwon接口查询ADOConnection接口,到ic
// hr:= pAdo.QueryInterface(IID__Connection,ic);
// adoConn:=TADOConnection.Create(nil);
// adoConn.ConnectionObject :=ic;

// 创建窗口
frmX:=TFrmCom.Create(nil);
// 创建adoCN
frmX.adoCN.Create(nil);
// frmX.adoCN.ConnectionObject :=ic;
frmX.adoCN.ConnectionObject :=pAdo as _Connection;
// 测试
// frmX.adoCN.Execute('select * from t_user');
// 打开窗体,显示数据
frmX.ShowModal ;

SetAdo:=S_OK;
end;
zzyx 2003-05-29
  • 打赏
  • 举报
回复
问题已经解决,谢谢各位关注!
俺笨,Focus(老鱼)的方法基本就可以用的了。

请Focus(老鱼) 到俺的另外一个帖子领分。

http://expert.csdn.net/Expert/topic/1849/1849379.xml?temp=.9240381
zzyx 2003-05-29
  • 打赏
  • 举报
回复
俺现在已经能把一个TADOConnection传递给COM的接口方法了
在该接口方法中,能从传递来的指针参数中重新构造出一个TADOConnection对象
并且能够调用其方法
现在的问题是,俺只能把传递来的指针转换为一个临时的TADOConnection中
还不能把它转换给位于Form中的已经存在的TADOConnection中

俺继续...
westfly 2003-05-28
  • 打赏
  • 举报
回复
adoInner := adoConn.ConnectionObject;
citytramper 2003-05-28
  • 打赏
  • 举报
回复
up
itren 2003-05-27
  • 打赏
  • 举报
回复
是不是要用已经创建了的ADOCONNECTION ??
zzyx 2003-05-27
  • 打赏
  • 举报
回复
各位,传递Ado对象到另外一个COM组件中是非常正常的做法!
而且,在某些情况下是有效的做法……避免了再次数据库连接

在COM中,使用IUnknown指针就是了。
从IUnknown指针重新构造一个ADO对象是比较简单的

传递ConnectString重新构造当然可以,但这就涉及到重新打开数据库连接了

当然,还有一个办法肯定可以避免再次连接,就是在COM中
直接使用ADO的COM接口,可以操作数据,而不使用TADOConnection
但这个方法存在的问题是,我就不能利用TADOConnection提供的和控件界面的相关性了

所以,俺希望的结果是能够把TADOConnection传递给另外一个COM。

俺delphi刚刚接触几天(连语法都每没有明白呢,手边也没有书,只能看help),
所以,如果问题比较愚蠢的话,请原谅。

Focus(老鱼)的办法俺明天试验!
上海老李 2003-05-27
  • 打赏
  • 举报
回复
应该不行,因为那样做会损失以前已得到的数据集!也许你就传传连接串吧!
Linux2001 2003-05-27
  • 打赏
  • 举报
回复
传递一个ADOConnection组件本身就证明了你COM组件设计就有严重的缺陷!
outer2000 2003-05-27
  • 打赏
  • 举报
回复
1,传递CONNTIONSTRING可以吗?
76liujing 2003-05-27
  • 打赏
  • 举报
回复
我觉得应该把数据库操作放在com组件中,
而不是传回到前台处理
zzyx 2003-05-27
  • 打赏
  • 举报
回复
回 itren(火神):是的。

如 Focus(老鱼) 所说方法,是可以把TADOConnection对象转换为一个COM接口指针,传递给
另外一个COM接口方法

现在的重点是在该COM接口方法的实现中
如何把传递来的指针再重新构造为TADOConnection?

这样做的目的是
1。避免再次连接数据库
2。在COM中还可以方便地使用TADOConnecction

还请各位dx继续关注!
第1章 Delphi 7新特性 1.1 安装 1.2 新特性 1.3 IDE的改进 第2章 Delphi 7组件简介 2.1 VCL 2.2 Delphi 7组件 2.3 可视组件的通用属性和事件 第3章 常用组件 3.1 文本相关组件 3.2 按钮和复选框 3.3 分组组件 3.4 菜单组件 3.5 图形组件 3.6 文件选择组件 3.7 网格组件 第4章 Data Access组件页 4.1 TDataSource组件 4.2 TClientDataSet组件 4.3 TDataSetProvider组件 4.4 TXMLTransform组件 4.5 TXMLTransformProvider组件 4.6 TXMLTransformClient组件 4.7 XMLMapper实用程序 第5章 Data Controls组件页 5.1 共同属性 5.2 TDBGrid组件 5.3 TDBNavigator组件 5.4 TDBText组件 5.5 TDBEdit组件 5.6 TDBMemo组件 5.7 TDBImage组件 5.8 TDDBListBox组件 5.9 TDBComboBox组件 5.10 TDBCheckBox组件 5.11 TDBRadioGroup组件 5.12 TdBLookkupListBox组件 5.13 TDBLookkupComboBox组件 5.14 TDBRichEdit组件 5.15 TDBCtrlGrid组件 5.16 TDBChart组件 第6章 dbExpress组件页 6.1 TSQLConnection组件 6.2 TSQLDataSet组件 6.3 TSQLQuery组件 6.4 TSQLTable组件 6.5 TSQLStoredProc组件 6.6 TSQLMonitor组件 6.7 TSimpleDataSet组件 6.8 实例——使用dbExpress方式连接Oracle数据库 6.9 实例——建立双平台运行的应用程序 第7章 BDE组件页 7.1 TTable组件 7.2 TQuery组件 7.3 TDataBase组件 7.4 TBatchMove组件 7.5 TUpdateSQL组件 7.6 综合应用实例 第8章 ADO组件页 8.1 TADOConnection组件 8.2 TADOCommand组件 8.3 TADODataSet组件 8.4 TADOTable组件 8.5 TADOQuery组件 8.6 TADOStoredProc组件 8.7 TRDSConnection组件 8.8 实例——应用TADOConnection和TADODataSet组件 8.9 实例——应用TADOConnection和TADOTable组件 8.10 实例——应用TADOConnection和TADOQuery组件 8.11 实例——应用TADOConnection、TADODataSet和TADOCommand组件 第9章 Decision Cube组件页 9.1 TDecisionCube组件 9.2 TDecisionQuery组件 9.3 TDecisionSource组件 9.4 TDecisionPivot组件 9.5 TDecisionGrid组件 9.6 TDecisionGraph组件 9.7 实例——应用Decision Cube组件页 第10章 Dialogs组件页 10.1 TOpenDialog组件 10.2 TSaveDialog组件 10.3 TOpenPicTureDialog组件 10.4 TSavePicTureDialog组件 10.5 TFontDialog组件 10.6 TColorDialog组件 10.7 TFindDialog组件 10.8 TReplaceDialog组件 10.9 TPrintDialog组件 10.10 TPrinterSetupDialog组件 10.11 TPageSetupDialog组件 第11章 Rave组件页 11.1 TRvProject组件 11.2 TRvSystem组件 11.3 TRvNDRWriter组件 11.4 TRvCustomConnection组件 11.5 TRvDataSetConnection组件 11.6 TRvTableConnection组件 11.7 TRvQueryConnection组件 11.8 TRvRenderPrinter组件 11.9 TRvRenderPreview组件 11.10 TRvRenderPDF组件 11.11 TRvRenderHTML组件 11.12 TRvRenderRTF组件 11.13 TRvRenderText组件 11.14 实例——建立Rave报表 11.15 实例——获取报表列表和预览报表 第12章 InterBase组件页 12.1 InterBase组件页 12.2 InterBase Admin组件页 12.3 InterBase组件页应用实例 第13章 Server组件页 13.1 Word和Excel程序对象 13.2 ToleServer组件 13.3 实例——在Delphi中操作Word 13.4 实例——使用TWordDocument组件连接Word自动化服务器 13.5 实例——建立与Excel连接 13.6 实例——以OLE方式建立与Excel连接 第14章 Internet组件页 14.1 Web服务器应用程序的结构 14.2 TWebDispatcher组件 14.3 TPageProducer组件 14.4 TDataSetPageProducer组件 14.5 TQueryTableProducer组件 14.6 TDataSetTableProducer组件 14.7 TSQLQueryTableProducer组件 14.8 TTcpClient组件 14.9 TTcpServer组件 14.10 TUdpSocket组件 14.11 TXMLDocument组件 14.12 TWebBrowser组件 14.13 建立Web服务器应用程序 14.14 访问数据库 14.15 调试Web服务器应用程序 14.16 实例——实现数据库查询的Web服务器应用程序 14.17 实例——实现动态参数查询 14.18 实例——Web服务器应用程序 14.19 综合实例——使用Socket的“网上对话”程序 第15章 WebSnap组件页 15.1 WebSnap概述 15.2 WebSnap结构 15.3 WebSnap组件页中的常用组件 15.4 WebSnap组件页中的数据库组件 15.5 WebSnap组件页中的访问控制组件 第16章 WebServices组件页 16.1 HTTPRIO组件 16.2 HTTPReqResp组件 16.3 OPToSoapDomConvert组件 16.4 SoapConnection组件 16.5 HTTPSoapDispatcher组件 16.6 WSDLHTMLPublish组件 16.7 HTTPSoapPascalInvoker组件 16.8 实例——应用Web Service组件页 第17章 Indy组件集 17.1 Indy Clients组件页 17.2 Indy Servers组件页 17.3 Indy Intercepts组件页 17.4 Indy I/O Handlers组件页 17.5 Indy Misc组件页 17.6 Indy组件集应用实例 第18章 IntraWeb组件页 18.1 概述 18.2 IW Standard组件页 18.3 IW Data组件页 18.4 IW Client Side组件页 18.5 IW Control组件页 18.6 IW组件应用实例

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧