• 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 > 怎么让COM返回一个数据集

怎么让COM返回一个数据集

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

佚名通过本文主要向大家介绍了jin10.com金十数据,绿联com口数据线,in10.com金十数据,读取com口数据,c#读取com口数据等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎么让COM返回一个数据集
描述:

刚学习COM,我准备做一个三层数据库程序,中间层用一个
COM,客户通过COM查询后台数据库后,COM怎么把所查询到
的数据集返回给客户层,谢谢!最好给个小例子说明。


解决方案1:

GetAgencyInfo([in] BSTR LogName, [out,retval] IDispatch **info)
STDMETHODIMP CCustomer::GetAgencyInfo(BSTR LogName, IDispatch **info)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
char  sql[SQL_BUFFER];
sprintf(sql,"SELECT * FROM Agency WHERE ID IN(SELECT PID FROM Customer WHERE Customer.LogName=\'%s\')",B2S(LogName));
_RecordsetPtr pRecordSet=NULL,pRecordSetCl /> try {
pRecordSet.CreateInstance(__uuidof(Recordset));
pRecordSet->CursorLocation = adUseClient;
pRecordSet->Open(sql,szConnectString,adOpenKeyset,adLockOptimistic,adCmdText);
pRecordSet->PutRefActiveConnection(NULL);
pRecordSetClone = pRecordSet->Clone(adLockOptimistic);
pRecordSetClone->QueryInterface(IID_IDispatch, (void**)info);
pRecordSet->Close();
pRecordSet = NULL;
} catch ( _com_error &e ) {
_bstr_t wszSource(e.Source());
_bstr_t wszDescription(e.Description());
_bstr_t wszErrorMessage(e.ErrorMessage());
ATLTRACE(_T("%s\n"), (LPCTSTR)wszSource);
ATLTRACE(_T("%s\n"), (LPCTSTR)wszDescription);
ATLTRACE(_T("%s\n"), (LPCTSTR)wszErrorMessage);
}
return S_OK;
}

解决方案2:

返回记录集,使用了COM+事务
STDMETHODIMP CUsers::Login(BSTR loginId, BSTR passWord, VARIANT appTitle, LPDISPATCH *adoRs)
{
// TODO: Add your implementation code here
_ConnectionPtr padoConnection = NULL;
_RecordsetPtr padoRecordset = NULL;
  CComPtr<IObjectContext> pObjCtx = NULL;
HRESULT hr = S_OK;
_bstr_t strSQLStmt;
try
{
//创建MTS上下文环境
  hr = GetObjectContext(&pObjCtx);
 
  // String I/O stream to write SQL statement
  basic_stringstream<wchar_t> strSQLStatement;
//创建SQL语句
strSQLStatement<<L"select a.user_name,a.login_id,a.password,"
<< L"a.user_dept,a.casher_no,b.dept_name,c.capability,c.application "
<< L"from hiscomm.dbo.users a(nolock),hiscomm.dbo.dept_dict b(nolock),"
<< L"hiscomm.dbo.app_grants c(nolock)";
//转换成bstr_t
  strSQLStmt = strSQLStatement.str().c_str();
       //连接数据库
hr = OpenConnection((LPDISPATCH*)&padoConnection);
       //执行SQL语句
padoRecordset=padoConnection->Execute(strSQLStmt,NULL,adCmdText);
//无连接记录
padoRecordset->PutRefActiveConnection(NULL); 
  if (padoConnection)
  {
  padoConnection->Close();
  }
padoRecordset->QueryInterface(IID_IDispatch,(void **)adoRs);
  if (pObjCtx)
  pObjCtx->SetComplete();
  }
  //返回错误信息
  catch(_com_error &e)
  {
BSTR err=e.Description ();
  if (pObjCtx)
  pObjCtx->SetAbort();
  if (padoConnection)
  {
  padoConnection->Close();
  }
hr=e.Error();
return Error(err,NULL,NULL,IID_IUsers,hr);
  }
return S_OK;
}

解决方案3:

IDispach * rsreturn;////要传出去的接口
* rsreturn = rs.getinterface();
return S_OK;

解决方案4:

如果你是用ADO就简单了,封装一下ADO.就可以提供给客户了.

解决方案5:

我也是刚接触这个方面得东西,刚自己做了一个,和你的目的一样,也是给用户层返回一个记录集,我是在客户层申请得Recordset,将Recordset传入到com函数中返回得数据集……方法很笨,呵呵

解决方案6:

to  bingmatong(*闷声发大财*) ,
GetRecordSet([in] BSTR Query, [out,retval] IDispatch **pRecordSet)

解决方案7:

Recordset本来就是一个COM对象,在其它支持COM的语言中可以声明一个指针或对象。可以说是与语言无关的。
... get_Rst([out,retval]IRecordset** pVal)

解决方案8:

给用户层返回一个记录集Recordset


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

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

  • com数据就真难搞,懂的帮看看
  • com中数据类型的问题,请高手帮忙
  • 如何用COM实现带有数据类型嵌套的数据结构?
  • COM数据测试调用问题,很奇怪呀,快来帮我解决呀?
  • 关于COM中数据类型的赋值问题?
  • 怎么让COM返回一个数据集

相关文章

  • 2017-06-04 MediaFoundation编程
  • 2017-06-05 关于用VC做DLL在PB中调用的问题
  • 2017-06-04 activex
  • 2017-06-05 《VC++技术内幕》第四版p217,关于线程和MFC。比较急,谢谢!
  • 2017-06-05 idl文件里面的[id1helpstring]当中的id1到底是什么含义,难道还有id2,id3么?
  • 2017-06-05 VC2005中OfficeExel的使用
  • 2017-06-05 召唤VC大神,在VC中调用VFP编译的COM组件问题
  • 2017-06-05 IAccessible->get_accChild失败,谢谢帮忙!
  • 2017-06-04 基于ATL技术的焦点问题,请大虾赐教!
  • 2017-06-05 用c++编的程序如何改成多线程?

文章分类

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

最近更新的内容

    • 关于ActiveX的问题?
    • CloseprocessofICQ
    • waveOutOpen和waveoutwrite函数怎么用?
    • 已知一个进程的句柄,可以用ExitProcess关闭这个进程么?怎么关?
    • 请问COM里面的接口函数可不可以有缺省值???
    • 高分求救,关于DLL里建立SOCKET连接的问题!!!
    • 透明绘图的另类问题。高手请来。不是普通的透明绘图能解决的
    • 如何创建一个网页控件呢
    • 什么是软件总线?
    • 求一com程序的详细的制作过程,实现类似于winrar的功能,但不需要压缩文件

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

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