• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 过年好!一个关于Ado和Com的问题,绝对高手请进入

过年好!一个关于Ado和Com的问题,绝对高手请进入

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 过年好!一个关于Ado和Com的问题,绝对高手请进入等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 过年好!一个关于Ado和Com的问题,绝对高手请进入
描述:

本人信誉极好,敬请放心!我现在遇到如此棘手问题,我希望实现数据库三层的功能,举例:我在com(中间层)中建立几条和数据库的连接,然后在利用_RecordsetPtr获取查询后的结果集指针,这样结果集便在com中获取,那么我又如何将他以参数的形式在传递给客户端呢?我想这肯定得需要将_RecordsetPtr转换成OleVaraint,可是这是否能转,又如何转换呢?请赐教


解决方案1:

study

解决方案2:

_RecordsetPtr转换成OleVaraint
1。可以直接用 IRecordset* 不要用 智能指针
在idl中 import "xxx.idl"; // 定义了IRecordset 哪个idl
[out,retval]IRecordset** pRS 
2。当然 [out,retval]IDispatch **pRS 这个也可以 
3。象 QueryInterface的方式也行 
[in]REFIID rguid, [out, iid_is(rguid)]void** ppv

解决方案3:

声明[out,retval]IDispatch **pRS
STDMETHODIMP CGetCurrData::ReadData(BSTR name, BSTR pwd, BSTR dsn, 
BSTR sel, BSTR sel_table, BSTR sel_from, 
BSTR sel_where, int sign, IDispatch **pRS)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
_bstr_t temp;
_bstr_t strSQL;
if(sign==0)
{
strSQL=sel;
}
else
{
temp="SELECT ";
temp+=sel_table;
temp+=" FROM ";
temp+=sel_from;
if(sel_where==L"")
{
temp+=" WHERE ";
temp+=sel_where;
}
strSQL=temp;
}
HRESULT hr;
_RecordsetPtr pORS;
_ConnectionPtr pConn;
try{
pConn.CreateInstance(__uuidof(Connection));
pORS.CreateInstance(__uuidof(Recordset));
hr=pConn->Open(dsn,name,pwd,-1);
if(FAILED(hr))  _com_raise_error (hr);
pORS->CursorLocation = adUseClient;
pORS->Open(_variant_t(strSQL),(IDispatch*)pConn,adOpenStatic,
                   adLockReadOnly,adCmdText);
if (FAILED(hr)) _com_raise_error (hr);
}catch(_com_error &e)
{
if (m_spObjectContext != NULL) m_spObjectContext->SetAbort();
return e.Error();
}
// pORS->putref_ActiveConnection(NULL);
*pRS=(IDispatch *)pORS.Detach();
if (m_spObjectContext != NULL) m_spObjectContext->SetComplete();
return S_OK;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 过年好!一个关于Ado和Com的问题,绝对高手请进入

相关文章

  • 2017-06-05 ATL,Win32实现文件到桌面的拖放(不用MFC)
  • 2017-06-05 那里有最基本使用线程编写的原程序?
  • 2017-06-05 MFC写一个大文件分块上传的ocx浏览器插件
  • 2017-06-05 似乎是老大难题:线程同时要完成CSocket和界面交互!
  • 2017-06-04 请问IEnumConnectionPoints接口应该怎样枚举连接点
  • 2017-06-04 VC2008编译文件错误请各位支招。
  • 2017-06-04 ActiveX控件设计问题,请高人指点!
  • 2017-06-04 如何获得窗口相对于桌面的坐标,谢谢
  • 2017-06-05 EnumProcesses,编译的时候提示找不到Psapih??????
  • 2017-06-05 想把charstr[MAX_PATH]改成一个数组每个数组成员为charstr[MAX_PATH]?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 一个很小的程序,CreateInstance失败了,是否是参数错误?
    • 在SDK中建立一个线程,下面是否正确?
    • GPU+CPU并行运算,谁能说一说
    • DCOM连接问题???
    • 求高人帮忙COMBOBOX问题~~~小弟感激不敬
    • 想做一个可以嵌入word文档中的控件,需要实现那些接口?哪有可以参考的代码?
    • 请问,COM对象和调用方之间如何传递集合信息?
    • ATL技术怎么实现outlook的插件对话框界面
    • activeX控件如何响应keydown消息?
    • 在一个ActiveX控件(A)上动态建立另一个ActiveX控件(B),如何建立?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有